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; }