Ejemplo n.º 1
0
 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(
 }
Ejemplo n.º 2
0
 /**
  * @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;
 }
Ejemplo n.º 3
0
 /**
  * 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;
         }
     }
 }
Ejemplo n.º 4
0
 /**
  * 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";
     }
 }
Ejemplo n.º 5
0
 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;
         }
     }
 }