Beispiel #1
0
 function _retreat($params)
 {
     $user = $params['user'];
     $channel = $params['channel'];
     $inchannels = DB::get()->col('SELECT name FROM channels WHERE user_id = :user_id', array('user_id' => $user->id));
     $join = 'office:' . $user->username;
     $joinalias = $this->_room_alias($join);
     foreach ($inchannels as $partchan) {
         DB::get()->query('DELETE FROM channels WHERE name = :name AND user_id = :user_id;', array('name' => $partchan, 'user_id' => $user->id));
         if (preg_match('%^search:(?P<criteria>.+)$%i', $partchan, $searchmatches)) {
             DB::get()->query("DELETE FROM options WHERE name = :name AND grouping = 'searches' AND user_id = :user_id;", array('name' => $searchmatches['criteria'], 'user_id' => $user->id));
         } else {
             if ($partchan != $join) {
                 Status::create()->data("{$user->username} has retreated to <a href=\"#\" onclick=\"joinRoom('" . addslashes($join) . "');return false;\">{$joinalias}</a> from {$partchan}")->type('part')->channel($partchan)->insert();
             }
         }
     }
     DB::get()->query('INSERT INTO channels (name, user_id, last) VALUES (:name, :user_id, NOW());', array('name' => $join, 'user_id' => $user->id));
     if (!($herald = DB::get()->val("SELECT value FROM options WHERE user_id = :user_id AND name = :name AND grouping = :grouping", array('user_id' => $user->id, 'name' => 'Herald', 'grouping' => 'Identity')))) {
         $herald = '{$nickname} has joined {$room}';
     }
     $js = '';
     $cssclass = '';
     $packed = Plugin::call('herald', array('herald' => $herald, 'js' => $js, 'cssclass' => $cssclass));
     extract($packed);
     $herald = str_replace('{$nickname}', $user->nickname, $herald);
     $herald = str_replace('{$room}', $joinalias, $herald);
     $msg = htmlspecialchars($herald);
     Status::create()->data($msg)->type('join')->cssclass($cssclass)->channel($join)->js($js)->insert();
     Immediate::create()->laststatus()->js('setRoom("' . addslashes($join) . '");');
     return true;
 }
Beispiel #2
0
 function _minibar($params)
 {
     $watch = $params['watch'];
     $user = Auth::user();
     $widgets = DB::get()->results("SELECT * FROM options WHERE grouping = 'widgets' AND user_id = :user_id", array('user_id' => $user->id));
     foreach ($widgets as $widget) {
         $data = unserialize($widget->value);
         if ($data['name'] == 'minibar') {
             $data['rooms'][] = $watch;
             $widget->value = serialize($data);
             $widget->update('options', 'id');
             Immediate::create()->js("reloadWidgets();addSystem({user_id:{$user->id}, data: 'Added \\'" . addslashes($watch) . "\\' to minibar.', cssclass: 'ok', username: '******', nickname: '{$user->nickname}', status: " . microtime(true) . ", js:''}, '#notices');do_scroll();");
             return true;
         }
     }
     $lastwidgetid = DB::get()->val("SELECT MAX(id) FROM options");
     if (!$lastwidgetid) {
         $lastwidgetid = 0;
     }
     $lastwidgetid++;
     $data = array('name' => 'minibar', 'params' => '', 'rooms' => array($watch));
     DB::get()->query("INSERT INTO options (name, grouping, value, user_id) VALUES (:name, 'widgets', :value, :user_id);", array('name' => $lastwidgetid, 'value' => serialize($data), 'user_id' => $user->id));
     Immediate::create()->js("reloadWidgets();addSystem({user_id:{$user->id}, data: 'Added \\'" . addslashes($watch) . "\\' as minibar widget.', cssclass: 'ok', username: '******', nickname: '{$user->nickname}', status: " . microtime(true) . ", js:''}, '#notices');do_scroll();");
     return true;
 }
Beispiel #3
0
 function _externals($params)
 {
     $p2 = $params;
     $p2['user'] = $p2['user']->std();
     $p2['chaturl'] = 'http://' . $_SERVER['HTTP_HOST'] . '/';
     $body = json_encode($p2);
     $user = $params['user'];
     //Immediate::debug(htmlspecialchars(print_r($params,1)));return false;
     $externals = DB::get()->col("SELECT value FROM options WHERE grouping = 'external'");
     foreach ($externals as $url) {
         $ch = curl_init();
         curl_setopt($ch, CURLOPT_URL, $url);
         // The URL.
         curl_setopt($ch, CURLOPT_MAXREDIRS, 5);
         // Maximum number of redirections to follow.
         curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
         // Follow 302's and the like.
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
         // Return the data from the stream.
         curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
         curl_setopt($ch, CURLOPT_TIMEOUT, 1);
         curl_setopt($ch, CURLOPT_POST, true);
         // POST mode.
         curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('p' => $body)));
         //			Immediate::create()
         //				->js("addSystem({user_id:{$user->id}, data: '" . addslashes($body) . "', cssclass: 'error', username: '******', nickname: '{$user->nickname}', status: " . microtime(true) . ", js:''}, '#notices');do_scroll();");
         $response = curl_exec($ch);
         if (curl_errno($ch) !== 0) {
             Immediate::create()->js("addSystem({user_id:{$user->id}, data: 'External \\'" . addslashes($url) . "\\' failed, with a curl error, " . curl_errno($ch) . ".', cssclass: 'error', username: '******', nickname: '{$user->nickname}', status: " . microtime(true) . ", js:''}, '#notices');do_scroll();");
         } elseif (curl_getinfo($ch, CURLINFO_HTTP_CODE) !== 200) {
             //die('Not 200 response code');
             Immediate::create()->js("addSystem({user_id:{$user->id}, data: 'External \\'" . addslashes($url) . "\\' failed, with HTTP error code " . curl_getinfo($ch, CURLINFO_HTTP_CODE) . ".', cssclass: 'error', username: '******', nickname: '{$user->nickname}', status: " . microtime(true) . ", js:''}, '#notices');do_scroll();");
         } else {
             Immediate::debug(htmlspecialchars($response));
             //return false;
             try {
                 $xml = new SimpleXMLElement($response);
                 foreach ($xml->result as $result) {
                     $status = Status::create();
                     foreach ($result->attributes() as $k => $v) {
                         switch ($k) {
                             case 'append':
                                 break;
                             case 'user':
                                 $remote_user = DB::get()->val("SELECT id FROM users WHERE username = ?", array($v));
                                 if (!$remote_user) {
                                     $remote_user = min(-1, DB::get()->val("SELECT min(id) FROM users") - 1);
                                     DB::get()->query("INSERT INTO users (id, username) VALUES (?, ?)", array($remote_user, $v));
                                     DB::get()->query("UPDATE users SET id = ? WHERE username = ?", array($remote_user, $v));
                                 }
                                 $status->user_id = $remote_user;
                                 break;
                             default:
                                 $status->{$k} = $v;
                                 break;
                         }
                     }
                     $status->data((string) $result);
                     if (isset($result['append']) && $result['append'] == 'pre') {
                         $status->insert();
                     } else {
                         $this->statuses[] = $status;
                     }
                     if ($xml['silent'] == 'true') {
                         return true;
                     }
                 }
             } catch (Exception $e) {
                 Immediate::debug('RESPONSE: ' . htmlspecialchars($response));
             }
         }
         curl_close($ch);
         return false;
     }
 }
Beispiel #4
0
 function _closedrawer($params)
 {
     $user = $params['user'];
     $channel = $params['channel'];
     $drawerid = $params['drawerid'];
     DB::get()->query("DELETE FROM drawers WHERE id = :drawerid AND user_id = :user_id;", array('drawerid' => $drawerid, 'user_id' => $user->id));
     Immediate::create()->js("refreshDrawers();commandstatus(false);");
     return true;
 }
Beispiel #5
0
 function _timecard_action($params)
 {
     $user = $params['user'];
     list($action, ) = explode(' ', $params['action']);
     $drawervisible = DB::get()->val("SELECT id FROM drawers WHERE indexed = 'timecard' AND user_id = :user_id", array('user_id' => $user->id));
     if (!$drawervisible) {
         DB::get()->query("INSERT INTO drawers (user_id, message, indexed, cssclass) VALUES (:user_id, :msg, 'timecard', 'timecard');", array('user_id' => $user->id, 'msg' => '<div>Processing...</div>'));
     }
     switch ($action) {
         case 'process':
             Immediate::create()->js('refreshDrawers(function(){$(\'#timecard_save,#timecard_process\').remove();$(\'#timecard_data\').load(\'/ajax/process_timecard\');return false;});');
             break;
         case 'save':
             Immediate::create()->js('refreshDrawers(function(){$(\'#timecard_save,#timecard_process\').remove();$(\'#timecard_data\').load(\'/ajax/save_timecard\',{timecard:$(\'#timecard_data textarea\').val()});return false;});');
             break;
         case 'alias':
             list($action, $from, $to) = explode(' ', $params['action']);
             if ($from == '' || $to == '') {
                 Immediate::error('The syntax of this command is: @?alias {project code alias} {project code}');
             } else {
                 DB::get()->query("DELETE FROM options WHERE user_id = :user_id and grouping = 'time alias' and name = :name", array('user_id' => $user->id, 'name' => $from));
                 DB::get()->query("INSERT INTO options (user_id, grouping, name, value) VALUES (:user_id, 'time alias', :name, :value)", array('user_id' => $user->id, 'name' => $from, 'value' => $to));
                 Immediate::ok('Set alias "' . htmlspecialchars($from) . '" to point to "' . htmlspecialchars($to) . '".');
             }
     }
     return true;
 }
Beispiel #6
0
 public static function error($msg)
 {
     Immediate::create()->js("addSystem({user_id:0, data: '" . str_replace("\n", '\\n', addslashes($msg)) . "', cssclass: 'error', username: '', nickname: '', status: " . microtime(true) . ", js:''}, '#notices');do_scroll();");
 }
Beispiel #7
0
 function _karma($params)
 {
     $user = $params['user'];
     $channel = $params['channel'];
     $matches = $params['matches'];
     $word = trim(strtolower($matches['word']), '"');
     $md5w = md5($word);
     $points = DB::get()->row('select sum(karma) as s, sum(abs(karma)) as b, sum(karma / abs(karma)) as v, std(karma) as d, var_pop(karma) as v from karma where word = ?', array($word));
     $lastvote = DB::get()->row('SELECT time_to_sec(timediff(now(),lastvote)) as t, karma FROM karma WHERE word = ? and user_id = ?', array($word, $user->id));
     if ($lastvote && $lastvote->t < 30) {
         Immediate::create()->laststatus()->js("\$('#mainscroller .karma_{$md5w} .inner.active .voters').html('You are voting too fast!  Wait " . (30 - $lastvote->t) . " seconds.').effect('highlight', {}, 1500);");
         return true;
     }
     if ($lastvote && abs($lastvote->karma) > $points->b - abs($lastvote->karma) && $points->v > 2) {
         Immediate::create()->laststatus()->js("\$('#mainscroller .karma_{$md5w} .inner.active .voters').html('You have voted more than everyone else <em>combined</em>.  You win!').effect('highlight', {}, 1500);");
         return true;
     }
     $kpoints = $points->s;
     if (DB::get()->val('SELECT count(word) FROM karma WHERE word = ? and user_id = ?', array($word, $user->id)) == 0) {
         switch ($matches['karma']) {
             case '++':
                 $kpoints++;
                 $bmsg = 'Added one karma point to "' . htmlspecialchars($matches['word']) . '", totaling ' . $kpoints . ' points.';
                 DB::get()->query('INSERT INTO karma (word, karma, user_id, direction) VALUES (?, ?, ?, 1)', array($word, 1, $user->id));
                 break;
             case '--':
                 $kpoints--;
                 $bmsg = 'Subtracted one karma point from "' . htmlspecialchars($matches['word']) . '", totaling ' . $kpoints . ' points.';
                 DB::get()->query('INSERT INTO karma (word, karma, user_id, direction) VALUES (?, ?, ?, -1)', array($word, -1, $user->id));
                 break;
             case '~~':
                 $kpoints--;
                 $bmsg = 'You didn\'t vote on "' . htmlspecialchars($matches['word']) . '" to begin with.  The total is still ' . $kpoints . ' points.';
                 DB::get()->query('INSERT INTO karma (word, karma, user_id, direction) VALUES (?, ?, ?, 0)', array($word, -1, $user->id));
                 break;
             case '??':
                 $bmsg = '"' . htmlspecialchars($matches['word']) . '" has ' . $kpoints . ' karma points -- you have not voted.';
                 if ($points->b == 0) {
                     return false;
                 }
                 break;
         }
     } else {
         $oldkarma = DB::get()->val('SELECT karma FROM karma WHERE word = ? and user_id = ?', array($word, $user->id));
         switch ($matches['karma']) {
             case '++':
                 $kpoints++;
                 $bmsg = 'Added one karma point to "' . htmlspecialchars($matches['word']) . '", totaling ' . $kpoints . ' points.';
                 DB::get()->query('UPDATE karma SET karma = karma + 1, lastvote = now(), direction = 1  WHERE word = ? and user_id = ?', array($word, $user->id));
                 break;
             case '--':
                 $kpoints--;
                 $bmsg = 'Subtracted one karma point from "' . htmlspecialchars($matches['word']) . '", totaling ' . $kpoints . ' points.';
                 DB::get()->query('UPDATE karma SET karma = karma - 1, lastvote = now(), direction = -1 WHERE word = ? and user_id = ?', array($word, $user->id));
                 break;
             case '~~':
                 $kpoints -= $oldkarma;
                 $bmsg = 'Removing your vote on "' . htmlspecialchars($matches['word']) . '", now totaling ' . $kpoints . ' points.';
                 DB::get()->query('DELETE FROM karma WHERE word = ? and user_id = ?', array($word, $user->id));
                 break;
             case '??':
                 $bmsg = '"' . htmlspecialchars($matches['word']) . '" has ' . $kpoints . ' karma points -- you have already voted (' . $oldkarma . ').';
                 break;
         }
     }
     $points = DB::get()->row('select sum(karma) as s, sum(karma / abs(karma)) as v, std(karma) as d, var_pop(karma) as v from karma where word = ?', array($word));
     $hword = htmlspecialchars($word);
     $bmsg = '<div class="word">' . $hword . '</div><button class="voteup" onclick="send(\'' . addslashes($hword) . '++\');">++</button><button class="votedown" onclick="send(\'' . addslashes($hword) . '--\');">--</button>';
     $bmsg = '<div class="inner">loading</div>';
     Status::create()->data($bmsg)->channel($channel)->type('notice')->cssclass('karma karma_' . md5($word))->js('apply_karma("' . $md5w . '", "' . $hword . '");')->insert();
     return true;
 }