Exemplo n.º 1
0
 /**
  * Returns array of various statistics for each channel.
  *
  * @return array Array of objects (fields: channel, messages, users, last_message)
  */
 public function getChannelsSummary()
 {
     global $wpdb;
     $table = WiseChatInstaller::getMessagesTable();
     $conditions = array();
     $conditions[] = "user != 'System'";
     $sql = "SELECT channel, count(*) AS messages, max(time) AS last_message FROM {$table} " . " WHERE " . implode(" AND ", $conditions) . " GROUP BY channel " . " ORDER BY channel ASC " . " LIMIT 1000;";
     $mainSummary = $wpdb->get_results($sql);
     $usersSummary = $this->channelUsersDAO->getAllChannelsStats();
     $usersSummaryMap = array();
     foreach ($usersSummary as $userDetails) {
         $usersSummaryMap[$userDetails->getChannel()->getName()] = intval($userDetails->getNumberOfUsers());
     }
     $mainSummaryMap = array();
     foreach ($mainSummary as $mainDetails) {
         $mainDetails->users = array_key_exists($mainDetails->channel, $usersSummaryMap) ? $usersSummaryMap[$mainDetails->channel] : 0;
         $mainSummaryMap[$mainDetails->channel] = $mainDetails;
     }
     $channels = $this->channelsDAO->getAll();
     $fullSummary = array();
     foreach ($channels as $channel) {
         if (array_key_exists($channel->getName(), $mainSummaryMap)) {
             $channelPrepared = $mainSummaryMap[$channel->getName()];
             $channelPrepared->secured = strlen($channel->getPassword()) > 0;
             $fullSummary[] = $channelPrepared;
         } else {
             $fullSummary[] = (object) array('channel' => $channel->getName(), 'messages' => 0, 'users' => array_key_exists($channel->getName(), $usersSummaryMap) ? $usersSummaryMap[$channel->getName()] : 0, 'last_message' => null, 'secured' => strlen($channel->getPassword()) > 0);
         }
     }
     return $fullSummary;
 }