123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- <?php
- /*
- [UCenter] (C)2001-2099 Comsenz Inc.
- This is NOT a freeware, use is subject to license terms
- $Id: note.php 1059 2011-03-01 07:25:09Z monkey $
- */
- !defined('IN_UC') && exit('Access Denied');
- define('UC_NOTE_REPEAT', 5);
- define('UC_NOTE_TIMEOUT', 15);
- define('UC_NOTE_GC', 10000);
- define('API_RETURN_FAILED', '-1');
- class notemodel {
- var $db;
- var $base;
- var $apps;
- var $operations = array();
- var $notetype = 'HTTP';
- function __construct(&$base) {
- $this->notemodel($base);
- }
- function notemodel(&$base) {
- $this->base = $base;
- $this->db = $base->db;
- $this->apps = $this->base->cache('apps');
- $this->operations = array(
- 'test'=>array('', 'action=test'),
- 'deleteuser'=>array('', 'action=deleteuser'),
- 'renameuser'=>array('', 'action=renameuser'),
- 'deletefriend'=>array('', 'action=deletefriend'),
- 'gettag'=>array('', 'action=gettag', 'tag', 'updatedata'),
- 'getcreditsettings'=>array('', 'action=getcreditsettings'),
- 'getcredit'=>array('', 'action=getcredit'),
- 'updatecreditsettings'=>array('', 'action=updatecreditsettings'),
- 'updateclient'=>array('', 'action=updateclient'),
- 'updatepw'=>array('', 'action=updatepw'),
- 'updatebadwords'=>array('', 'action=updatebadwords'),
- 'updatehosts'=>array('', 'action=updatehosts'),
- 'updateapps'=>array('', 'action=updateapps'),
- 'updatecredit'=>array('', 'action=updatecredit'),
- );
- }
- function get_total_num($all = TRUE) {
- }
- function get_list($page, $ppp, $totalnum, $all = TRUE) {
- }
- function delete_note($ids) {
- }
- function add($operation, $getdata='', $postdata='', $appids=array(), $pri = 0) {
- $extra = $varextra = '';
- $appadd = $varadd = array();
- foreach((array)$this->apps as $appid => $app) {
- $appid = $app['appid'];
- if($appid == intval($appid)) {
- if($appids && !in_array($appid, $appids)) {
- $appadd[] = 'app'.$appid."='1'";
- } else {
- $varadd[] = "('noteexists{$appid}', '1')";
- }
- }
- }
- if($appadd) {
- $extra = implode(',', $appadd);
- $extra = $extra ? ', '.$extra : '';
- }
- if($varadd) {
- $varextra = implode(', ', $varadd);
- $varextra = $varextra ? ', '.$varextra : '';
- }
- $getdata = addslashes($getdata);
- $postdata = addslashes($postdata);
- $this->db->query("INSERT INTO ".UC_DBTABLEPRE."notelist SET getdata='$getdata', operation='$operation', pri='$pri', postdata='$postdata'$extra");
- $insert_id = $this->db->insert_id();
- $insert_id && $this->db->query("REPLACE INTO ".UC_DBTABLEPRE."vars (name, value) VALUES ('noteexists', '1')$varextra");
- return $insert_id;
- }
- function send() {
- register_shutdown_function(array($this, '_send'));
- }
- function _send() {
- $note = $this->_get_note();
- if(empty($note)) {
- $this->db->query("REPLACE INTO ".UC_DBTABLEPRE."vars SET name='noteexists".UC_APPID."', value='0'");
- return NULL;
- }
- $this->sendone(UC_APPID, 0, $note);
- $this->_gc();
- }
- function sendone($appid, $noteid = 0, $note = '') {
- require_once UC_ROOT.'./lib/xml.class.php';
- $return = FALSE;
- $app = $this->apps[$appid];
- if($noteid) {
- $note = $this->_get_note_by_id($noteid);
- }
- $this->base->load('misc');
- $apifilename = isset($app['apifilename']) && $app['apifilename'] ? $app['apifilename'] : 'uc.php';
- if($app['extra']['apppath'] && @include $app['extra']['apppath'].'./api/'.$apifilename) {
- $uc_note = new uc_note();
- $method = $note['operation'];
- if(is_string($method) && !empty($method)) {
- parse_str($note['getdata'], $note['getdata']);
- if(get_magic_quotes_gpc()) {
- $note['getdata'] = $this->base->dstripslashes($note['getdata']);
- }
- $note['postdata'] = xml_unserialize($note['postdata']);
- $response = $uc_note->$method($note['getdata'], $note['postdata']);
- }
- unset($uc_note);
- } else {
- $url = $this->get_url_code($note['operation'], $note['getdata'], $appid);
- $note['postdata'] = str_replace(array("\n", "\r"), '', $note['postdata']);
- $response = trim($_ENV['misc']->dfopen2($url, 0, $note['postdata'], '', 1, $app['ip'], UC_NOTE_TIMEOUT, TRUE));
- }
- $returnsucceed = $response != '' && ($response == 1 || is_array(xml_unserialize($response)));
- $closedsqladd = $this->_close_note($note, $this->apps, $returnsucceed, $appid) ? ",closed='1'" : '';//
- if($returnsucceed) {
- if($this->operations[$note['operation']][2]) {
- $this->base->load($this->operations[$note['operation']][2]);
- $func = $this->operations[$note['operation']][3];
- $_ENV[$this->operations[$note['operation']][2]]->$func($appid, $response);
- }
- $this->db->query("UPDATE ".UC_DBTABLEPRE."notelist SET app$appid='1', totalnum=totalnum+1, succeednum=succeednum+1, dateline='{$this->base->time}' $closedsqladd WHERE noteid='$note[noteid]'", 'SILENT');
- $return = TRUE;
- } else {
- $this->db->query("UPDATE ".UC_DBTABLEPRE."notelist SET app$appid = app$appid-'1', totalnum=totalnum+1, dateline='{$this->base->time}' $closedsqladd WHERE noteid='$note[noteid]'", 'SILENT');
- $return = FALSE;
- }
- return $return;
- }
- function _get_note() {
- $app_field = 'app'.UC_APPID;
- $data = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."notelist WHERE closed='0' AND $app_field<'1' AND $app_field>'-".UC_NOTE_REPEAT."' LIMIT 1");
- return $data;
- }
- function _gc() {
- rand(0, UC_NOTE_GC) == 0 && $this->db->query("DELETE FROM ".UC_DBTABLEPRE."notelist WHERE closed='1'");
- }
- function _close_note($note, $apps, $returnsucceed, $appid) {
- $note['app'.$appid] = $returnsucceed ? 1 : $note['app'.$appid] - 1;
- $appcount = count($apps);
- foreach($apps as $key => $app) {
- $appstatus = $note['app'.$app['appid']];
- if(!$app['recvnote'] || $appstatus == 1 || $appstatus <= -UC_NOTE_REPEAT) {
- $appcount--;
- }
- }
- if($appcount < 1) {
- return TRUE;
- //$closedsqladd = ",closed='1'";
- }
- }
- function _get_note_by_id($noteid) {
- $data = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."notelist WHERE noteid='$noteid'");
- return $data;
- }
- function get_url_code($operation, $getdata, $appid) {
- $app = $this->apps[$appid];
- $authkey = UC_KEY;
- $url = $app['url'];
- $apifilename = isset($app['apifilename']) && $app['apifilename'] ? $app['apifilename'] : 'uc.php';
- $action = $this->operations[$operation][1];
- $code = urlencode($this->base->authcode("$action&".($getdata ? "$getdata&" : '')."time=".$this->base->time, 'ENCODE', $authkey));
- return $url."/api/$apifilename?code=$code";
- }
- }
- ?>
|