function widget_names($initial, $data) { $presence = new PresenceController(); return $presence->namebar(); }
function _stats($params) { $nickname = $params['nickname']; $user = $params['user']; $channel = $params['channel']; $statsql = "\r\n\t\t\tselect\r\n\t\t\t\tnp.title as project,\r\n\t\t\t\tccs.csid as csid,\r\n\t\t\t\tccs.case_state_name as status,\r\n\t\t\t\tcount(*) as case_count,\r\n\t\t\t\tp.value as purl\r\n\t\t\tfrom\r\n\t\t\t\tpurl p,\r\n\t\t\t\tog_ancestry oa,\r\n\t\t\t\tnode n,\r\n\t\t\t\tnode_revisions r,\r\n\t\t\t\tusers u,\r\n\t\t\t\tcasetracker_case cc,\r\n\t\t\t\tcasetracker_case cc2,\r\n\t\t\t\tcasetracker_case cc3,\r\n\t\t\t\tcasetracker_case_states ccs,\r\n\t\t\t\tcasetracker_case_states ccs2,\r\n\t\t\t\tcasetracker_case_states ccs3,\r\n\t\t\t\tnode np\r\n\t\t\twhere\r\n\t\t\t\tp.id = oa.group_nid\r\n\t\t\t\tand oa.nid = n.nid\r\n\t\t\t\tand n.vid = r.vid\r\n\t\t\t\tand n.type = 'casetracker_basic_case'\r\n\t\t\t\tand u.uid = n.uid\r\n\t\t\t\tand cc.vid = n.vid\r\n\t\t\t\tand cc.case_status_id = ccs.csid\r\n\t\t\t\tand cc2.vid = n.vid\r\n\t\t\t\tand cc2.case_priority_id = ccs2.csid\r\n\t\t\t\tand cc3.vid = n.vid\r\n\t\t\t\tand cc3.case_type_id = ccs3.csid\r\n\t\t\t\tand ccs.case_state_name <> 'Closed'\r\n\t\t\t\tand ccs.case_state_name <> 'Duplicate'\r\n\t\t\t\tand p.id = np.nid\r\n\t\t"; $uid = false; if ($nickname == '*') { $statsql .= ' group by project, status order by project, status;'; $uid = -1; $sqlparams = array(); } elseif ($nickname != '') { $msg = 'The user "' . htmlspecialchars($params['nickname']) . '" does not exist.'; $target = PresenceController::_userstr($nickname); if ($target) { $msg = 'The user "' . htmlspecialchars($params['nickname']) . '" does not have a PD account associated in the options table.'; $sql = "SELECT value FROM options WHERE grouping = 'identity' AND name = 'pduid' AND user_id = :user_id;"; $uid = DB::get()->val($sql, array('user_id' => $target->id)); } $statsql .= ' and cc.assign_to = :uid group by project, status order by project, status;'; $sqlparams = array('uid' => $uid); } else { $msg = 'You do not have a PD account associated in the options table.'; $uid = Option::get('identity', 'pduid'); $statsql .= ' and cc.assign_to = :uid group by project, status order by project, status;'; $sqlparams = array('uid' => $uid); } if (!$uid || $uid == 0) { Status::create()->data(Utils::cmdout($params) . $msg)->type('system')->cssclass('error')->channel($channel)->insert(); return true; } if (!$this->pdb()) { Status::create()->data('Could not connect to the projects database.')->type('system')->user_to($user->id)->cssclass('error')->channel($channel)->insert(); return true; } $stats = $this->pdb()->results($statsql, $sqlparams); if (count($stats) == 0) { $msg = Utils::cmdout($params); Status::create()->data($msg . 'No open cases found.')->type('system')->cssclass('stats')->channel($channel)->insert(); } else { $msg = Utils::cmdout($params); foreach ($stats as $stat) { $statuses[$stat->csid] = $stat->status; $projects[$stat->purl] = $stat->project; $count[$stat->project][$stat->status] = $stat->case_count; } $msg .= '<table><thead><tr><th>Project Name</th>'; foreach ($statuses as $status) { $msg .= '<th>' . $status . '</th>'; } $msg .= '</tr></thead>'; foreach ($projects as $purl => $project) { $msg .= '<tr><th><a href="http://projects.rockriverstar.com/' . $purl . '/casetracker" target="_blank" onclick="send(\':' . $purl . '\');return false;">' . $project . '</a></th>'; foreach ($statuses as $csid => $status) { if (isset($count[$project][$status])) { $msg .= '<td><a href="http://projects.rockriverstar.com/' . $purl . '/casetracker/filter?keys='; if ($uid > 0) { $msg .= '&assign_to[]=' . $uid; } $msg .= '&pid=All&case_priority_id=All&case_status_id=' . $csid . '" target="_blank">' . $count[$project][$status] . '</a></td>'; } else { $msg .= '<td class="no_cases">—</td>'; } } $msg .= '</tr>'; } $msg .= '</table>'; Status::create()->data($msg)->user_id($user->id)->cssclass('stats')->channel($channel)->insert(); } return true; }
function _call($params) { $user = $params['user']; $mysip = self::get_sip_info($user->id); $user_to = PresenceController::_userstr($params['callee']); if ($user_to) { // They want to call another user, so grab SIP data for target user. $sip = self::get_sip_info($user_to->id); $to = 'sip:' . $sip->ext . '@' . $sip->domain; } elseif (preg_match('/^[-0-9]+$/', $params['callee'])) { // Valid dial string. $to = 'sip:' . $params['callee'] . '@' . $mysip->domain; } else { // Invalid! self::notify($user, 'You can call a chat user or a phone number (only numbers or dashes).'); } if (isset($to)) { // MAKE THE CALL! try { include 'php-sip/PhpSIP.class.php'; $from = "sip:{$mysip->ext}@{$mysip->domain}"; $api = new PhpSIP(); $agent = "sip:{$mysip->user}@{$mysip->domain}"; $api->setUsername($mysip->user); $api->setPassword($mysip->pass); // First get the initiator on the line. self::notify($user, "Calling you first..."); $api->setMethod('INVITE'); $api->setFrom($agent); $api->setUri($from); switch ($api->send()) { case 200: // Initiator answered, so now we ring the other guy. if ($user_to) { self::notify($user_to, ($user->nickname ? $user->nickname : $user->name) . ' is calling you!'); } $api->setMethod('REFER'); $api->addHeader("Refer-to: {$to}"); $api->addHeader("Referred-By: {$agent}"); $api->send(); // Let those guys talk, get out of dodge. $api->setMethod('BYE'); $api->send(); $api->listen('NOTIFY'); $api->reply(481, 'Call Leg/Transaction Does Not Exist'); break; default: self::notify($user, "You didn't answer!"); } } catch (Exception $e) { try { $api->setMethod('CANCEL'); $api->send(); self::notify($user, 'Error placing call!'); } catch (Exception $e) { self::notify($user, 'Error placing call, and another error cleaning up!'); } } } return true; }