/**
  * Returns array of SQL WHERE conditions based on given criteria.
  *
  * @param WiseChatMessagesCriteria $criteria
  *
  * @return array
  */
 private function getSQLConditionsByCriteria($criteria)
 {
     $conditions = array();
     if ($criteria->getChannelName() !== null) {
         $channelName = addslashes($criteria->getChannelName());
         $conditions[] = "channel = '{$channelName}'";
     }
     if ($criteria->getUserId() !== null) {
         $conditions[] = "chat_user_id = " . intval($criteria->getUserId());
     }
     if ($criteria->getOffsetId() !== null) {
         $conditions[] = "id > " . intval($criteria->getOffsetId());
     }
     if (!$criteria->isIncludeAdminMessages()) {
         $conditions[] = "admin = 0";
     }
     if ($criteria->getMaximumTime() !== null) {
         $conditions[] = "time < " . intval($criteria->getMaximumTime());
     }
     if ($criteria->getMinimumTime() !== null) {
         $conditions[] = "time >= " . intval($criteria->getMinimumTime());
     }
     if ($criteria->getIp() !== null) {
         $ip = addslashes($criteria->getIp());
         $conditions[] = "ip = '{$ip}'";
     }
     if (count($conditions) == 0) {
         $conditions[] = '1 = 1';
     }
     return $conditions;
 }
 /**
  * Refreshes username after setting a new one.
  *
  * @param WiseChatUser $user
  *
  * @return null
  */
 private function refreshNewUserName($user)
 {
     WiseChatContainer::load('dao/criteria/WiseChatMessagesCriteria');
     $this->refreshUserName($user);
     $this->messagesDAO->updateUserNameByCriteria($user->getName(), WiseChatMessagesCriteria::build()->setUserId($user->getId()));
     /** @var WiseChatRenderer $renderer */
     $renderer = WiseChatContainer::get('rendering/WiseChatRenderer');
     $criteria = new WiseChatMessagesCriteria();
     $criteria->setUserId($user->getId());
     $messages = $this->messagesDAO->getAllByCriteria($criteria);
     if (count($messages) > 0) {
         $messagesIds = array();
         $renderedUserName = null;
         foreach ($messages as $message) {
             $messagesIds[] = $message->getId();
             if ($renderedUserName === null) {
                 $renderedUserName = $renderer->getRenderedUserName($message);
             }
         }
         $this->actions->publishAction('replaceUserNameInMessages', array('renderedUserName' => $renderedUserName, 'messagesIds' => $messagesIds));
     }
 }
 /**
  * Deletes old messages according to the plugin's settings.
  * Images connected to the messages (WordPress Media Library attachments) are also deleted.
  *
  * @param WiseChatChannel $channel
  *
  * @throws Exception
  */
 private function deleteOldMessages($channel)
 {
     $minutesThreshold = $this->options->getIntegerOption('auto_clean_after', 0);
     if ($minutesThreshold > 0) {
         $criteria = new WiseChatMessagesCriteria();
         $criteria->setChannelName($channel->getName());
         $criteria->setIncludeAdminMessages(true);
         $criteria->setMaximumTime(time() - $minutesThreshold * 60);
         $messages = $this->messagesDAO->getAllByCriteria($criteria);
         $messagesIds = array();
         foreach ($messages as $message) {
             $messagesIds[] = $message->getId();
         }
         if (count($messagesIds) > 0) {
             $this->attachmentsService->deleteAttachmentsByMessageIds($messagesIds);
             $this->actions->publishAction('deleteMessages', array('ids' => $messagesIds));
             $this->messagesDAO->deleteAllByCriteria($criteria);
         }
     }
 }