/** * 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; }