Beispiel #1
0
    Tygh::$app['view']->assign('block_scheme', $block_scheme);
    if (defined('AJAX_REQUEST')) {
        Tygh::$app['view']->display('views/block_manager/update_block.tpl');
        exit;
    }
} elseif ($mode == 'update_grid') {
    if (!empty($_REQUEST['grid_data']['grid_id'])) {
        // Update existing grid
        $grid = Grid::getById($_REQUEST['grid_data']['grid_id'], DESCR_SL);
        Tygh::$app['view']->assign('grid', $grid);
    }
    Tygh::$app['view']->assign('params', $_REQUEST['grid_data']);
} elseif ($mode == 'update_container') {
    if (!empty($_REQUEST['container_id'])) {
        // Update existing container
        $container = Container::getById($_REQUEST['container_id']);
        Tygh::$app['view']->assign('container', $container);
    }
} elseif ($mode == 'update_location') {
    $location_data = array('dispatch' => '');
    if (!empty($_REQUEST['location'])) {
        $location_data = Location::instance()->getById($_REQUEST['location'], DESCR_SL);
    }
    if (isset($_REQUEST['location_data']['dispatch'])) {
        $location_data['dispatch'] = $_REQUEST['location_data']['dispatch'];
        $location_data['object_ids'] = "";
    }
    Tygh::$app['view']->assign('location', $location_data);
    Tygh::$app['view']->assign('dynamic_object_scheme', SchemesManager::getDynamicObject($location_data['dispatch'], 'C'));
    Tygh::$app['view']->assign('dispatch_descriptions', SchemesManager::getDispatchDescriptions());
    if (defined('AJAX_REQUEST')) {
Beispiel #2
0
/**
 * Check if grid belongs to twigmo location
 * @param int $grid_id
 */
function fn_twg_is_twigmo_grid($grid_id)
{
    $grid = Grid::getById($grid_id);
    if (!$grid) {
        return false;
    }
    $container = Container::getById($grid['container_id']);
    return fn_twg_is_twigmo_location($container['location_id']);
}
Beispiel #3
0
 /**
  * Loads location data, containers, grids and blocks
  *
  * @param string $dispatch       URL dispatch (controller.mode.action)
  * @param string $area           Area ('A' for admin or 'C' for custom
  * @param array  $dynamic_object
  * @param int    $location_id
  * @param string $lang_code      2 letters language code
  */
 public function __construct($dispatch, $area, $dynamic_object = array(), $location_id = 0, $lang_code = DESCR_SL)
 {
     Debugger::checkpoint('Start render location');
     // Try to get location for this dispatch
     if ($location_id > 0) {
         $this->_location = Location::instance()->getById($location_id, $lang_code);
     } else {
         $this->_location = Location::instance()->get($dispatch, $dynamic_object, $lang_code);
     }
     $this->_area = $area;
     if (!empty($this->_location)) {
         if (isset($dynamic_object['object_id']) && $dynamic_object['object_id'] > 0) {
             $this->_containers = Container::getListByArea($this->_location['location_id'], 'C');
         } else {
             $this->_containers = Container::getListByArea($this->_location['location_id'], $this->_area);
         }
         $this->_grids = Grid::getList(array('container_ids' => Container::getIds($this->_containers)));
         $blocks = Block::instance()->getList(array('?:bm_snapping.*', '?:bm_blocks.*', '?:bm_blocks_descriptions.*'), Grid::getIds($this->_grids), $dynamic_object, null, null, $lang_code);
         $this->_blocks = $blocks;
         $this->_view = \Tygh::$app['view'];
         $this->_theme = self::_getThemePath($this->_area);
         $this->_dynamic_object_scheme = SchemesManager::getDynamicObject($this->_location['dispatch'], 'C');
     }
 }
Beispiel #4
0
 /**
  * Get blocks for the twigmo homepage
  * @param  string $dispatch        Dispatch of needed location
  * @param  array  $allowed_objects - array of blocks types
  * @return array  blocks
  */
 public static final function getBlocksForLocation($dispatch, $allowed_objects)
 {
     $allowed_page_types = array('T', 'L', 'F');
     $blocks = array();
     $location = Location::instance(fn_twg_get_default_layout_id())->get($dispatch);
     if (!$location) {
         return $blocks;
     }
     $get_cont_params = array('location_id' => $location['location_id']);
     $container = Container::getList($get_cont_params);
     if (!$container or !$container['CONTENT']) {
         return $blocks;
     }
     $grids_params = array('container_ids' => $container['CONTENT']['container_id']);
     $grids = Grid::getList($grids_params);
     if (!$grids) {
         return $blocks;
     }
     $block_grids = Block::instance()->getList(array('?:bm_snapping.*', '?:bm_blocks.*', '?:bm_blocks_descriptions.*'), Grid::getIds($grids));
     $image_params = TwigmoSettings::get('images.catalog');
     foreach ($block_grids as $block_grid) {
         foreach ($block_grid as $block) {
             if ($block['status'] != 'A' or !in_array($block['type'], $allowed_objects)) {
                 continue;
             }
             $block_data = array('block_id' => $block['block_id'], 'title' => $block['name'], 'hide_header' => isset($block['properties']['hide_header']) ? $block['properties']['hide_header'] : 'N', 'user_class' => $block['user_class']);
             $block_scheme = SchemesManager::getBlockScheme($block['type'], array());
             if ($block['type'] == 'html_block') {
                 // Html block
                 if (isset($block['content']['content']) and fn_string_not_empty($block['content']['content'])) {
                     $block_data['html'] = $block['content']['content'];
                 }
             } elseif (!empty($block_scheme['content']) and !empty($block_scheme['content']['items'])) {
                 // Products and categories: get items
                 $template_variable = 'items';
                 $field = $block_scheme['content']['items'];
                 fn_set_hook('render_block_content_pre', $template_variable, $field, $block_scheme, $block);
                 $items = RenderManager::getValue($template_variable, $field, $block_scheme, $block);
                 // Filter pages - only texts, links and forms posible
                 if ($block['type'] == 'pages') {
                     foreach ($items as $item_id => $item) {
                         if (!in_array($item['page_type'], $allowed_page_types)) {
                             unset($items[$item_id]);
                         }
                     }
                 }
                 if (empty($items)) {
                     continue;
                 }
                 $block_data['total_items'] = count($items);
                 // Images
                 if ($block['type'] == 'products' or $block['type'] == 'categories') {
                     $object_type = $block['type'] == 'products' ? 'product' : 'category';
                     foreach ($items as $items_id => $item) {
                         if (!empty($item['main_pair'])) {
                             $main_pair = $item['main_pair'];
                         } else {
                             $main_pair = fn_get_image_pairs($item[$object_type . '_id'], $object_type, 'M', true, true);
                         }
                         if (!empty($main_pair)) {
                             $items[$items_id]['icon'] = TwigmoImage::getApiImageData($main_pair, $object_type, 'icon', $image_params);
                         }
                     }
                 }
                 // Banners properties
                 if ($block['type'] == 'banners') {
                     $rotation = $block['properties']['template'] == 'addons/banners/blocks/carousel.tpl' ? 'Y' : 'N';
                     $block_data['delay'] = $rotation == 'Y' ? $block['properties']['delay'] : 0;
                     $block_data['hide_navigation'] = isset($block['properties']['navigation']) && $block['properties']['navigation'] == 'N' ? 'Y' : 'N';
                 }
                 $block_data[$block['type']] = Api::getAsList($block['type'], $items);
             }
             $blocks[$block['block_id']] = $block_data;
         }
     }
     return $blocks;
 }
Beispiel #5
0
 /**
  * Get blocks by type from given location_id, returns snapping_id and block status
  *
  * @param  string     $block_type  Type of block
  * @param  int        $location_id Location Id
  * @return array|bool Array with snapping_id => block_status
  */
 public function getBlocksByTypeForLocation($block_type, $location_id)
 {
     $blocks = false;
     if (!empty($location_id)) {
         $containers = Container::getListByArea($location_id, 'C');
         $grids = Grid::getList(array('container_ids' => Container::getIds($containers), 'simple' => true));
         $condition = db_quote(' AND ?:bm_blocks.type = ?s', $block_type);
         $condition .= $this->getCompanyCondition('?:bm_blocks.company_id');
         $blocks = db_get_hash_single_array("SELECT ?:bm_snapping.snapping_id, ?:bm_snapping.status " . "FROM ?:bm_snapping " . "LEFT JOIN ?:bm_blocks " . "ON ?:bm_blocks.block_id = ?:bm_snapping.block_id " . "WHERE ?:bm_snapping.grid_id IN (?n) ?p", array('snapping_id', 'status'), Grid::getIds($grids), $condition);
     }
     return $blocks;
 }
Beispiel #6
0
 /**
  * Copies all locations from current layout to another one
  * @param int $new_layout_id target layout ID
  */
 public function copy($new_layout_id)
 {
     $locations = db_get_hash_array("SELECT * FROM ?:bm_locations WHERE layout_id = ?i", 'location_id', $this->_layout_id);
     foreach ($locations as $location_id => $location) {
         unset($location['location_id']);
         $location['layout_id'] = $new_layout_id;
         $new_location_id = db_query("INSERT INTO ?:bm_locations ?e", $location);
         $descriptions = db_get_array("SELECT * FROM ?:bm_locations_descriptions WHERE location_id = ?i", $location_id);
         foreach ($descriptions as $description) {
             $description['location_id'] = $new_location_id;
             db_query("INSERT INTO ?:bm_locations_descriptions ?e", $description);
         }
         Container::copy($location_id, $new_location_id);
     }
 }
} elseif ($mode == 'show_objects') {
    if (!empty($_REQUEST['object_type']) && !empty($_REQUEST['block_id'])) {
        Registry::get('view')->assign('object_type', $_REQUEST['object_type']);
        Registry::get('view')->assign('block_id', $_REQUEST['block_id']);
        Registry::get('view')->assign('object_ids', Block::instance()->getChangedContentsIds($_REQUEST['object_type'], $_REQUEST['block_id']));
        Registry::get('view')->assign('params', array('type' => 'links'));
        Registry::get('view')->assign('dynamic_object_scheme', SchemesManager::getDynamicObjectByType($_REQUEST['object_type']));
    }
} elseif ($mode == 'update_status') {
    $type = empty($_REQUEST['type']) ? 'block' : $_REQUEST['type'];
    if ($type == 'block') {
        Block::instance()->updateStatus($_REQUEST);
    } elseif ($type == 'grid') {
        Grid::update($_REQUEST);
    } elseif ($type == 'container') {
        Container::update($_REQUEST);
    }
    exit;
} elseif ($mode == 'delete_layout') {
    Layout::instance()->delete($_REQUEST['layout_id']);
    return array(CONTROLLER_STATUS_OK, 'block_manager.manage');
} elseif ($mode == 'set_default_layout') {
    if (!empty($_REQUEST['layout_id'])) {
        Layout::instance()->setDefault($_REQUEST['layout_id']);
        fn_set_notification('N', __('notice'), __('text_changes_saved'));
    }
    return array(CONTROLLER_STATUS_OK, 'block_manager.manage');
}
function fn_get_selected_location($params)
{
    if (isset($params['selected_location']) && !empty($params['selected_location'])) {
Beispiel #8
0
 /**
  * Export blocks to XML structure
  *
  * @param  array              $location_ids
  * @param  array              $params
  * @param  string             $lang_code
  * @return ExSimpleXmlElement
  */
 public function export($layout_id, $location_ids = array(), $params = array(), $lang_code = DESCR_SL)
 {
     /* Exclude unnecessary fields*/
     $except_location_fields = array('location_id', 'company_id');
     $except_container_fields = array('container_id', 'location_id', 'dispatch', 'is_default', 'company_id', 'default');
     $except_grid_fields = array('container_id', 'location_id', 'position', 'grid_id', 'parent_id', 'order', 'children');
     $except_layout_fields = array('layout_id', 'theme_name', 'company_id');
     $except_location_fields = array_flip($except_location_fields);
     $except_container_fields = array_flip($except_container_fields);
     $except_grid_fields = array_flip($except_grid_fields);
     $except_layout_fields = array_flip($except_layout_fields);
     $layout_data = Layout::instance($this->_company_id)->get($layout_id);
     $layout_data = array_diff_key($layout_data, $except_layout_fields);
     $xml_root = new ExSimpleXmlElement('<block_scheme></block_scheme>');
     $xml_root->addAttribute('scheme', '1.0');
     $settings = $xml_root->addChild('settings');
     $settings->addChild('default_language', $lang_code);
     $layout_xml = $xml_root->addChild('layout');
     foreach ($layout_data as $field_name => $field_value) {
         $layout_xml->addChild($field_name, $field_value);
     }
     if (empty($location_ids)) {
         $location_ids = Location::instance($this->_layout_id)->getList(array(), $lang_code);
         $location_ids = array_keys($location_ids);
     }
     foreach ($location_ids as $location_id) {
         $location = Location::instance($this->_layout_id)->getById($location_id);
         $containers = Container::getList(array('location_id' => $location_id));
         $xml_location = $xml_root->addChild('location');
         $location = array_diff_key($location, $except_location_fields);
         foreach ($location as $attr => $value) {
             $xml_location->addAttribute($attr, $value);
         }
         $xml_containers = $xml_location->addChild('containers');
         $xml_translations = $xml_location->addChild('translations');
         $translations = Location::instance($this->_layout_id)->getAllDescriptions($location_id);
         foreach ($translations as $translation) {
             if ($translation['lang_code'] == $lang_code) {
                 // We do not needed default language
                 continue;
             }
             $xml_translation = $xml_translations->addChild('translation');
             $xml_translation->addChildCData('meta_keywords', $translation['meta_keywords']);
             $xml_translation->addChildCData('page_title', $translation['title']);
             $xml_translation->addChildCData('meta_description', $translation['meta_description']);
             $xml_translation->addChild('name', $translation['name']);
             $xml_translation->addAttribute('lang_code', $translation['lang_code']);
         }
         unset($xml_translations);
         foreach ($containers as $position => $container) {
             $grids = Grid::getList(array('container_ids' => $container['container_id']));
             $xml_container = $xml_containers->addChild('container');
             foreach ($container as $attr => $value) {
                 $xml_container->addAttribute($attr, $value);
             }
             if (!empty($grids) && isset($grids[$container['container_id']])) {
                 $grids = $grids[$container['container_id']];
                 $grids = fn_build_hierarchic_tree($grids, 'grid_id');
                 $container = array_diff_key($container, $except_container_fields);
                 $this->_buildGridStructure($xml_container, $grids, $except_grid_fields, $lang_code);
             }
         }
     }
     return $xml_root->asXML();
 }