function smarty_function_render_block($params, &$smarty)
{
    if (!empty($params['block_id'])) {
        $block_id = $params['block_id'];
        $snapping_id = !empty($params['snapping_id']) ? $params['snapping_id'] : 0;
        if (!empty($params['dispatch'])) {
            $dispatch = $params['dispatch'];
        } else {
            $dispatch = !empty($_REQUEST['dispatch']) ? $_REQUEST['dispatch'] : 'index.index';
        }
        $area = !empty($params['area']) ? $params['area'] : AREA;
        if (!empty($params['dynamic_object'])) {
            $dynamic_object = $params['dynamic_object'];
        } elseif (!empty($_REQUEST['dynamic_object']) && $area != 'C') {
            $dynamic_object = $_REQUEST['dynamic_object'];
        } else {
            $dynamic_object_scheme = SchemesManager::getDynamicObject($dispatch, $area);
            if (!empty($dynamic_object_scheme) && !empty($_REQUEST[$dynamic_object_scheme['key']])) {
                $dynamic_object['object_type'] = $dynamic_object_scheme['object_type'];
                $dynamic_object['object_id'] = $_REQUEST[$dynamic_object_scheme['key']];
            } else {
                $dynamic_object = array();
            }
        }
        $block = Block::instance()->getById($block_id, $snapping_id, $dynamic_object, DESCR_SL);
        return RenderManager::renderBlock($block);
    }
}
示例#2
0
/**
 * Delete poll
 *
 * @param int $page_id ID of the page, poll attached to
 * @return bool true if poll was deleted, false - otherwise
 */
function fn_polls_delete_page(&$page_id)
{
    if (!empty($page_id)) {
        $item_ids = db_get_fields("SELECT item_id FROM ?:poll_items WHERE page_id = ?i", $page_id);
        db_query("DELETE FROM ?:polls_answers WHERE item_id IN (?n)", $item_ids);
        db_query("DELETE FROM ?:poll_items WHERE page_id = ?i", $page_id);
        db_query("DELETE FROM ?:poll_descriptions WHERE page_id = ?i", $page_id);
        db_query("DELETE FROM ?:polls WHERE page_id = ?i", $page_id);
        db_query("DELETE FROM ?:polls_votes WHERE page_id = ?i", $page_id);
        Block::instance()->removeDynamicObjectData('polls', $page_id);
        return true;
    }
    return false;
}
示例#3
0
文件: rss.php 项目: arpad9/bygmarket
function fn_rssf_get_items($params, $lang_code = CART_LANGUAGE)
{
    $items_data = $additional_data = $block_data = array();
    if (!empty($params['bid']) && !empty($params['sid']) && empty($params['category_id'])) {
        $block_data = Block::instance()->getById($params['bid'], $params['sid'], array(), $lang_code);
        if (!empty($block_data['content']['filling']) && $block_data['content']['filling'] == 'products') {
            $_params = array('sort_by' => $block_data['properties']['filling']['products']['rss_sort_by'] == 'U' ? 'updated_timestamp' : 'timestamp', 'sort_order' => 'desc');
            $max_items = !empty($block_data['properties']['max_item']) ? $block_data['properties']['max_item'] : 5;
            list($products) = fn_get_products($_params, $max_items, $lang_code);
            fn_gather_additional_products_data($products, array('get_icon' => true, 'get_detailed' => true, 'get_options' => false, 'get_discounts' => false));
            $additional_data['title'] = !empty($block_data['properties']['feed_title']) ? $block_data['properties']['feed_title'] : __('products') . '::' . __('page_title', '', $lang_code);
            $additional_data['description'] = !empty($block_data['properties']['feed_description']) ? $block_data['properties']['feed_description'] : $additional_data['title'];
            $additional_data['link'] = fn_url('', 'C', 'http', $lang_code);
            $additional_data['language'] = $lang_code;
            $additional_data['lastBuildDate'] = !empty($products[0]['updated_timestamp']) ? $products[0]['updated_timestamp'] : TIME;
            $items_data = fn_format_products_items($products, $block_data['properties']['filling']['products'], $lang_code);
        }
    } else {
        //show rss feed for categories page
        list($items_data, $additional_data) = fn_format_categories_items($params, $lang_code);
    }
    fn_set_hook('generate_rss_feed', $items_data, $additional_data, $block_data, $lang_code);
    return array($items_data, $additional_data);
}
示例#4
0
    $file = fn_basename($_REQUEST['filename']);
    if (Registry::get('runtime.company_id')) {
        $file = Registry::get('runtime.company_id') . '/' . $file;
    }
    if (!empty($_REQUEST['to_screen'])) {
        header("Content-type: text/xml");
        readfile(Registry::get('config.dir.layouts') . $file);
        exit;
    } else {
        fn_get_file(Registry::get('config.dir.layouts') . $file);
    }
} 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'], $_REQUEST));
    }
}
function fn_get_selected_location($params)
{
    if (isset($params['selected_location']) && !empty($params['selected_location'])) {
        $selected_location = Location::instance()->getById($params['selected_location'], DESCR_SL);
    } else {
        $selected_location = Location::instance()->getDefault(DESCR_SL);
    }
    return $selected_location;
}
function fn_get_default_layouts_sources($theme_name = '', $themes_path = '')
{
示例#5
0
/**
 * Updates object data in live content editing mode.
 *
 * @param string $params Params to be updated; array with keys name, value, lang_code, and need_render
 * @return bool
 */
function fn_live_editor_update_object($params)
{
    $updated = false;
    /**
     * Performs actions before updating a live editor object
     *
     * @param array $params  Params to be updated; array with keys name, value, lang_code, and need_render
     * @param bool  $updated The "already updated" flag
     */
    fn_set_hook('live_editor_update_object_pre', $params, $updated);
    if ($updated) {
        return true;
    }
    if (strpos($params['name'], ':')) {
        list($object, $field, $id) = explode(':', $params['name'], 3);
        $schema = fn_get_schema('customization', 'live_editor_objects');
        if (!empty($schema[$object])) {
            $rule = $schema[$object];
            if (!empty($rule['function'])) {
                $vars = $params + compact('object', 'field', 'id', 'rule');
                $args = fn_live_editor_prepare_callback_args($rule['args'], $vars);
                call_user_func_array($rule['function'], $args);
            }
            if (!empty($rule['table'])) {
                $table = $rule['table'];
                $condition = array('id' => db_quote("?p = ?s", $rule['id_field'], $id));
                if (!empty($rule['lang_code'])) {
                    $condition['lang_code'] = db_quote("lang_code = ?s", $params['lang_code']);
                }
                /**
                 * Prepares data for the live editor object update request
                 *
                 * @param array $params    Params
                 * @param array $rule      Rule
                 * @param array $condition Conditions
                 * @param str   $table     Table name
                 */
                fn_set_hook('live_editor_update_object_table', $params, $rule, $condition, $table);
                db_query("UPDATE ?:{$table} SET ?u WHERE ?p", array($rule['value_field'] => $params['value']), implode(' AND ', $condition));
                $updated = true;
            }
            if (!empty($params['need_render'])) {
                // Block
                if ($object == 'block' && $field == 'content') {
                    $block = Block::instance()->getById($id);
                    Tygh::$app['view']->assign('no_wrap', true);
                    $content = RenderManager::renderBlock($block);
                    if ($ajax = Tygh::$app['ajax']) {
                        $ajax->assign('rendered_name', $params['name']);
                        $ajax->assign('rendered_content', $content);
                    }
                }
            }
        }
    }
    /**
     * Performs actions after updating a live editor object
     *
     * @param array $params  Params
     * @param bool  $updated The "already updated" flag
     */
    fn_set_hook('live_editor_update_object_post', $params, $updated);
    return $updated;
}
示例#6
0
    if (!empty($_REQUEST['tab_data'])) {
        $tab_data = $_REQUEST['tab_data'];
    } else {
        $tab_data = array();
    }
    // If edit block
    if ($tab_id > 0 && empty($_REQUEST['tab_data']['content'])) {
        $tab_data = current(ProductTabs::instance()->getList(db_quote(' AND ?:product_tabs.tab_id=?i', $tab_id), 0, DESCR_SL));
    }
    if (isset($tab_data['block_id']) && $tab_data['block_id'] > 0) {
        if (!empty($_REQUEST['dynamic_object'])) {
            $dynamic_object = $_REQUEST['dynamic_object'];
        } else {
            $dynamic_object = array();
        }
        Registry::get('view')->assign('block_data', Block::instance()->getById($tab_data['block_id'], 0, $dynamic_object, DESCR_SL));
    }
    if (empty($tab_data['type'])) {
        $tab_data['type'] = $tab_type;
    }
    Registry::get('view')->assign('tab_data', $tab_data);
} elseif ($mode == 'update_status') {
    $result = false;
    if (!empty($_REQUEST['id']) && !empty($_REQUEST['status'])) {
        $tab = ProductTabs::instance()->getList(db_quote(" AND ?:product_tabs.tab_id=?i", $_REQUEST['id']), 0);
        $tab = current($tab);
        if (!empty($_REQUEST['dynamic_object']['object_id']) && $_REQUEST['dynamic_object']['object_id'] > 0) {
            // If it's status update for dynamic object
            $object_ids = explode(',', $tab['product_ids']);
            $key = array_search($_REQUEST['dynamic_object']['object_id'], $object_ids);
            if ($_REQUEST['status'] == $tab['status'] && isset($object_ids[$key])) {
示例#7
0
/**
 * Deletes banner and all related data
 *
 * @param int $banner_id Banner identificator
 */
function fn_delete_banner_by_id($banner_id)
{
    if (!empty($banner_id) && fn_check_company_id('banners', 'banner_id', $banner_id)) {
        db_query("DELETE FROM ?:banners WHERE banner_id = ?i", $banner_id);
        db_query("DELETE FROM ?:banner_descriptions WHERE banner_id = ?i", $banner_id);
        fn_set_hook('delete_banners', $banner_id);
        Block::instance()->removeDynamicObjectData('banners', $banner_id);
        $banner_images_ids = db_get_fields("SELECT banner_image_id FROM ?:banner_images WHERE banner_id = ?i", $banner_id);
        foreach ($banner_images_ids as $banner_image_id) {
            fn_delete_image_pairs($banner_image_id, 'promo');
        }
        db_query("DELETE FROM ?:banner_images WHERE banner_id = ?i", $banner_id);
    }
}
示例#8
0
 public function delete($id)
 {
     $data = array();
     $status = Response::STATUS_NOT_FOUND;
     if (Block::instance()->remove($id)) {
         $status = Response::STATUS_OK;
         $data['message'] = 'Ok';
     }
     return array('status' => $status, 'data' => $data);
 }
示例#9
0
 public function delete($id)
 {
     $data = array();
     $status = Response::STATUS_NOT_FOUND;
     if (Block::instance()->remove($id)) {
         $status = Response::STATUS_NO_CONTENT;
     }
     return array('status' => $status, 'data' => $data);
 }
示例#10
0
 /**
  * Renders or gets value of some variable of block content
  * @param  string $template_variable name of current block content variable
  * @param  array  $field             Scheme of this content variable from block scheme content section
  * @param  array  $block_scheme      block scheme
  * @param  array  $block             Block data
  * @return string Rendered block content variable value
  */
 public static function getValue($template_variable, $field, $block_scheme, $block)
 {
     $value = '';
     // Init value by default
     if (isset($field['default_value'])) {
         $value = $field['default_value'];
     }
     if (isset($block['content'][$template_variable])) {
         $value = $block['content'][$template_variable];
     }
     if ($field['type'] == 'enum') {
         $value = Block::instance()->getItems($template_variable, $block, $block_scheme);
     }
     if ($field['type'] == 'function' && !empty($field['function'][0]) && is_callable($field['function'][0])) {
         $callable = array_shift($field['function']);
         array_unshift($field['function'], $value, $block, $block_scheme);
         $value = call_user_func_array($callable, $field['function']);
     }
     return $value;
 }
示例#11
0
function fn_se_check_product_filter_block()
{
    return Block::instance()->isBlockTypeActiveOnCurrentLocation('product_filters');
}
示例#12
0
 /**
  * Removes blocks that cannot be on $location or can be only singular for this $location and already exist on it
  * for $location and allready exists on it
  *
  * To define that kind of block use hide_on_locations and single_for_location keys in blocks scheme
  *
  * @param  array  $blocks   List of blocks
  * @param  array $location Array with location data
  * @return array  Filtered list of blocks
  */
 public static function filterByLocation($blocks, $location)
 {
     $scheme = self::_getScheme('blocks');
     foreach ($blocks as $block_key => $block) {
         if (!empty($block['type'])) {
             $type = $block['type'];
             if (!empty($scheme[$type]['hide_on_locations'])) {
                 if (array_search($location['dispatch'], $scheme[$type]['hide_on_locations']) !== false) {
                     unset($blocks[$block_key]);
                     continue;
                 }
             }
             if (!empty($block['type']) && !empty($scheme[$type]['single_for_location'])) {
                 $blocks[$block_key]['single_for_location'] = true;
                 $block_exists = Block::instance()->getBlocksByTypeForLocation($type, $location['location_id']);
                 if (!empty($block_exists)) {
                     unset($blocks[$block_key]);
                 }
             }
         }
     }
     return $blocks;
 }
        exit;
    } else {
        fn_get_file(Registry::get('config.dir.layouts') . $file);
    }
} 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');
示例#14
0
 /**
  * @param ExSimpleXmlElement $parent
  * @param $grids
  * @param array  $except_fields
  * @param string $lang_code
  */
 private function _buildGridStructure(&$parent, $grids, $except_fields = array(), $lang_code = DESCR_SL)
 {
     $except_block_fields = array_flip(array('block_id', 'snapping_id', 'grid_id', 'company_id'));
     foreach ($grids as $grid) {
         $xml_grid = $parent->addChild('grid');
         $blocks = Block::instance($this->_company_id)->getList(array('?:bm_snapping.*', '?:bm_blocks.*'), array($grid['grid_id']));
         if (!empty($blocks)) {
             $blocks = $blocks[$grid['grid_id']];
         }
         $attrs = array_diff_key($grid, $except_fields);
         foreach ($attrs as $attr => $value) {
             $xml_grid->addAttribute($attr, $value);
         }
         if (!empty($grid['children'])) {
             $grid['children'] = fn_sort_array_by_key($grid['children'], 'grid_id');
             $this->_buildGridStructure($xml_grid, $grid['children'], $except_fields, $lang_code);
         }
         if (!empty($blocks)) {
             $xml_blocks = $xml_grid->addChild('blocks');
             foreach ($blocks as $block_id => $block) {
                 $block_descr = Block::instance($this->_company_id)->getFullDescription($block['block_id']);
                 $block = array_merge(Block::instance($this->_company_id)->getById($block['block_id']), $block);
                 $block = array_diff_key($block, $except_block_fields);
                 $xml_block = $xml_blocks->addChild('block');
                 $this->_buildAttrStructure($xml_block, $block);
                 $xml_translations = $xml_block->addChild('translations');
                 foreach ($block_descr as $_lang_code => $data) {
                     if ($_lang_code == $lang_code) {
                         // We do not needed default language
                         continue;
                     }
                     $xml_translation = $xml_translations->addChildCData('translation', $data['name']);
                     $xml_translation->addAttribute('lang_code', $_lang_code);
                     unset($xml_translation);
                 }
                 $contents = Block::instance($this->_company_id)->getAllContents($block_id);
                 $xml_contents = $xml_block->addChild('contents');
                 foreach ($contents as $content) {
                     if (!empty($content['lang_code']) && $content['lang_code'] == $lang_code) {
                         continue;
                     }
                     if (!empty($content['content'])) {
                         $this->_buildAttrStructure($xml_contents, array('item' => array_diff_key($content, $except_block_fields)));
                     }
                 }
             }
         }
     }
 }
示例#15
0
文件: tabs.php 项目: askzap/ultimate
    $tab_id = isset($_REQUEST['tab_data']['tab_id']) ? $_REQUEST['tab_data']['tab_id'] : 0;
    $tab_type = isset($_REQUEST['tab_data']['tab_type']) ? $_REQUEST['tab_data']['tab_type'] : 'T';
    if (!empty($_REQUEST['dynamic_object'])) {
        Tygh::$app['view']->assign('dynamic_object', $_REQUEST['dynamic_object']);
    }
    $dynamic_object_scheme = SchemesManager::getDynamicObjectByType('products');
    $selected_location = Location::instance()->get('products.view', array(), DESCR_SL);
    Tygh::$app['view']->assign('location', $selected_location);
    Tygh::$app['view']->assign('dynamic_object_scheme', $dynamic_object_scheme);
    if (!empty($_REQUEST['tab_data'])) {
        $tab_data = $_REQUEST['tab_data'];
    } else {
        $tab_data = array();
    }
    // If edit block
    if ($tab_id > 0 && empty($_REQUEST['tab_data']['content'])) {
        $tab_data = current(ProductTabs::instance()->getList(db_quote(' AND ?:product_tabs.tab_id=?i', $tab_id), 0, DESCR_SL));
    }
    if (isset($tab_data['block_id']) && $tab_data['block_id'] > 0) {
        if (!empty($_REQUEST['dynamic_object'])) {
            $dynamic_object = $_REQUEST['dynamic_object'];
        } else {
            $dynamic_object = array();
        }
        Tygh::$app['view']->assign('block_data', Block::instance()->getById($tab_data['block_id'], 0, $dynamic_object, DESCR_SL));
    }
    if (empty($tab_data['type'])) {
        $tab_data['type'] = $tab_type;
    }
    Tygh::$app['view']->assign('tab_data', $tab_data);
}
示例#16
0
/**
 *  Delete page and its subpages
 *
 * @param int $page_id Page ID
 * @param bool $recurse Delete page recursively or not
 * @return array Returns ids of deleted pages or false if function can't delete page
 */
function fn_delete_page($page_id, $recurse = true)
{
    $page_id = (int) $page_id;
    if (!empty($page_id) && fn_check_company_id('pages', 'page_id', $page_id)) {
        // Delete all subpages
        if ($recurse == true) {
            $id_path = db_get_field("SELECT id_path FROM ?:pages WHERE page_id = ?i", $page_id);
            $page_ids = db_get_fields("SELECT page_id FROM ?:pages WHERE page_id = ?i OR id_path LIKE ?l", $page_id, "{$id_path}/%");
        } else {
            $page_ids = array($page_id);
        }
        foreach ($page_ids as $v) {
            // Deleting page
            db_query("DELETE FROM ?:pages WHERE page_id = ?i", $v);
            db_query("DELETE FROM ?:page_descriptions WHERE page_id = ?i", $v);
            fn_set_hook('delete_page', $v);
            Block::instance()->removeDynamicObjectData('pages', $v);
        }
        return $page_ids;
        // Returns ids of deleted pages
    } else {
        return false;
    }
}
示例#17
0
<?php

/***************************************************************************
*                                                                          *
*   (c) 2004 Vladimir V. Kalynyak, Alexey V. Vinokurov, Ilya M. Shalnev    *
*                                                                          *
* This  is  commercial  software,  only  users  who have purchased a valid *
* license  and  accept  to the terms of the  License Agreement can install *
* and use this program.                                                    *
*                                                                          *
****************************************************************************
* PLEASE READ THE FULL TEXT  OF THE SOFTWARE  LICENSE   AGREEMENT  IN  THE *
* "copyright.txt" FILE PROVIDED WITH THIS DISTRIBUTION PACKAGE.            *
****************************************************************************/
use Tygh\BlockManager\Block;
return array('langvar' => array('function' => 'fn_update_lang_var', 'args' => array(array(array('name' => '$id', 'value' => '$value')), '$lang_code'), 'input_type' => 'textarea'), 'product' => array('function' => 'fn_update_product', 'args' => array(array('$field' => '$value'), '$id', '$lang_code'), 'input_type' => 'input', 'input_type_fields' => array('product' => 'input', 'full_description' => 'wysiwyg', 'price' => 'price')), 'category' => array('function' => 'fn_update_category', 'args' => array(array('$field' => '$value'), '$id', '$lang_code'), 'input_type' => 'input', 'input_type_fields' => array('description' => 'wysiwyg')), 'page' => array('function' => 'fn_update_page', 'args' => array(array('$field' => '$value'), '$id', '$lang_code'), 'input_type' => 'input', 'input_type_fields' => array('description' => 'wysiwyg')), 'block' => array('function' => function ($field, $value, $id, $lang_code) {
    $block = Block::instance()->getById($id);
    $data = array('block_id' => $id, 'type' => $block['type']);
    $description = array();
    if ($field == 'content') {
        $data['content_data'] = array('lang_code' => $lang_code, 'content' => array('content' => $value));
    } elseif ($field == 'name') {
        $description = array('lang_code' => $lang_code, 'name' => $value);
        $data['description'] = $description;
    } else {
        return;
    }
    Block::instance()->update($data, $description);
}, 'args' => array('$field', '$value', '$id', '$lang_code'), 'input_type' => 'input', 'input_type_fields' => array('content' => 'textarea')));
示例#18
0
function fn_clone_product($product_id)
{
    /**
     * Adds additional actions before product cloning
     *
     * @param int $product_id Original product identifier
     */
    fn_set_hook('clone_product_pre', $product_id);
    // Clone main data
    $data = db_get_row("SELECT * FROM ?:products WHERE product_id = ?i", $product_id);
    unset($data['product_id']);
    $data['status'] = 'D';
    $data['timestamp'] = $data['updated_timestamp'] = time();
    $pid = db_query("INSERT INTO ?:products ?e", $data);
    // Clone descriptions
    $data = db_get_array("SELECT * FROM ?:product_descriptions WHERE product_id = ?i", $product_id);
    foreach ($data as $v) {
        $v['product_id'] = $pid;
        if ($v['lang_code'] == CART_LANGUAGE) {
            $orig_name = $v['product'];
            $new_name = $v['product'] . ' [CLONE]';
        }
        $v['product'] .= ' [CLONE]';
        db_query("INSERT INTO ?:product_descriptions ?e", $v);
    }
    // Clone prices
    $data = db_get_array("SELECT * FROM ?:product_prices WHERE product_id = ?i", $product_id);
    foreach ($data as $v) {
        $v['product_id'] = $pid;
        unset($v['price_id']);
        db_query("INSERT INTO ?:product_prices ?e", $v);
    }
    // Clone categories links
    $data = db_get_array("SELECT * FROM ?:products_categories WHERE product_id = ?i", $product_id);
    $_cids = array();
    foreach ($data as $v) {
        $v['product_id'] = $pid;
        db_query("INSERT INTO ?:products_categories ?e", $v);
        $_cids[] = $v['category_id'];
    }
    fn_update_product_count($_cids);
    // Clone product options
    fn_clone_product_options($product_id, $pid);
    // Clone global linked options
    $gl_options = db_get_fields("SELECT option_id FROM ?:product_global_option_links WHERE product_id = ?i", $product_id);
    if (!empty($gl_options)) {
        foreach ($gl_options as $v) {
            db_query("INSERT INTO ?:product_global_option_links (option_id, product_id) VALUES (?i, ?i)", $v, $pid);
        }
    }
    // Clone product features
    $data = db_get_array("SELECT * FROM ?:product_features_values WHERE product_id = ?i", $product_id);
    foreach ($data as $v) {
        $v['product_id'] = $pid;
        db_query("INSERT INTO ?:product_features_values ?e", $v);
    }
    // Clone blocks
    Block::instance()->cloneDynamicObjectData('products', $product_id, $pid);
    // Clone tabs info
    ProductTabs::instance()->cloneStatuses($pid, $product_id);
    // Clone addons
    fn_set_hook('clone_product', $product_id, $pid);
    // Clone images
    fn_clone_image_pairs($pid, $product_id, 'product');
    // Clone product files
    fn_clone_product_files($product_id, $pid);
    /**
     * Adds additional actions after product cloning
     *
     * @param int    $product_id Original product identifier
     * @param int    $pid        Cloned product identifier
     * @param string $orig_name  Original product name
     * @param string $new_name   Cloned product name
     */
    fn_set_hook('clone_product_post', $product_id, $pid, $orig_name, $new_name);
    return array('product_id' => $pid, 'orig_name' => $orig_name, 'product' => $new_name);
}
示例#19
0
function fn_delete_company($company_id)
{
    if (empty($company_id)) {
        return false;
    }
    if (fn_allowed_for('MULTIVENDOR')) {
        // Do not delete vendor if there're any orders associated with this company
        if (db_get_field("SELECT COUNT(*) FROM ?:orders WHERE company_id = ?i", $company_id)) {
            fn_set_notification('W', __('warning'), __('unable_delete_vendor_orders_exists'), '', 'company_has_orders');
            return false;
        }
    }
    fn_set_hook('delete_company_pre', $company_id);
    $result = db_query("DELETE FROM ?:companies WHERE company_id = ?i", $company_id);
    // deleting categories
    $cat_ids = db_get_fields("SELECT category_id FROM ?:categories WHERE company_id = ?i", $company_id);
    foreach ($cat_ids as $cat_id) {
        fn_delete_category($cat_id, false);
    }
    // deleting products
    $product_ids = db_get_fields("SELECT product_id FROM ?:products WHERE company_id = ?i", $company_id);
    foreach ($product_ids as $product_id) {
        fn_delete_product($product_id);
    }
    // deleting shipping
    $shipping_ids = db_get_fields("SELECT shipping_id FROM ?:shippings WHERE company_id = ?i", $company_id);
    foreach ($shipping_ids as $shipping_id) {
        fn_delete_shipping($shipping_id);
    }
    if (fn_allowed_for('ULTIMATE')) {
        // deleting layouts
        $layouts = Layout::instance($company_id)->getList();
        foreach ($layouts as $layout_id => $layout) {
            Layout::instance($company_id)->delete($layout_id);
        }
    }
    $blocks = Block::instance($company_id)->getAllUnique();
    foreach ($blocks as $block) {
        Block::instance($company_id)->remove($block['block_id']);
    }
    $product_tabs = ProductTabs::instance($company_id)->getList();
    foreach ($product_tabs as $product_tab) {
        ProductTabs::instance($company_id)->delete($product_tab['tab_id'], true);
    }
    $_menus = Menu::getList(db_quote(" AND company_id = ?i", $company_id));
    foreach ($_menus as $menu) {
        Menu::delete($menu['menu_id']);
    }
    db_query("DELETE FROM ?:company_descriptions WHERE company_id = ?i", $company_id);
    // deleting product_options
    $option_ids = db_get_fields("SELECT option_id FROM ?:product_options WHERE company_id = ?i", $company_id);
    foreach ($option_ids as $option_id) {
        fn_delete_product_option($option_id);
    }
    // deleting company admins and users
    if (Registry::get('settings.Stores.share_users') != 'Y') {
        $users_condition = db_quote(' OR company_id = ?i', $company_id);
    } else {
        $users_condition = '';
        // Unassign users from deleted company
        db_query('UPDATE ?:users SET company_id = 0 WHERE company_id = ?i', $company_id);
    }
    $user_ids = db_get_fields("SELECT user_id FROM ?:users WHERE company_id = ?i AND user_type = ?s ?p", $company_id, 'V', $users_condition);
    foreach ($user_ids as $user_id) {
        fn_delete_user($user_id);
    }
    // deleting pages
    $page_ids = db_get_fields("SELECT page_id FROM ?:pages WHERE company_id = ?i", $company_id);
    foreach ($page_ids as $page_id) {
        fn_delete_page($page_id);
    }
    // deleting promotions
    $promotion_ids = db_get_fields("SELECT promotion_id FROM ?:promotions WHERE company_id = ?i", $company_id);
    fn_delete_promotions($promotion_ids);
    // deleting features
    $feature_ids = db_get_fields("SELECT feature_id FROM ?:product_features WHERE company_id = ?i", $company_id);
    foreach ($feature_ids as $feature_id) {
        fn_delete_feature($feature_id);
    }
    // deleting logos
    $types = fn_get_logo_types();
    foreach ($types as $type => $data) {
        fn_delete_logo($type, $company_id);
    }
    $payment_ids = db_get_fields('SELECT payment_id FROM ?:payments WHERE company_id = ?i', $company_id);
    foreach ($payment_ids as $payment_id) {
        fn_delete_payment($payment_id);
    }
    // Delete sitemap sections and links
    $params = array('company_id' => $company_id);
    $section_ids = fn_get_sitemap_sections($params);
    fn_delete_sitemap_sections(array_keys($section_ids));
    fn_set_hook('delete_company', $company_id, $result);
    return $result;
}
示例#20
0
/**
* Deletes news by its ID
*
* @param int $news_id - News Identifier
*/
function fn_delete_news($news_id)
{
    $news_deleted = false;
    if (!empty($news_id)) {
        if (fn_check_company_id('news', 'news_id', $news_id)) {
            // Log news deletion
            fn_log_event('news', 'delete', array('news_id' => $news_id));
            Block::instance()->removeDynamicObjectData('news', $news_id);
            $affected_rows = db_query("DELETE FROM ?:news WHERE news_id = ?i", $news_id);
            db_query("DELETE FROM ?:news_descriptions WHERE news_id = ?i", $news_id);
            if ($affected_rows != 0) {
                $news_deleted = true;
            } else {
                fn_set_notification('E', __('error'), __('object_not_found', array('[object]' => __('news'))), '', '404');
            }
            fn_set_hook('delete_news', $news_id);
        } else {
            fn_company_access_denied_notification();
        }
    }
    return $news_deleted;
}
示例#21
0
    $file = fn_basename($_REQUEST['filename']);
    if (Registry::get('runtime.company_id')) {
        $file = Registry::get('runtime.company_id') . '/' . $file;
    }
    if (!empty($_REQUEST['to_screen'])) {
        header("Content-type: text/xml");
        readfile(Registry::get('config.dir.layouts') . $file);
        exit;
    } else {
        fn_get_file(Registry::get('config.dir.layouts') . $file);
    }
} elseif ($mode == 'show_objects') {
    if (!empty($_REQUEST['object_type']) && !empty($_REQUEST['block_id'])) {
        Tygh::$app['view']->assign('object_type', $_REQUEST['object_type']);
        Tygh::$app['view']->assign('block_id', $_REQUEST['block_id']);
        Tygh::$app['view']->assign('object_ids', Block::instance()->getChangedContentsIds($_REQUEST['object_type'], $_REQUEST['block_id']));
        Tygh::$app['view']->assign('params', array('type' => 'links'));
        Tygh::$app['view']->assign('dynamic_object_scheme', SchemesManager::getDynamicObjectByType($_REQUEST['object_type'], $_REQUEST));
    }
}
function fn_get_selected_location($params)
{
    if (isset($params['selected_location']) && !empty($params['selected_location'])) {
        $selected_location = Location::instance()->getById($params['selected_location'], DESCR_SL);
    } else {
        $selected_location = Location::instance()->getDefault(DESCR_SL);
    }
    return $selected_location;
}
function fn_get_default_layouts_sources($theme_name = '', $themes_path = '')
{
示例#22
0
 /**
  * Get block by id
  * @param  array $params
  * @return array $block
  */
 public static final function getBlock($params)
 {
     if (!empty($params['block_id'])) {
         $block_id = $params['block_id'];
         $snapping_id = !empty($params['snapping_id']) ? $params['snapping_id'] : 0;
         $dispatch = isset($_REQUEST['object']) ? $_REQUEST['object'] . '.view' : 'index.index';
         $area = !empty($params['area']) ? $params['area'] : AREA;
         if (!empty($params['dynamic_object'])) {
             $dynamic_object = $params['dynamic_object'];
         } elseif (!empty($_REQUEST['dynamic_object']) && $area != 'C') {
             $dynamic_object = $_REQUEST['dynamic_object'];
         } else {
             $dynamic_obj_schema = SchemesManager::getDynamicObject($dispatch, $area);
             $twg_request = array('dispatch' => $dispatch, $dynamic_obj_schema['key'] => $_REQUEST['id']);
             if (!empty($dynamic_obj_schema) && !empty($twg_request[$dynamic_obj_schema['key']])) {
                 $dynamic_object['object_type'] = $dynamic_obj_schema['object_type'];
                 $dynamic_object['object_id'] = $twg_request[$dynamic_obj_schema['key']];
             } else {
                 $dynamic_object = array();
             }
         }
         $block = Block::instance()->getById($block_id, $snapping_id, $dynamic_object, DESCR_SL);
         return $block;
     }
 }