HEX
Server: Apache/2.4.59 (Debian)
System: Linux skycube.cz 4.19.0-25-amd64 #1 SMP Debian 4.19.289-2 (2023-08-08) x86_64
User: ilya (534)
PHP: 7.3.31-1~deb10u7
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: /var/www/ilya/data/www/irk2.ru/classes/modules/talk/Talk.class.php
<?
/*-------------------------------------------------------
*
*   LiveStreet Engine Social Networking
*   Copyright © 2008 Mzhelskiy Maxim
*
*--------------------------------------------------------
*
*   Official site: www.livestreet.ru
*   Contact e-mail: rus.engine@gmail.com
*
*   GNU General Public License, version 2:
*   http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
---------------------------------------------------------
*/

set_include_path(get_include_path().PATH_SEPARATOR.dirname(__FILE__));
require_once('mapper/Talk.mapper.class.php');

/**
 * Модуль разговоров(почта)
 *
 */
class LsTalk extends Module {		
	protected $oMapper;
		
	/**
	 * Инициализация
	 *
	 */
	public function Init() {		
		$this->oMapper=new Mapper_Talk($this->Database_GetConnect());
	}
	/**
	 * Добавляет новую тему разговора
	 *
	 * @param TopicEntity_Topic $oTalk
	 * @return unknown
	 */
	public function AddTalk(TalkEntity_Talk $oTalk) {
		if ($sId=$this->oMapper->AddTalk($oTalk)) {
			$oTalk->setId($sId);	
			//чистим зависимые кеши
			$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('talk_new',"talk_new_user_{$oTalk->getUserId()}"));		
			return $oTalk;
		}
		return false;
	}
	/**
	 * Обновление разговора
	 *
	 * @param TalkEntity_Talk $oTalk
	 */
	public function UpdateTalk(TalkEntity_Talk $oTalk) {
		return $this->oMapper->UpdateTalk($oTalk);
	}
	/**
	 * Получает тему разговора по айдишнику
	 *
	 * @param unknown_type $sId
	 * @return unknown
	 */
	public function GetTalkById($sId) {
		return $this->oMapper->GetTalkById($sId);
	}
	/**
	 * Получает тему разговора по айдишнику и юзеру
	 *
	 * @param unknown_type $sTalkId
	 * @param unknown_type $sUserId
	 * @return unknown
	 */
	public function GetTalkByIdAndUserId($sTalkId,$sUserId) {
		return $this->oMapper->GetTalkByIdAndUserId($sTalkId,$sUserId);
	}
	/**
	 * Добавляет юзера к разговору(теме)
	 *
	 * @param TalkEntity_TalkUser $oTalkUser
	 * @return unknown
	 */
	public function AddTalkUser(TalkEntity_TalkUser $oTalkUser) {
		return $this->oMapper->AddTalkUser($oTalkUser);
	}
	/**
	 * Удаляет юзера из разговора
	 *
	 * @param TalkEntity_TalkUser $oTalkUser
	 * @return unknown
	 */
	public function DeleteTalkUser(TalkEntity_TalkUser $oTalkUser) {
		return $this->oMapper->DeleteTalkUser($oTalkUser);
	}
	/**
	 * Есть ли юзер в этом разговоре
	 *
	 * @param unknown_type $sTalkId
	 * @param unknown_type $sUserId
	 * @return unknown
	 */
	public function GetTalkUser($sTalkId,$sUserId) {
		return $this->oMapper->GetTalkUser($sTalkId,$sUserId);
	}
	/**
	 * Получить все темы разговора где есть юзер
	 *
	 * @param unknown_type $sUserId
	 * @return unknown
	 */
	public function GetTalksByUserId($sUserId) {
		$aTalks=$this->oMapper->GetTalksByUserId($sUserId);
		foreach ($aTalks as $oTalk) {
			$oTalk->setUsers($this->oMapper->GetTalkUsers($oTalk->getId()));	
		}		
		return $aTalks;
	}
	/**
	 * Устанавливает дату прочтения темы разговора
	 *
	 * @param unknown_type $sTalkId
	 * @param unknown_type $sUserId
	 * @return unknown
	 */
	public function SetTalkUserDateLast($sTalkId,$sUserId) {
		//чистим зависимые кеши
		$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array("talk_read_user_{$sUserId}"));
		return $this->oMapper->SetTalkUserDateLast($sTalkId,$sUserId);
	}
	/**
	 * Добавляет новый коммент к теме разговора
	 *
	 * @param TalkEntity_TalkComment $oComment
	 * @return unknown
	 */
	public function AddComment(TalkEntity_TalkComment $oComment) {
		if ($sId=$this->oMapper->AddComment($oComment)) {
			$oComment->setId($sId);			
			//чистим зависимые кеши
			$this->Cache_Clean(Zend_Cache::CLEANING_MODE_MATCHING_TAG,array('talk_comment_new',"talk_comment_new_talk_{$oComment->getTalkId()}"));
			return $oComment;
		}
		return false;
	}
	/**
	 * Получает число новых тем и комментов где есть юзер
	 *
	 * @param unknown_type $sUserId
	 * @return unknown
	 */
	public function GetCountTalkNew($sUserId) {
		if (false === ($data = $this->Cache_Get("talk_count_all_new_user_{$sUserId}"))) {			
			$data = $this->oMapper->GetCountCommentNew($sUserId)+$this->oMapper->GetCountTalkNew($sUserId);
			$this->Cache_Set($data, "talk_count_all_new_user_{$sUserId}", array("talk_new","talk_comment_new","talk_read_user_{$sUserId}"), 60*5);
		}
		return $data;		
	}
	/**
	 * Получает коммент по его айдишнику
	 *
	 * @param unknown_type $sId
	 * @return unknown
	 */
	public function GetCommentById($sId) {
		return $this->oMapper->GetCommentById($sId);
	}
	/**
	 * Получает список комментов к теме разговора
	 *
	 * @param unknown_type $sId
	 * @return unknown
	 */
	public function GetCommentsByTalkId($sId) {
		$aComments=array();
		$aCommentsRow=$this->oMapper->GetCommentsByTalkId($sId);	
		if (count($aCommentsRow)) {
			$aComments=$this->BuildCommentsRecursive($aCommentsRow);
		}
		return $aComments;
	}
	/**
	 * Построение дерева комментов
	 *
	 * @param unknown_type $aComments
	 * @param unknown_type $bBegin
	 * @return unknown
	 */
	protected function BuildCommentsRecursive($aComments,$bBegin=true) {
		static $aResultCommnets;
		static $iLevel;
		if ($bBegin) {
			$aResultCommnets=array();
			$iLevel=0;
		}		
		foreach ($aComments as $aComment) {
			$aTemp=$aComment;
			$aTemp['level']=$iLevel;
			unset($aTemp['childNodes']);
			$aResultCommnets[]=new TalkEntity_TalkComment($aTemp);			
			if (isset($aComment['childNodes']) and count($aComment['childNodes'])>0) {
				$iLevel++;
				$this->BuildCommentsRecursive($aComment['childNodes'],false);
			}
		}
		$iLevel--;		
		return $aResultCommnets;
	}
	/**
	 * Получает список юзеров в теме разговора
	 *
	 * @param unknown_type $sTalkId
	 * @return unknown
	 */
	public function GetTalkUsers($sTalkId) {
		return $this->oMapper->GetTalkUsers($sTalkId);
	}
}
?>