Пример #1
0
 public static function returnExtFormElements()
 {
     $mod_tpl = static::returnTpl();
     $class = __CLASS__;
     ##
     ## EXTFORM SEO
     ##
     ExtForm::add("seo", function ($name = 'seo', $value = '', $params = null) use($mod_tpl, $class) {
         if (!Allow::action('seo', 'edit', true)) {
             return false;
         }
         ## default template
         $tpl = "extform_seo";
         ## custom template
         if (@$params['tpl']) {
             $tpl = $params['tpl'];
             unset($params['tpl']);
         }
         #$value = $element_meta->seo;
         /*
                         ## Don't work with i18n versions
                         if ( $value === false || $value === null ) {
                             $val = Form::text($name);
                             Helper::dd($val);
                             preg_match("~value=['\"]([^'\"]+?)['\"]~is", $val, $matches);
                             Helper::dd($matches);
                             $val = @$matches[1];
                             $array = json_decode($val, true);
                             if ($array)
                                 $value = $array;
                         }
                         #*/
         ## return view with form element
         return View::make($mod_tpl . $tpl, compact('name', 'value', 'params'));
     }, function ($params) use($mod_tpl, $class) {
         #Helper::dd($params);
         $module = isset($params['module']) ? $params['module'] : false;
         $unit_id = isset($params['unit_id']) ? $params['unit_id'] : false;
         $data = isset($params['data']) ? $params['data'] : false;
         $locale = isset($params['locale']) ? $params['locale'] : NULL;
         if (!$module || !$unit_id) {
             return false;
         }
         #Helper::dd($data);
         #$data['module'] = $module;
         #$data['unit_id'] = $unit_id;
         #Helper::dd($data);
         foreach ($data as $d => $dat) {
             if (!is_string($dat)) {
                 continue;
             }
             $data[$d] = trim($dat);
         }
         $seo = Seo::firstOrCreate(array('module' => $module, 'unit_id' => $unit_id, 'language' => $locale));
         $seo->update($data);
         return $seo;
     });
 }
 /**
  * Функция создания бэкапа из текущей версии записи, с возможностью удаления превысивших лимит резервных копий
  *
  * @param int $dicval_id
  * @param bool $delete_over_backups
  * @return bool
  */
 private function create_backup($dicval_id = 0, $delete_over_backups = true)
 {
     /**
      * Находим запись словаря для создания ее бэкапа
      * Запись должна быть оригиналом, т.е. иметь 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;
     /**
      * Создадим резервную копию записи
      */
     $version_array = $element->toArray();
     unset($version_array['versions'], $version_array['id'], $version_array['created_at'], $version_array['updated_at']);
     $version_array['version_of'] = $element->id;
     $new_version = DicVal::create($version_array);
     #Helper::d($version_array);
     #Helper::tad($new_version);
     /**
      * Создадим резервные копии всех доп. полей текущей записи,
      * привязав их к только что созданной резервной копии записи
      */
     $element_allfields = $element->allfields;
     #Helper::tad($element_allfields);
     if (count($element_allfields)) {
         foreach ($element_allfields as $a => $allfield) {
             $allfield = $allfield->toArray();
             #Helper::dd($allfield);
             unset($allfield['id'], $allfield['created_at'], $allfield['updated_at']);
             $allfield['dicval_id'] = $new_version->id;
             $temp = DicFieldVal::firstOrCreate($allfield);
         }
     }
     /**
      * Создадим резервные копии всех META данных текущей записи
      */
     $element_metas = $element->metas;
     #Helper::tad($element_metas);
     if (count($element_metas)) {
         foreach ($element_metas as $e => $element_meta) {
             if (isset($element_meta) && is_object($element_meta) && $element_meta->id) {
                 #Helper::ta($element_meta);
                 $meta_backup = $element_meta->toArray();
                 unset($meta_backup['id'], $meta_backup['created_at'], $meta_backup['updated_at']);
                 $meta_backup['dicval_id'] = $new_version->id;
                 $temp = DicValMeta::firstOrCreate($meta_backup);
             }
         }
     }
     /**
      * Создадим резервные копии SEO данных текущей записи
      */
     $element_seos = $element->seos;
     #Helper::tad($element_seos);
     if (count($element_seos)) {
         foreach ($element_seos as $e => $element_seo) {
             #$seo_data = Seo::where('module', 'DicVal')->where('unit_id', $element->id)->where('language', $locale_sign)->first();
             if (isset($element_seo) && is_object($element_seo) && $element_seo->id) {
                 $seo_backup = $element_seo->toArray();
                 unset($seo_backup['id'], $seo_backup['created_at'], $seo_backup['updated_at']);
                 $seo_backup['unit_id'] = $new_version->id;
                 #Helper::ta($seo_backup);
                 if (class_exists('Seo')) {
                     $temp = Seo::firstOrCreate($seo_backup);
                 }
             }
         }
     }
     /**
      * Если кол-во существующих версий > заданного в конфиге лимита - удалим все старые версии, оставив (LIMIT-1) самых свежих
      * В данный момент count($element_versions) уже реально на 1 больше, т.к. мы только что создали свежую резервную копию!
      */
     #Helper::dd((int)$delete_over_backups);
     if (count($element_versions) >= $versions && $delete_over_backups) {
         $this->delete_backups($element->id);
     }
     return true;
 }
 /**
  * Функция создания бэкапа из текущей версии, с возможностью удаления превысивших лимит резервных копий
  *
  * @param int  $page_id
  * @param bool $delete_over_backups
  *
  * @return bool
  */
 private function create_backup($page_id = 0, $delete_over_backups = TRUE)
 {
     /**
      * Находим запись для создания ее бэкапа
      * Запись должна быть оригиналом, т.е. иметь 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);
     #Helper::tad($element->seos);
     $versions = Config::get('pages.versions');
     $element_versions = $element->versions;
     #Helper::tad($element_versions);
     /**
      * Создадим резервную копию записи
      */
     $version_array = $element->toArray();
     unset($version_array['versions'], $version_array['id'], $version_array['created_at'], $version_array['updated_at']);
     $version_array['version_of'] = $element->id;
     #Helper::tad($version_array);
     $new_version = $this->essence->create($version_array);
     #Helper::d($version_array);
     #Helper::tad($new_version);
     /**
      * Создадим резервные копии всех META данных текущей записи
      */
     $element_metas = $element->metas;
     #Helper::tad($element_metas);
     if (count($element_metas)) {
         foreach ($element_metas as $a => $element_meta) {
             $element_meta = $element_meta->toArray();
             #Helper::dd($element_meta);
             unset($element_meta['id'], $element_meta['created_at'], $element_meta['updated_at']);
             $element_meta['page_id'] = $new_version->id;
             $temp = $this->pages_meta->firstOrCreate($element_meta);
         }
     }
     /**
      * Создадим резервные копии всех блоков (и их META данных) текущей записи
      */
     $element_blocks = $element->blocks;
     #Helper::tad($element_blocks);
     if (count($element_blocks)) {
         foreach ($element_blocks as $e => $element_block) {
             if (isset($element_block) && is_object($element_block) && $element_block->id) {
                 #Helper::ta($element_block);
                 /**
                  * Создаем резервную копию блока
                  */
                 $block_metas = $element_block->metas;
                 $element_block_backup = $element_block->toArray();
                 unset($element_block_backup['id'], $element_block_backup['created_at'], $element_block_backup['updated_at'], $element_block_backup['metas']);
                 $element_block_backup['page_id'] = $new_version->id;
                 $new_block = $this->pages_blocks->firstOrCreate($element_block_backup);
                 if (is_object($new_block) && $new_block->id && isset($block_metas) && count($block_metas)) {
                     /**
                      * Создаем резервную копию всех META данных блока
                      */
                     foreach ($block_metas as $b => $block_meta) {
                         $block_meta_backup = $block_meta->toArray();
                         unset($block_meta_backup['id'], $block_meta_backup['created_at'], $block_meta_backup['updated_at']);
                         $block_meta_backup['block_id'] = $new_block->id;
                         $new_block_meta = $this->pages_blocks_meta->firstOrCreate($block_meta_backup);
                     }
                 }
             }
         }
     }
     /**
      * Создадим резервные копии SEO данных текущей записи
      */
     $element_seos = $element->seos;
     #Helper::tad($element_seos);
     if (count($element_seos)) {
         foreach ($element_seos as $e => $element_seo) {
             if (isset($element_seo) && is_object($element_seo) && $element_seo->id) {
                 $seo_backup = $element_seo->toArray();
                 unset($seo_backup['id'], $seo_backup['created_at'], $seo_backup['updated_at']);
                 $seo_backup['unit_id'] = $new_version->id;
                 if (!$seo_backup['language']) {
                     $seo_backup['language'] = Config::get('app.locale');
                 }
                 #Helper::ta($seo_backup);
                 if (class_exists('Seo')) {
                     $temp = Seo::firstOrCreate($seo_backup);
                 }
             }
         }
     }
     /**
      * Если кол-во существующих версий > заданного в конфиге лимита - удалим все старые версии, оставив (LIMIT-1) самых свежих
      * В данный момент count($element_versions) уже реально на 1 больше, т.к. мы только что создали свежую резервную копию!
      */
     #Helper::dd((int)$delete_over_backups);
     if (count($element_versions) >= $versions && $delete_over_backups) {
         $this->delete_backups($element->id);
     }
     return TRUE;
 }