Advertisement
NFL

Полный блиать пиздац

NFL
Sep 8th, 2012
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.92 KB | None | 0 0
  1. <?php
  2. /**
  3. * Класс модели мультиязычного модуля страниц сайта.
  4. * @version 1.0 alpha
  5. */
  6. class Application_Model_Pages_Table extends Zend_Db_Table_Abstract {
  7.  
  8.     protected $_primary = 'id';
  9.     protected $_name = 'pages';
  10.  
  11.     /**
  12.      *
  13.      * Функция определяет ID языка
  14.      * @param INT $id - ID языка
  15.      * @param mixed|numeric $lang - алиас языка
  16.      */
  17.     public function get($id, $lang = null) {
  18.         //exit($id);
  19.         $data = $this->select()->from($this->_name);
  20.         if (is_numeric($id))
  21.             $data = $data->where('page_id = ?', $id);
  22.         else
  23.             $data = $data->where('alias = ?', $id);
  24.         if ((!is_null($lang)) && (!is_numeric($lang))) {
  25.             /**
  26.              * Определяем ID выбранного языка по алиасу
  27.              */
  28.             $langModel = new Application_Model_Languages_Table ();
  29.             $langId = $langModel->get($lang);
  30.             if ($langId != false) {
  31.                 $lang = $langId;
  32.                 $data = $data->where('language_id = ?', $lang);
  33.                 $data = $data->query()->fetch();
  34.             } else
  35.                 return Base_Errors::LANG_NO_TRANSLATION;
  36.         } else {
  37.             //exit($data->assemble());
  38.             $data = $data->query()->fetchAll();
  39.         }
  40.  
  41.         return $data;
  42.     }
  43.  
  44.     public function getList($useDefaultLocale = false) {
  45.         if (!$useDefaultLocale) {
  46.             $result = array();
  47.             $data = $this->select()
  48.                             ->from($this->_name, array('page_id', 'language_id'))
  49.                             ->group('page_id')
  50.                             ->query()->fetchAll();
  51.  
  52.             foreach ($data as $k => $v) {
  53.                 $result [$v ['page_id']] = $this->get($v ['page_id'], $v ['language_id']);
  54.             }
  55.             return $result;
  56.         } else {
  57.            
  58.         }
  59.     }
  60.  
  61.     public function getAvailableLocales($pageId) {
  62.         $langModel = new Application_Model_Languages_Table ();
  63.         $locales = $this->select()->from($this->_name, 'language_id')->where('page_id = ?', $pageId)->query()->fetchAll();
  64.         $locInfo = array();
  65.         //$locInfo [] = $locales;
  66.         foreach ($locales as $loc) {
  67.             //$locInfo[] = array($langModel->getInfo($loc['language_id']), 'alias'=>'aaa');
  68.             $info = $langModel->getInfo($loc['language_id']);
  69.             $info['alias'] = $this->_getAlias($pageId, $loc['language_id']);
  70.             $locInfo[] = $info;
  71.         }
  72.         return $locInfo;
  73.     }
  74.  
  75.     public function getPageId() {
  76.         $data = $this->select()->from($this->_name, 'MAX(page_id) AS cur')->limit(1)->query()->fetch();
  77.         return ($data['cur'] + 1);
  78.     }
  79.  
  80.     /**
  81.      *
  82.      * Функция релактирования страницы.
  83.      * Краткий принцип работы: Передается массив данных, в ключах которого обязательны language_id и page_id.
  84.      * Если страница с такими параметрами найдена - происходит обновление информации. Иначе -
  85.      * проверяется наличие страницы с таким идентификатором, если существует - добавляем локализацию. Иначе - ошибка.
  86.      * @param array $data - Массив данных для обновления страницы
  87.      */
  88.     public function addTranslation(array $data) {
  89.         if (empty($data['language_id'])) {
  90.             return Base_Errors::PAGE_NO_LANGUAGE_PROVIDED;
  91.         }
  92.         if (empty($data['page_id'])) {
  93.             return Base_Errors::PAGE_NO_PAGE_PROVIDED;
  94.         }
  95.         //Zend_Debug::dump($data);
  96.         $modelLang = new Application_Model_Languages_Table();
  97.         if (!$this->pageExists($data['page_id'])) {
  98.             return Base_Errors::PAGE_NOT_EXISTS;
  99.         }
  100.         $languageId = $modelLang->get($data['language_id']);
  101.         $pageId = $data['page_id'];
  102.         unset($data['page_id']);
  103.         if ($this->_translationExists($pageId, $languageId)) {
  104.             //$data['updated'] = strtotime("now");
  105.             $this->update($data, 'page_id=' . $pageId . ' AND language_id=' . $languageId);
  106.         } else {
  107.             $data['page_id'] = $pageId;
  108.             $data['language_id'] = $languageId;
  109.             $data['created'] = strtotime("now");
  110.             $this->insert($data);
  111.         }
  112.         return true;
  113.     }
  114.  
  115.     public function pageExists($pageId) {
  116.         $data = $this->select()->from($this->_name)->where('page_id = ?', $pageId)->query()->rowCount();
  117.         return($data != 0);
  118.     }
  119.  
  120.     public function getField($pageId, $field, $language = DEFAULT_LANGUAGE) {
  121.         $model = new Application_Model_Languages_Table();
  122.         $language = $model->get($language);
  123.         $data = $this->select()->from($this->_name, $field)->where('page_id =?', $pageId)->where('language_id = ?', $language)->query()->fetch();
  124.         return $data[$field];
  125.     }
  126.  
  127.     private function _hasDefaultLanguage($pageId) {
  128.         $langModel = new Application_Model_Languages_Table();
  129.         $defaultLang = $langModel->get(DEFAULT_LANGUAGE);
  130.         $data = $this->select()->from($this->_name)->where('page_id = ?', $pageId)->where('language_id = ?', $defaultLang)->query()->rowCount();
  131.         return ($data != 0);
  132.     }
  133.  
  134.     public function getLocales($id) {
  135.         $data = $this->select()->from($this->_name, array('language_id'))->where('page_id = ?', $id)->query()->fetchAll();
  136.         $langTable = new Application_Model_Languages_Table();
  137.         $result = array();
  138.         foreach ($data as $i => $v) {
  139.             $result[] = array('locale' => $langTable->getLocale($v['language_id']), 'id' => $v['language_id']);
  140.         }
  141.         return $result;
  142.     }
  143.  
  144.     /**
  145.      *
  146.      * Функция пытается получить язык по умолчанию.
  147.      * При нахождении совпадения, возвращается язык по умолчанию.
  148.      * Если не находится - функция пытается получить перевод страниц на текущий язык.
  149.      * В случае успеха возвращается текущия язык
  150.      * В противном случае FALSE
  151.      * @param INT $pageId - ID страницы
  152.      * @return array
  153.      */
  154.     public function getDefaultLanguage($pageId) {
  155.  
  156.         $langModel = new Application_Model_Languages_Table();
  157.  
  158.         $currentLang = $langModel->get(Zend_Registry::get('LANGUAGE')); //Текущий используемый язык
  159.         $defaultLang = $langModel->get(DEFAULT_LANGUAGE); //Язык по умолчанию          
  160.  
  161.         /**
  162.          *Проверяем, существует ли версия страницы для текущего языка...
  163.          */
  164.  
  165.         $data = $this->select()->from($this->_name)->where('page_id = ?', $pageId)
  166.                         ->where('language_id = ?', $currentLang)
  167.                         ->limit(1)->query();
  168.         if ($data->rowCount() != 0) {
  169.             return $data->fetch(); //Если доступна - возвращаем..
  170.         } else { //... Иначе - проверка на существовании версии для языка по умолчанию
  171.             $data = $this->select()->from($this->_name)->where('page_id = ?', $pageId)
  172.                             ->where('language_id = ?', $defaultLang)->query();
  173.             if ($data->rowCount() != 0)
  174.                 return $data->fetch();
  175.  
  176.  
  177.             $data = $this->select()->from($this->_name)->where('page_id = ?', $pageId)
  178.                             ->order('language_id DESC')->limit(1)->query()->fetch(); //Иначе выбираем один из доступных языков...
  179.             return $data;
  180.         }
  181.     }
  182.     /**
  183.      *
  184.      * @param INT $pageId - ID страницы
  185.      * @param INT $languageId - ID языка
  186.      * @return BOOL - существует ли заданный перевод для заданной страницы
  187.      */
  188.     private function _translationExists($pageId, $languageId) {
  189.         $data = $this->select()
  190.                         ->from($this->_name)
  191.                         ->where('page_id = ?', $pageId)
  192.                         ->where('language_id = ?', $languageId)
  193.                         ->query()->rowCount();
  194.         return ($data != 0);
  195.     }
  196.     /**
  197.      *
  198.      * @param int $pageId
  199.      * @param int $languageId
  200.      * @return string
  201.      */
  202.     protected function _getAlias($pageId, $languageId) {
  203.         $data = $this->select()->from($this->_name, 'alias')
  204.                 ->where('page_id = ?', $pageId)->where('language_id = ?', $languageId)->query()->fetch();
  205.         return $data['alias'];
  206.     }
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement