コード例 #1
0
 /**
  * Функция создания бэкапа из текущей версии записи, с возможностью удаления превысивших лимит резервных копий
  *
  * @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;
 }