/**
  * Функция удаляет резервные копии, превысившие лимит
  *
  * @param int $dicval_id
  * @return bool
  */
 private function delete_backups($dicval_id = 0)
 {
     /**
      * Находим запись словаря для удаления ее бэкапов
      * Запись должна быть оригиналом, т.е. иметь version_of = NULL
      */
     $element = DicVal::where('id', $dicval_id)->with('dic', 'metas', 'allfields', 'seos', 'versions')->first();
     if (!isset($element) || !is_object($element) || $element->version_of != NULL) {
         return false;
     }
     #Helper::tad($element);
     $dic = $element->dic;
     $versions = Config::get('dic/' . $dic->slug . '.versions');
     $element_versions = $element->versions;
     $result = true;
     if (count($element_versions) > 0 && count($element_versions) >= $versions) {
         /**
          * Вычисляем ID записей, подлежащих удалению
          */
         $for_delete = $element_versions->lists('id');
         krsort($for_delete);
         $for_delete = array_slice($for_delete, 0, count($element_versions) - $versions);
         #Helper::dd($for_delete);
         if (count($for_delete)) {
             $result = false;
             /**
              * Открываем транзакцию
              */
             DB::transaction(function () use($element, $for_delete, $result) {
                 /**
                  * Удаляем старые резервные копии и их доп. поля, META и SEO-данные
                  */
                 DicFieldVal::whereIn('dicval_id', $for_delete)->delete();
                 DicValMeta::whereIn('dicval_id', $for_delete)->delete();
                 if (Allow::module('seo')) {
                     Seo::where('module', 'DicVal')->whereIn('unit_id', $for_delete)->delete();
                 }
                 $deleted = DicVal::where('version_of', $element->id)->whereIn('id', $for_delete)->delete();
                 #Helper::d($deleted);
                 #Helper::dd($for_delete);
                 if ($deleted) {
                     $result = true;
                 }
             });
         }
     }
     return $result;
 }
 /**
  * Функция удаляет резервные копии, превысившие лимит
  *
  * @param int $page_id
  *
  * @return bool
  */
 private function delete_backups($page_id = 0)
 {
     /**
      * Находим запись для удаления ее бэкапов
      * Запись должна быть оригиналом, т.е. иметь version_of = NULL
      */
     $element = $this->essence->where('id', $page_id)->with(['metas', 'blocks.metas', 'seos', 'versions'])->first();
     if (!isset($element) || !is_object($element) || $element->version_of != NULL) {
         return FALSE;
     }
     #Helper::tad($element);
     $versions = Config::get('pages.versions');
     $element_versions = $element->versions;
     $result = TRUE;
     if (count($element_versions) > 0 && count($element_versions) >= $versions) {
         /**
          * Вычисляем ID записей, подлежащих удалению
          */
         $for_delete = $element_versions->lists('id');
         krsort($for_delete);
         $for_delete = array_slice($for_delete, 0, count($element_versions) - $versions);
         #Helper::dd($for_delete);
         if (count($for_delete)) {
             $result = FALSE;
             /**
              * Открываем транзакцию
              */
             DB::transaction(function () use($element, $for_delete, $result) {
                 /**
                  * Удаляем старые резервные копии и META данные, блоки (и их META данные) и SEO-данные
                  */
                 $this->pages_meta->whereIn('page_id', $for_delete)->delete();
                 $element_blocks = $this->pages_blocks->whereIn('page_id', $for_delete)->get();
                 if (isset($element_blocks) && count($element_blocks)) {
                     $element_blocks_ids = $element_blocks->lists('id');
                     $element_blocks_metas = $this->pages_blocks_meta->whereIn('block_id', $element_blocks_ids)->delete();
                 }
                 $this->pages_blocks->whereIn('page_id', $for_delete)->delete();
                 if (Allow::module('seo')) {
                     Seo::where('module', 'Page')->whereIn('unit_id', $for_delete)->delete();
                 }
                 $deleted = $this->essence->where('version_of', $element->id)->whereIn('id', $for_delete)->delete();
                 #Helper::d($deleted);
                 #Helper::dd($for_delete);
                 if ($deleted) {
                     $result = TRUE;
                 }
             });
         }
     }
     return $result;
 }
Пример #3
0
 private function getRightPageUrl($parameters = array())
 {
     if (!$parameters) {
         return false;
     }
     $return_mode = 1;
     ## Get page slug...
     if (is_string($parameters)) {
         $return_mode = 1;
         $url = $parameters;
     } elseif (is_array($parameters)) {
         if (isset($parameters['url'])) {
             $return_mode = 2;
             $url = $parameters['url'];
         } else {
             $return_mode = 3;
             ## First param is slug
             foreach ($parameters as $p => $param) {
                 $url = $param;
                 break;
             }
         }
     }
     #Helper::dd("Page->getRightPageUrl() -> url = " . $url);
     $return = $parameters;
     $locales = Config::get('locales');
     $locale = Config::get('locale');
     $default_locale = Config::get('default_locale');
     $page = $this->page->where('publication', 1);
     ## Search slug in SEO URL
     $page_seo = Seo::where('module', 'Page')->where('url', $url)->first();
     #Helper::tad($page_meta_seo);
     ## If page not found by slug in SEO URL...
     if (is_object($page_seo) && is_numeric($page_seo->unit_id)) {
         $page = $this->page->where('id', $page_seo->unit_id)->with(array('meta' => function ($query) use($locales, $default_locale) {
             #if (@is_array($locales) && count($locales) > 1) {
             $query->where('language', $default_locale);
             #}
         }))->with('seo');
         /*
         ->with(array('page' => function($query) use ($locales, $default_locale) {
                 $query->with(array('meta' => function($query) use ($locales, $default_locale) {
                         if (@is_array($locales) && count($locales) > 1) {
                             $query->where('language', $default_locale);
                         }
                         $query->with('seo');
                     }));
             }));
         */
         $page = $page->first();
         #Helper::ta($page);
     } else {
         ## Search slug in PAGE SLUG
         $page = $this->page->where('slug', $url)->with(array('meta' => function ($query) use($locales, $default_locale) {
             #if (@is_array($locales) && count($locales) > 1) {
             #$query->where('language', $default_locale);
             #}
             #$query->with('seo');
         }))->with('seo')->first();
         #Helper::ta($page);
     }
     ## Compare SEO url & gettin' $url
     if (@is_object($page) && @is_object($page->seo) && $page->seo->url != '' && $page->seo->url != $url) {
         $return_url = $page->seo->url;
         switch ($return_mode) {
             case 1:
                 $return = $return_url;
                 break;
             case 2:
                 $return['url'] = $return_url;
                 break;
             case 3:
                 foreach ($return as $r => $ret) {
                     $return[$r] = $return_url;
                     break;
                 }
                 break;
         }
         #$redirect = URL::route('page', array('url' => $page->meta->seo->url));
         #Helper::dd($redirect);
         #return Redirect::to($redirect, 301);
     }
     #Helper::dd($url . ' -> ' . $return);
     return $return;
 }
Пример #4
0
 public function showFullNews($url = false)
 {
     if (!Allow::module($this->module['group'])) {
         App::abort(404);
     }
     if (!@$url) {
         $url = Input::get('url');
     } else {
         $url = (int) $url;
     }
     $news = $this->news->where('publication', 1);
     ## News by ID
     if (is_numeric($url)) {
         $slug = false;
         $news = $news->where('id', $url);
         $news = $news->with('meta.seo', 'meta.photo', 'meta.gallery.photos')->first();
         if (@is_object($news)) {
             if (@is_object($news->meta) && @is_object($news->meta->seo)) {
                 $slug = $news->meta->seo->url;
             } else {
                 $slug = $news->slug;
             }
             #$slug = false;
             #Helper::dd($slug);
             if ($slug) {
                 $redirect = URL::route('news_full', array('url' => $slug));
                 #Helper::dd($redirect);
                 return Redirect::to($redirect, 301);
             }
         }
     } else {
         ## News by SLUG
         ## Search slug in SEO URL
         $news_meta_seo = Seo::where('module', 'news_meta')->where('url', $url)->first();
         #Helper::tad($news_meta_seo);
         if (is_object($news_meta_seo) && is_numeric($news_meta_seo->unit_id)) {
             $news = $this->news_meta->where('id', $news_meta_seo->unit_id)->with(array('news' => function ($query) {
                 $query->with('meta.seo', 'meta.photo', 'meta.gallery.photos');
             }))->first()->news;
             #Helper::tad($news);
         } else {
             ## Search slug in SLUG
             $news = $this->news->where('slug', $url)->with('meta.seo', 'meta.photo', 'meta.gallery.photos')->first();
             ## Check SEO url & gettin' $url
             ## and make 301 redirect if need it
             if (@is_object($news->meta) && @is_object($news->meta->seo) && $news->meta->seo->url != '' && $news->meta->seo->url != $url) {
                 $redirect = URL::route('news_full', array('url' => $news->meta->seo->url));
                 #Helper::dd($redirect);
                 return Redirect::to($redirect, 301);
             }
         }
     }
     #Helper::tad($news->template);
     if (!@is_object($news) || !@is_object($news->meta)) {
         App::abort(404);
     }
     if (!$news->template) {
         $news->template = 'default';
     }
     #Helper::tad($news);
     if (empty($news->template) || !View::exists($this->module['gtpl'] . $news->template)) {
         throw new Exception('Template [' . $this->module['gtpl'] . $news->template . '] not found.');
     }
     return View::make($this->module['gtpl'] . $news->template, compact('news'));
 }