public function run() { x2base::cleanUpSessions(); // $criteria = new CDbCriteria(array('condition'=>'','distinct'=>true) // $sessions = Session::model()->findAll($criteria); // $str = ""; // foreach($sessions as $session) { // if(time()-$session->lastUpdated<(15*60)) { // $str.=$session->user.", "; // } // } // if($str!="") { // $str=substr($str,0,-2); // } $onlineUsers = User::getUserLinks(Session::getOnlineUsers()); $this->render('onlineUsers', array('users' => $onlineUsers)); //array( }
/** * @return <array of objects> An array of user models where each user has an active session */ public function getOnlineUsers() { $onlineUserUsernames = Session::getOnlineUsers(); $onlineUsers = array_filter($this->users, function ($a) use($onlineUserUsernames) { return in_array($a->username, $onlineUserUsernames); }); return $onlineUsers; }
/** * Obtains lead routing rules. * @param type $data * @return type */ public function getRoutingRules($data) { $admin =& Yii::app()->settings; $online = $admin->onlineOnly; Session::cleanUpSessions(); $sessions = Session::getOnlineUsers(); $criteria = new CDbCriteria(); $criteria->order = "priority ASC"; $rules = X2Model::model('LeadRouting')->findAll($criteria); foreach ($rules as $rule) { $arr = LeadRouting::parseCriteria($rule->criteria); $flagArr = array(); foreach ($arr as $criteria) { if (isset($data[$criteria['field']])) { $val = $data[$criteria['field']]; $operator = $criteria['comparison']; $target = $criteria['value']; if ($operator != 'contains') { switch ($operator) { case '>': $flag = $val >= $target; break; case '<': $flag = $val <= $target; break; case '=': $flag = $val == $target; break; case '!=': $flag = $val != $target; break; default: $flag = false; } } else { $flag = preg_match("/{$target}/i", $val) != 0; } $flagArr[] = $flag; } } if (!in_array(false, $flagArr) && count($flagArr) > 0) { $users = $rule->users; $users = explode(", ", $users); if (is_null($rule->groupType)) { if ($online == 1) { $users = array_intersect($users, $sessions); } } else { $groups = $rule->users; $groups = explode(", ", $groups); $users = array(); foreach ($groups as $group) { if ($rule->groupType == self::WITHIN_GROUPS) { $links = GroupToUser::model()->findAllByAttributes(array('groupId' => $group)); foreach ($links as $link) { $usernames[] = User::model()->findByPk($link->userId)->username; } } else { // $rule->groupType == self::BETWEEN_GROUPS $users[] = $group; } } if ($online == 1 && $rule->groupType == self::WITHIN_GROUPS) { foreach ($usernames as $user) { if (in_array($user, $sessions)) { $users[] = $user; } } } elseif ($rule->groupType == self::WITHIN_GROUPS) { $users = $usernames; } } if ($rule->groupType == self::WITHIN_GROUPS) { $users = array_values(array_intersect(Profile::model()->getUsernamesOfAvailableUsers(), $users)); } $users[] = $rule->rrId; $rule->rrId++; $rule->save(); return $users; } } }
/** * Picks the next assignee in a round-robin manner. * * Users get a chance to be picked in this manner only if online. In the * round-robin distribution of leads, the last person who was picked for * a lead assignment is stored using {@link updateRoundRobin()}. If no * one is online, the lead will be assigned to "Anyone". * @return mixed */ public function roundRobin() { $admin =& Yii::app()->settings; $online = $admin->serviceOnlineOnly; Session::cleanUpSessions(); $usernames = array(); $sessions = Session::getOnlineUsers(); $users = X2Model::model('User')->findAll(); foreach ($users as $userRecord) { //exclude admin from candidates if ($userRecord->username != 'admin' && $userRecord->username != 'api') { $usernames[] = $userRecord->username; } } if ($online == 1) { $userList = array(); foreach ($usernames as $user) { if (in_array($user, $sessions)) { $userList[] = $user; } } } else { $userList = $usernames; } $srrId = $this->getRoundRobin(); if (count($userList) > 0) { $i = $srrId % count($userList); $this->updateRoundRobin(); return $userList[$i]; } else { return "Anyone"; } }
public function getRoutingRules($data) { $admin =& Yii::app()->params->admin; //Admin::model()->findByPk(1); $online = $admin->onlineOnly; x2base::cleanUpSessions(); $sessions = Session::getOnlineUsers(); $rules = CActiveRecord::model('LeadRouting')->findAll("", array('order' => 'priority')); foreach ($rules as $rule) { $arr = LeadRouting::parseCriteria($rule->criteria); $flagArr = array(); foreach ($arr as $criteria) { if (isset($data[$criteria['field']])) { $val = $data[$criteria['field']]; $operator = $criteria['comparison']; $target = $criteria['value']; if ($operator != 'contains') { switch ($operator) { case '>': $flag = $val >= $target; break; case '<': $flag = $val <= $target; break; case '=': $flag = $val == $target; break; case '!=': $flag = $val != $target; break; default: $flag = false; } } else { $flag = preg_match("/{$target}/i", $val) != 0; } $flagArr[] = $flag; } } if (!in_array(false, $flagArr) && count($flagArr) > 0) { $users = $rule->users; $users = explode(", ", $users); if (is_null($rule->groupType)) { if ($online == 1) { $users = array_intersect($users, $sessions); } } else { $groups = $rule->users; $groups = explode(", ", $groups); $users = array(); foreach ($groups as $group) { if ($rule->groupType == 0) { $links = GroupToUser::model()->findAllByAttributes(array('groupId' => $group)); foreach ($links as $link) { if (array_search(User::model()->findByPk($link->userId)->username, $users) === false) { $users[] = User::model()->findByPk($link->userId)->username; } } } else { $users[] = $group; } } if ($online == 1 && $rule->groupType == 0) { $users = array_intersect($users, $sessions); } } $users[] = $rule->rrId; $rule->rrId++; $rule->save(); return $users; } } }