Esempio n. 1
0
function fn_seo_settings_update($type, $option, $new_value, $redirect_only)
{
    $old_value = Registry::get('addons.seo.' . $option);
    fn_iterate_through_seo_names(function ($seo_name) use($option, $old_value, $new_value, $redirect_only) {
        // We shouldn't consider null value
        if (false === fn_check_seo_object_exists($seo_name['object_id'], $seo_name['type'], $seo_name['company_id'])) {
            fn_delete_seo_name($seo_name['object_id'], $seo_name['type'], '', $seo_name['company_id']);
            return;
        }
        Registry::set('addons.seo.' . $option, $old_value);
        $url = fn_generate_seo_url_from_schema(array('type' => $seo_name['type'], 'object_id' => $seo_name['object_id'], 'lang_code' => $seo_name['lang_code']), false);
        fn_seo_update_redirect(array('src' => $url, 'type' => $seo_name['type'], 'object_id' => $seo_name['object_id'], 'company_id' => $seo_name['company_id'], 'lang_code' => $seo_name['lang_code']), 0, false);
        if (!$redirect_only) {
            Registry::set('addons.seo.' . $option, $new_value);
            fn_create_seo_name($seo_name['object_id'], $seo_name['type'], $seo_name['name'], 0, '', $seo_name['company_id'], $seo_name['lang_code'], true);
        }
    }, db_quote("type = ?s ?p", $type, fn_get_seo_company_condition('?:seo_names.company_id', $type)));
}
function fn_seo_settings_update($type, $option, $new_value, $redirect_only)
{
    $i = 0;
    $items_per_pass = 100;
    $old_value = Registry::get('addons.seo.' . $option);
    $company_condition = fn_get_seo_company_condition('?:seo_names.company_id', $type);
    while ($update_data = db_get_array("SELECT * FROM ?:seo_names WHERE type = ?s ?p LIMIT {$i}, {$items_per_pass}", $type, $company_condition)) {
        foreach ($update_data as $data) {
            Registry::set('addons.seo.' . $option, $old_value);
            $url = fn_generate_seo_url_from_schema(array('type' => $data['type'], 'object_id' => $data['object_id'], 'lang_code' => $data['lang_code']), false);
            fn_seo_update_redirect(array('src' => $url, 'type' => $data['type'], 'object_id' => $data['object_id'], 'company_id' => $data['company_id'], 'lang_code' => $data['lang_code']), 0, false);
            if (!$redirect_only) {
                Registry::set('addons.seo.' . $option, $new_value);
                fn_create_seo_name($data['object_id'], $data['type'], $data['name'], 0, '', $data['company_id'], $data['lang_code'], true);
            }
        }
        $i += $items_per_pass;
    }
}
Esempio n. 3
0
/**
 * Updates SEO name for object
 * @param array $object_data object data
 * @param array $object_id object ID
 * @param string $type object type
 * @param string $lang_code language code
 * @return mixed, updated SEO name on success, false on failure
 */
function fn_seo_update_object($object_data, $object_id, $type, $lang_code)
{
    fn_set_hook('seo_update_objects_pre', $object_data, $object_id, $type, $lang_code, $seo_objects);
    if (!empty($object_id) && isset($object_data['seo_name'])) {
        $_object_name = '';
        $seo_vars = fn_get_seo_vars($type);
        if (!empty($object_data['seo_name'])) {
            $_object_name = $object_data['seo_name'];
        } elseif (!empty($object_data[$seo_vars['description']])) {
            $_object_name = $object_data[$seo_vars['description']];
        }
        if (empty($_object_name)) {
            $_object_name = fn_seo_get_default_object_name($object_id, $type, $lang_code);
        }
        $_company_id = '';
        if (fn_allowed_for('ULTIMATE')) {
            if (!empty($seo_vars['not_shared']) && Registry::get('runtime.company_id')) {
                $_company_id = Registry::get('runtime.company_id');
            } elseif (!empty($object_data['company_id'])) {
                $_company_id = $object_data['company_id'];
            }
        }
        $lang_code = fn_get_corrected_seo_lang_code($lang_code);
        // always create redirect, execept it manually disabled
        $create_redirect = isset($object_data['seo_create_redirect']) ? !empty($object_data['seo_create_redirect']) : true;
        $is_tree_object = fn_check_seo_schema_option($seo_vars, 'tree_options');
        // If this is tree object and we need to create redirect - create it for all children
        if ($create_redirect && $is_tree_object) {
            $i = 0;
            $items_per_pass = 100;
            $children = fn_seo_get_object_children($type);
            if (!empty($children)) {
                $path = fn_get_seo_parent_path($object_id, $type);
                $path .= !empty($path) ? '/' . $object_id : $object_id;
                while ($data = db_get_array("SELECT object_id, type FROM ?:seo_names WHERE path = ?s OR path LIKE ?l AND type IN (?a) LIMIT ?i, ?i", $path, $path . '/%', $children, $i, $items_per_pass)) {
                    $i += $items_per_pass;
                    foreach ($data as $obj) {
                        $url = fn_generate_seo_url_from_schema(array('type' => $obj['type'], 'object_id' => $obj['object_id'], 'lang_code' => $lang_code), false);
                        fn_seo_update_redirect(array('src' => $url, 'type' => $obj['type'], 'object_id' => $obj['object_id'], 'company_id' => $_company_id, 'lang_code' => $lang_code), 0, false);
                    }
                }
            }
        }
        fn_create_seo_name($object_id, $type, $_object_name, 0, '', $_company_id, $lang_code, $create_redirect);
        return true;
    }
    return false;
}
****************************************************************************/
use Tygh\Registry;
use Tygh\Navigation\LastView;
if (!defined('BOOTSTRAP')) {
    die('Access denied');
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if ($mode == 'update') {
        if (!empty($_REQUEST['redirect_data'])) {
            fn_seo_update_redirect($_REQUEST['redirect_data'], 0);
        }
    }
    if ($mode == 'm_update') {
        if (!empty($_REQUEST['seo_redirects'])) {
            foreach ($_REQUEST['seo_redirects'] as $redirect_id => $redirect_data) {
                fn_seo_update_redirect($redirect_data, $redirect_id);
            }
        }
    }
    if ($mode == 'm_delete') {
        if (!empty($_REQUEST['redirect_ids'])) {
            foreach ($_REQUEST['redirect_ids'] as $redirect_id) {
                fn_delete_seo_redirect($redirect_id);
            }
        }
    }
    return array(CONTROLLER_STATUS_OK, "seo_redirects.manage");
}
if ($mode == 'manage') {
    list($seo_redirects, $search) = fn_get_seo_redirects($_REQUEST, Registry::get('settings.Appearance.admin_elements_per_page'));
    Registry::get('view')->assign('seo_redirects', $seo_redirects);
Esempio n. 5
0
/**
 * Updates SEO name for object
 * @param array $object_data object data
 * @param array $object_id object ID
 * @param string $type object type
 * @param string $lang_code language code
 * @return mixed, updated SEO name on success, false on failure
 */
function fn_seo_update_object($object_data, $object_id, $type, $lang_code)
{
    fn_set_hook('seo_update_objects_pre', $object_data, $object_id, $type, $lang_code, $seo_objects);
    if (!empty($object_id) && isset($object_data['seo_name'])) {
        $_company_id = '';
        if (fn_allowed_for('ULTIMATE')) {
            if (!empty($seo_vars['not_shared']) && Registry::get('runtime.company_id')) {
                $_company_id = Registry::get('runtime.company_id');
            } elseif (!empty($object_data['company_id'])) {
                $_company_id = $object_data['company_id'];
            }
        }
        // Do nothing if SEO name was not changed
        $old_name = fn_seo_get_name($type, $object_id, '', $_company_id, $lang_code);
        if ($object_data['seo_name'] == $old_name) {
            return true;
        }
        $_object_name = '';
        $seo_vars = fn_get_seo_vars($type);
        if (!empty($object_data['seo_name'])) {
            $_object_name = $object_data['seo_name'];
        } elseif (!empty($object_data[$seo_vars['description']])) {
            $_object_name = $object_data[$seo_vars['description']];
        }
        if (empty($_object_name)) {
            $_object_name = fn_seo_get_default_object_name($object_id, $type, $lang_code);
        }
        $lang_code = fn_get_corrected_seo_lang_code($lang_code);
        // always create redirect, execept it manually disabled
        $create_redirect = isset($object_data['seo_create_redirect']) ? !empty($object_data['seo_create_redirect']) : true;
        $is_tree_object = fn_check_seo_schema_option($seo_vars, 'tree_options');
        // If this is tree object and we need to create redirect - create it for all children
        if ($create_redirect && $is_tree_object) {
            $children = fn_seo_get_object_children($type);
            if (!empty($children)) {
                $path = fn_get_seo_parent_path($object_id, $type);
                $path .= !empty($path) ? '/' . $object_id : $object_id;
                fn_iterate_through_seo_names(function ($seo_name) use($_company_id, $lang_code) {
                    $url = fn_generate_seo_url_from_schema(array('type' => $seo_name['type'], 'object_id' => $seo_name['object_id'], 'lang_code' => $lang_code), false);
                    fn_seo_update_redirect(array('src' => $url, 'type' => $seo_name['type'], 'object_id' => $seo_name['object_id'], 'company_id' => $_company_id, 'lang_code' => $lang_code), 0, false);
                }, db_quote("path = ?s OR path LIKE ?l AND type IN (?a)", $path, $path . '/%', $children));
            }
        }
        fn_create_seo_name($object_id, $type, $_object_name, 0, '', $_company_id, $lang_code, $create_redirect);
        return true;
    }
    return false;
}