protected function up() { $new_fields = array(array('keyword' => 'is_published', 'name_en' => 'Is published?', 'name_ru' => '', 'type' => '5', 'not_null' => '0', 'priority' => '267', 'searchable' => '0', 'default' => '1', 'type_of_edit' => '1', 'checked' => '1', 'form_tab' => '0'), array('keyword' => 'is_branch_published', 'name_en' => 'Is branch published?', 'name_ru' => '', 'type' => '5', 'not_null' => '0', 'priority' => '268', 'searchable' => '0', 'default' => '1', 'type_of_edit' => '3', 'checked' => '1', 'form_tab' => '0')); $content_id = fx::data('component', 'content')->get('id'); foreach ($new_fields as $field_props) { $field_props['component_id'] = $content_id; $field = fx::data('field')->create($field_props); $field->save(); fx::log('add field', $field); } fx::data('component')->dropStoredStaticCache(); fx::db()->query('update {{floxim_main_content}} set is_published = 1, is_branch_published = 1'); fx::cache('meta')->delete('schema'); }
public function contentExists() { static $content_by_type = null; if (is_null($content_by_type)) { $res = fx::db()->getResults('select `type`, count(*) as cnt ' . 'from {{floxim_main_content}} ' . 'where site_id = "' . fx::env('site_id') . '" ' . 'group by `type`'); $content_by_type = fx::collection($res)->getValues('cnt', 'type'); } $com = $this->getComponent(); if (isset($content_by_type[$com['keyword']])) { return true; } foreach ($com->getAllChildren() as $child) { if (isset($content_by_type[$child['keyword']])) { return true; } } return false; }
protected function beforeInsert() { $entities = $this->getMultilangEntities(); fx::log('ess', $entities); foreach ($entities as $e) { $fields = fx::data($e)->getMultiLangFields(); fx::log('fld', $e, $fields); if (count($fields) > 0) { $q = "ALTER TABLE `{{" . $e . "}}` "; $parts = array(); foreach ($fields as $f) { $parts[] = "ADD COLUMN `" . $f . "_" . $this['lang_code'] . "` VARCHAR(255) "; } $q .= join(", ", $parts); fx::log('qr', $q); fx::db()->query($q); } } }
/** * A list of all components */ public function all() { $entity = $this->entity_type; $finder = fx::data($entity); $tree = $finder->getTree(); $field = array('type' => 'list', 'filter' => true); $field['labels'] = array('name' => fx::alang('Name', 'system'), 'keyword' => fx::alang('Keyword'), 'count' => fx::alang('Count', 'system'), 'buttons' => array('type' => 'buttons')); $field['values'] = array(); $field['entity'] = $entity; $append_coms = function ($coll, $level) use(&$field, &$append_coms) { foreach ($coll as $v) { $submenu = Component::getComponentSubmenu($v); $submenu_first = current($submenu); try { $items_count = fx::db()->getCol("SELECT count(*) from {{" . $v->getContentTable() . "}}"); } catch (\Exception $e) { $items_count = 0; } $r = array('id' => $v['id'], 'keyword' => $v['keyword'], 'count' => $items_count, 'name' => array('name' => $v['name'], 'url' => $submenu_first['url'], 'level' => $level)); $r['buttons'] = array(); foreach ($submenu as $submenu_item_key => $submenu_item) { if (!$submenu_item['parent']) { // && $submenu_item_key != 'fields') { $r['buttons'][] = array('type' => 'button', 'label' => $submenu_item['title'], 'url' => $submenu_item['url']); } } $field['values'][] = $r; if (isset($v['children']) && $v['children']) { $append_coms($v['children'], $level + 1); } } }; $append_coms($tree, 0); $fields[] = $field; $this->response->addButtons(array(array('key' => "add", 'title' => fx::alang('Add new ' . $entity, 'system'), 'url' => '#admin.' . $entity . '.add'), "delete")); $result = array('fields' => $fields); $this->response->breadcrumb->addItem(self::entityTypes($entity), '#admin.' . $entity . '.all'); $this->response->submenu->setMenu($entity); return $result; }
protected function deleteContentTable() { try { $contents = fx::data($this['keyword'])->all(); foreach ($contents as $content) { $content->delete(); } } catch (\Exception $e) { fx::log('Delete content error:', $e->getMessage()); } $sql = "DROP TABLE `{{" . $this->getContentTable() . "}}`"; fx::db()->query($sql); }
public function handleMove() { $rel_item_id = null; if (isset($this['__move_before'])) { $rel_item_id = $this['__move_before']; $rel_dir = 'before'; } elseif (isset($this['__move_after'])) { $rel_item_id = $this['__move_after']; $rel_dir = 'after'; } if (!$rel_item_id) { return; } $rel_item = fx::content($rel_item_id); if (!$rel_item) { return; } $rel_priority = fx::db()->getVar(array('select priority from {{floxim_main_content}} where id = %d', $rel_item_id)); //fx::debug($rel_priority, $rel_item_id); if ($rel_priority === false) { return; } // 1 2 3 |4| 5 6 7 (8) 9 10 $old_priority = $this['priority']; $this['priority'] = $rel_dir == 'before' ? $rel_priority : $rel_priority + 1; $q_params = array(); $q = 'update {{floxim_main_content}} ' . 'set priority = priority + 1 ' . 'where '; if ($this['parent_id']) { $q .= 'parent_id = %d and '; $q_params[] = $this['parent_id']; } $q .= 'infoblock_id = %d ' . 'and priority >= %d ' . 'and id != %d'; $q_params[] = $this['infoblock_id']; $q_params[] = $this['priority']; $q_params[] = $this['id']; if ($old_priority !== null) { $q .= ' and priority < %d'; $q_params[] = $old_priority; } array_unshift($q_params, $q); fx::db()->query($q_params); }
protected function setStatement($data) { $res = array(); $chain = fx::component($this->component_id)->getChain(); foreach ($chain as $level_component) { $table_res = array(); $fields = $level_component->fields(); $field_keywords = $fields->getValues('keyword'); // while the underlying field content manually prescription if ($level_component['keyword'] == 'floxim.main.content') { $field_keywords = array_merge($field_keywords, array('priority', 'last_updated', 'type', 'infoblock_id', 'materialized_path', 'level')); } $table_name = $level_component->getContentTable(); $table_cols = $this->getColumns($table_name); foreach ($field_keywords as $field_keyword) { if (!in_array($field_keyword, $table_cols)) { continue; } $field = $fields->findOne('keyword', $field_keyword); // put only if the sql type of the field is not false (e.g. multilink) if ($field && !$field->getSqlType()) { continue; } //if (isset($data[$field_keyword]) ) { if (array_key_exists($field_keyword, $data)) { $field_val = $data[$field_keyword]; $sql_val = is_null($field_val) ? 'NULL' : "'" . fx::db()->escape($field_val) . "'"; $table_res['`' . fx::db()->escape($field_keyword) . '`'] = $sql_val; } } if (count($table_res) > 0) { $res[$table_name] = $table_res; } } return $res; }
public function countLostContent() { if (is_null(self::$lost_content_stats)) { self::$lost_content_stats = array(); $site_id = fx::env('site_id'); if (!$site_id) { return 0; } $lost = fx::db()->getResults('select count(*) as cnt, `type` from {{floxim_main_content}} as c left join {{infoblock}} as ib on c.infoblock_id = ib.id where ib.id IS NULL and c.site_id = ' . $site_id . ' group by c.type'); foreach ($lost as $entry) { self::$lost_content_stats[$entry['type']] = $entry['cnt']; } } $c_type = $this->getComponent()->get('keyword'); return isset(self::$lost_content_stats[$c_type]) ? self::$lost_content_stats[$c_type] : 0; }
public function move($input) { if (!isset($input['visual_id']) || !isset($input['area'])) { return; } $vis = fx::data('infoblock_visual', $input['visual_id']); if (!$vis) { return; } $infoblock = fx::data('infoblock', $input['infoblock_id']); if (!$infoblock) { return; } // move from region to region // need to rearrange the blocks from the old area // until very stupidly, in order if ($vis['area'] != $input['area']) { $source_vis = $this->getAreaVisual($vis['area'], $vis['layout_id'], $infoblock['site_id']); $cpos = 1; foreach ($source_vis as $csv) { if ($csv['id'] == $vis['id']) { continue; } fx::db()->query("UPDATE {{infoblock_visual}}\n SET priority = '" . $cpos . "'\n WHERE id = '" . $csv['id'] . "'"); $cpos++; } } $target_vis = $this->getAreaVisual($input['area'], $vis['layout_id'], $infoblock['site_id']); $next_visual_id = isset($input['next_visual_id']) ? $input['next_visual_id'] : null; $cpos = 1; $new_priority = null; foreach ($target_vis as $ctv) { if ($ctv['id'] == $vis['id']) { continue; } if ($ctv['id'] == $next_visual_id) { $new_priority = $cpos; $cpos++; } if ($ctv['priority'] != $cpos) { fx::db()->query("UPDATE {{infoblock_visual}}\n SET priority = '" . $cpos . "'\n WHERE id = '" . $ctv['id'] . "'"); } $cpos++; } if (!$new_priority) { $new_priority = $cpos; } fx::db()->query("UPDATE {{infoblock_visual}}\n SET priority = '" . $new_priority . "', area = '" . $input['area'] . "'\n WHERE id = '" . $vis['id'] . "'"); return array('status' => 'ok'); }
protected function afterDelete() { if ($this['component_id']) { if (self::getSqlTypeByType($this->data['type'])) { try { fx::db()->query("ALTER TABLE `{{" . $this->getTable() . "}}` DROP COLUMN `" . $this['keyword'] . "`"); } catch (\Exception $e) { fx::log('Drop field exception', $e->getMessage()); } } } parent::afterDelete(); }
protected function down() { fx::db()->query('ALTER TABLE `{{lang}}` DROP `declension`'); fx::db()->query('ALTER TABLE `{{component}}` DROP `declension_ru`'); fx::db()->query('ALTER TABLE `{{component}}` DROP `declension_en`'); }
public function dropOldSessions() { $ttl = (int) fx::config('auth.remember_ttl'); fx::db()->query('delete from {{session}} ' . 'where ' . 'user_id is not null ' . 'and last_activity_time + ' . $ttl . ' < ' . time()); }