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');
 }
Exemple #2
0
 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;
 }
Exemple #3
0
 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);
         }
     }
 }
Exemple #4
0
 /**
  * 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;
 }
Exemple #5
0
 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);
 }
Exemple #6
0
 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);
 }
Exemple #7
0
 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;
 }
Exemple #8
0
 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;
 }
Exemple #9
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');
 }
Exemple #10
0
 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`');
 }
Exemple #12
0
 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());
 }