/** * Constructor * * @param Zend_Db_Adapter_Abstract $db * @param int $post_id */ public function __construct($db, $post_id = null) { $this->_config['db'] = $db; parent::__construct($this->_config); if ($post_id > 0) { $this->setPostId($post_id); } }
/** * Constructor * * @param Zend_Db_Adapter_Abstract $db * @param int $user_id */ public function __construct($db, $user_id = null) { $this->_config['db'] = $db; parent::__construct($this->_config); if ($user_id > 0) { $this->setUserId($user_id); } }
/** * Get the array of posts satisfying the criteria specified in the parameter $options * * @param Zend_Db_Adapter_Abstract $db * @param array $options * @return array */ public static function GetPosts_Array($db, $options = array()) { $arrPosts = FALSE; $user_ids = array(); //---------------------- // initialize the options $defaults = array('offset' => 0, 'limit' => 0, 'order' => 'p.ts_created', 'sort' => true); foreach ($defaults as $k => $v) { $options[$k] = array_key_exists($k, $options) ? $options[$k] : $v; } $select = self::_GetBaseQuery($db, $options); // set the fields to select $select->from(null, 'p.*'); // set the offset, limit, and ordering of results if ($options['limit'] > 0) { $select->limit($options['limit'], $options['offset']); } // Установим параметры сортировки для таблицы if ($options['sort']) { $select = self::GetSelectForSort($select, $options); } $strSelect = $select->__toString(); //------ Применить кеширование ------- $dbCache = Default_Plugin_SysBox::getCache('db'); if ($dbCache->getOption('caching')) { // Получим TAG для кеширования $arrItems = array($select, $options); $strSerialize = serialize($arrItems); $tagCache = md5($strSerialize); // Очистим кеш if (Default_Plugin_SysBox::isCleanCache()) { $dbCache->clean(Zend_Cache::CLEANING_MODE_ALL); } // Получим данные из кеша по тегу $tagCache $arrPosts = $dbCache->load($tagCache); } // проверка, есть ли уже данные в кэше: if ($arrPosts === FALSE) { // fetch user data from database $data = $db->fetchAll($select); // turn data into array of DatabaseObject_User objects $posts = parent::BuildMultiple_Array($db, __CLASS__, $data); if (count($posts) == 0) { return $posts; } $post_ids = array_keys($posts); // load the profile data for loaded posts $profiles = Default_Model_Profile::BuildMultiple_Array($db, 'Default_Model_DbTable_BlogPostProfile', array($post_ids)); $arrPosts = array(); foreach ($posts as $post_id => $post) { if (array_key_exists($post_id, $profiles)) { $arrPosts[$post_id] = $posts[$post_id] + $profiles[$post_id]; } else { $arrPosts[$post_id] = $posts[$post_id]; } // Получим ids пользователей для всех сообщениий $user_ids[] = $post['user_id']; } // Уберем повторяющиеся значения из массива $user_ids = array_unique($user_ids); // Получим всех пользователей $options = array('user_id' => $user_ids); $users = Default_Model_DbTable_User::GetUsers_Array($db, $options); // Добавим пользователя для каждого сообщения foreach ($posts as $post_id => $post) { $postuser_id = $post['user_id']; foreach ($users as $user) { $user_id = $user['id']; if ($user_id == $postuser_id) { $arrPosts[$post_id]['_user_'] = $user; break; } } } // Загрузим изображения для каждого сообщения $options = array('post_id' => $post_ids); $images = Default_Model_DbTable_BlogPostImage::GetImages_Array($db, $options); foreach ($images as $image) { $post_id = $image['post_id']; $image_id = $image['id']; $arrPosts[$post_id]['_images_'][$image_id] = $image; } // Загрузим координаты для каждого сообщения $locations = Default_Model_DbTable_BlogPostLocation::GetLocations_Array($db, $options); foreach ($locations as $location) { $post_id = $location['post_id']; $location_id = $location['id']; $arrPosts[$post_id]['_locations_'][$location_id] = $location; } // Загрузим метки для каждого сообщения $tags = Default_Model_DbTable_BlogPostTag::GetTags_Array($db, $options); foreach ($tags as $tag) { $post_id = $tag['post_id']; $tag_id = $tag['id']; $arrPosts[$post_id]['_tags_'][$tag_id] = $tag; } // Загрузим audio для каждого сообщения $audios = Default_Model_DbTable_BlogPostAudio::GetAudio_Array($db, $options); foreach ($audios as $audio) { $post_id = $audio['post_id']; $audio_id = $audio['id']; $arrPosts[$post_id]['_audio_'][$audio_id] = $audio; } // Загрузим video для каждого сообщения $videos = Default_Model_DbTable_BlogPostVideo::GetVideo_Array($db, $options); foreach ($videos as $video) { $post_id = $video['post_id']; $video_id = $video['id']; $arrPosts[$post_id]['_video_'][$video_id] = $video; } // Загрузим comments для каждого сообщения $comments = Default_Model_DbTable_BlogPostComment::GetComments_Array($db, $options); foreach ($comments as $comment) { $post_id = $comment['post_id']; $comment_id = $comment['id']; $arrPosts[$post_id]['_comments_'][$comment_id] = $comment; } // Если разрешено кеширование, то сохраним данные в кеше if ($dbCache->getOption('caching')) { $dbCache->save($arrPosts, $tagCache); } } else { $result = $arrPosts; } return $arrPosts; }
/** * Get the array of data satisfying the criteria specified in the parameter $options * * @param Zend_Db_Adapter_Abstract $db * @param array $options * @return array */ public static function GetInfos_Array($db, $options = array()) { $arrInfos = FALSE; //---------------------- // initialize the options $defaults = array('offset' => 0, 'limit' => 0, 'order' => 'i.title_info', 'sort' => true); foreach ($defaults as $k => $v) { $options[$k] = array_key_exists($k, $options) ? $options[$k] : $v; } $select = self::_GetBaseQuery($db, $options); // set the fields to select $select->from(null, 'i.*'); // set the offset, limit, and ordering of results if ($options['limit'] > 0) { $select->limit($options['limit'], $options['offset']); } // Установим параметры сортировки для таблицы if ($options['sort']) { $select = self::GetSelectForSort($select, $options); } $strSelect = $select->__toString(); //------ Применить кеширование ------- $dbCache = Default_Plugin_SysBox::getCache('db'); if ($dbCache->getOption('caching')) { // Получим TAG для кеширования $arrItems = array($select, $options); $strSerialize = serialize($arrItems); $tagCache = md5($strSerialize); // Очистим кеш if (Default_Plugin_SysBox::isCleanCache()) { $dbCache->clean(Zend_Cache::CLEANING_MODE_ALL); // $cache->clean(Zend_Cache::CLEANING_MODE_OLD); // $cache->clean(Zend_Cache::CLEANING_MODE_MATCHING_ANY_TAG, array($tagCache)); } // Получим данные из кеша по тегу $tagCache $arrInfos = $dbCache->load($tagCache); } // проверка, есть ли уже данные в кэше: if ($arrInfos === FALSE) { // fetch user data from database $data = $db->fetchAll($select); // turn data into array of DatabaseObject_User objects $infos = parent::BuildMultiple_Array($db, __CLASS__, $data); if (count($infos) == 0) { return $infos; } $info_ids = array_keys($infos); // load the profile data for loaded posts $profiles = Default_Model_Profile::BuildMultiple_Array($db, 'Default_Model_DbTable_BlogInfoProfile', array($info_ids)); $arrInfos = array(); foreach ($infos as $info_id => $info) { if (array_key_exists($info_id, $profiles)) { $arrInfos[$info_id] = $infos[$info_id] + $profiles[$info_id]; } else { $arrInfos[$info_id] = $infos[$info_id]; } } // Если разрешено кеширование, то сохраним данные в кеше if ($dbCache->getOption('caching')) { $dbCache->save($arrInfos, $tagCache); } } else { $result = $arrInfos; } return $arrInfos; }