Esempio n. 1
0
 public function out()
 {
     if ($this->position > $this->max_length) {
         $this->position = 0;
         fn_echo('<br />');
     }
     fn_echo($this->symbol);
     $this->position++;
 }
Esempio n. 2
0
if ($mode == 'generate' || $mode == 'get') {
    $access_key = !empty($_REQUEST['access_key']) ? $_REQUEST['access_key'] : '';
    $price_id = !empty($_REQUEST['price_id']) ? $_REQUEST['price_id'] : 0;
    if (empty($price_id) && !empty($access_key)) {
        $price_id = fn_yml_get_price_id($access_key);
    }
    $options = fn_yml_get_options($price_id);
    if (!empty($options) && $options['enable_authorization'] == 'Y' && empty($access_key)) {
        $options = array();
    }
    if (!empty($options)) {
        $company_id = Registry::get('runtime.company_id');
        if (fn_allowed_for('MULTIVENDOR')) {
            $company_id = 0;
        }
        $offset = !empty($_REQUEST['offset']) ? $_REQUEST['offset'] : 0;
        $lang_code = DESCR_SL;
        if (Registry::isExist('languages.ru')) {
            $lang_code = 'ru';
        }
        $yml = new Yml2($company_id, $price_id, $lang_code, $offset, isset($_REQUEST['debug']));
        if ($mode == 'get') {
            $yml->get();
        } else {
            $yml->generate();
        }
    } else {
        fn_echo(__("error"));
    }
    exit;
}
Esempio n. 3
0
 /**
  * Creates database and imports dump there
  * @param  string  $db_name db name
  * @return boolean true on success, false - otherwise
  */
 public static function createDb($db_name = '')
 {
     $snapshot_dir = Registry::get('config.dir.snapshots');
     $dbdump_filename = empty($db_name) ? 'cmp_current.sql' : 'cmp_release.sql';
     if (!fn_mkdir($snapshot_dir)) {
         fn_set_notification('E', __('error'), __('text_cannot_create_directory', array('[directory]' => fn_get_rel_dir($snapshot_dir))));
         return false;
     }
     $dump_file = $snapshot_dir . $dbdump_filename;
     if (is_file($dump_file)) {
         if (!is_writable($dump_file)) {
             fn_set_notification('E', __('error'), __('dump_file_not_writable'));
             return false;
         }
     }
     $fd = @fopen($snapshot_dir . $dbdump_filename, 'w');
     if (!$fd) {
         fn_set_notification('E', __('error'), __('dump_cant_create_file'));
         return false;
     }
     if (!empty($db_name)) {
         Database::changeDb($db_name);
     }
     // set export format
     db_query("SET @SQL_MODE = 'MYSQL323'");
     fn_start_scroller();
     $create_statements = array();
     $insert_statements = array();
     $status_data = db_get_array("SHOW TABLE STATUS");
     $dbdump_tables = array();
     foreach ($status_data as $k => $v) {
         $dbdump_tables[] = $v['Name'];
     }
     // get status data
     $t_status = db_get_hash_array("SHOW TABLE STATUS", 'Name');
     foreach ($dbdump_tables as $k => $table) {
         fn_echo('<br />' . __('backupping_data') . ': <b>' . $table . '</b>&nbsp;&nbsp;');
         $total_rows = db_get_field("SELECT COUNT(*) FROM {$table}");
         $index = db_get_array("SHOW INDEX FROM {$table}");
         $order_by = array();
         foreach ($index as $kk => $vv) {
             if ($vv['Key_name'] == 'PRIMARY') {
                 $order_by[] = '`' . $vv['Column_name'] . '`';
             }
         }
         if (!empty($order_by)) {
             $order_by = 'ORDER BY ' . implode(',', $order_by);
         } else {
             $order_by = '';
         }
         // Define iterator
         if (!empty($t_status[$table]) && $t_status[$table]['Avg_row_length'] < DB_MAX_ROW_SIZE) {
             $it = DB_ROWS_PER_PASS;
         } else {
             $it = 1;
         }
         for ($i = 0; $i < $total_rows; $i = $i + $it) {
             $table_data = db_get_array("SELECT * FROM {$table} {$order_by} LIMIT {$i}, {$it}");
             foreach ($table_data as $_tdata) {
                 $_tdata = fn_add_slashes($_tdata, true);
                 $values = array();
                 foreach ($_tdata as $v) {
                     $values[] = $v !== null ? "'{$v}'" : 'NULL';
                 }
                 fwrite($fd, "INSERT INTO {$table} (`" . implode('`, `', array_keys($_tdata)) . "`) VALUES (" . implode(', ', $values) . ");\n");
             }
             fn_echo(' .');
         }
     }
     fn_stop_scroller();
     if (!empty($db_name)) {
         Settings::instance()->reloadSections();
     }
     if (fn_allowed_for('ULTIMATE')) {
         $companies = fn_get_short_companies();
         asort($companies);
         $settings['company_root'] = Settings::instance()->getList();
         foreach ($companies as $k => $v) {
             $settings['company_' . $k] = Settings::instance()->getList(0, 0, false, $k);
         }
     } else {
         $settings['company_root'] = Settings::instance()->getList();
     }
     if (!empty($db_name)) {
         Database::changeDb(Registry::get('config.db_name'));
     }
     $settings = self::processSettings($settings, '');
     $settings = self::formatSettings($settings['data']);
     ksort($settings);
     $data = print_r($settings, true);
     fwrite($fd, $data);
     fclose($fd);
     @chmod($snapshot_dir . $dbdump_filename, DEFAULT_FILE_PERMISSIONS);
     return true;
 }
Esempio n. 4
0
        // Log database optimization
        fn_log_event('database', 'optimize');
        $all_tables = db_get_fields("SHOW TABLES");
        fn_set_progress('parts', sizeof($all_tables));
        foreach ($all_tables as $table) {
            fn_set_progress('echo', __('optimizing_table') . "&nbsp;<b>{$table}</b>...<br />");
            db_query("OPTIMIZE TABLE {$table}");
            db_query("ANALYZE TABLE {$table}");
            $fields = db_get_hash_array("SHOW COLUMNS FROM {$table}", 'Field');
            if (!empty($fields['is_global'])) {
                // Sort table by is_global field
                fn_echo('.');
                db_query("ALTER TABLE {$table} ORDER BY is_global DESC");
            } elseif (!empty($fields['position'])) {
                // Sort table by position field
                fn_echo('.');
                db_query("ALTER TABLE {$table} ORDER BY position");
            }
        }
        fn_set_notification('N', __('notice'), __('done'));
    }
    if ($mode == 'delete') {
        if (!empty($_REQUEST['backup_file'])) {
            fn_rm(Registry::get('config.dir.backups') . fn_basename($_REQUEST['backup_file']));
        }
    }
    return array(CONTROLLER_STATUS_OK, 'datakeeper.manage');
}
if ($mode == 'getfile' && !empty($_REQUEST['file'])) {
    fn_get_file(Registry::get('config.dir.backups') . fn_basename($_REQUEST['file']));
} elseif ($mode == 'manage') {
Esempio n. 5
0
 /**
  * Updates progress bar title
  * @param string $text title text
  */
 public function changeTitle($text = '')
 {
     return fn_echo("<script type=\"text/javascript\">parent.Tygh.\$('#comet_container_controller').ceProgress('setTitle', " . json_encode(array('title' => $text)) . ');</script>');
 }
Esempio n. 6
0
function fn_se_get_products_data($product_ids, $company_id = 0, $lang_code = NULL, $fl_echo = true)
{
    $xml = '';
    $products = array();
    if (!empty($product_ids)) {
        list($products) = fn_get_products(array('disable_searchanise' => true, 'area' => 'A', 'sort_by' => 'null', 'pid' => $product_ids, 'extend' => array('description', 'search_words', 'popularity', 'sales')), 0, $lang_code);
    }
    if ($fl_echo) {
        fn_echo('.');
    }
    if (!empty($products)) {
        foreach ($products as &$_product) {
            $_product['exclude_from_calculate'] = true;
            //pass additional params to fn_gather_additional_products_data for some speed up
        }
        fn_gather_additional_products_data($products, array('get_features' => false, 'get_icon' => true, 'get_detailed' => true, 'get_options' => false, 'get_discounts' => false, 'get_taxed_prices' => false));
        if ($fl_echo) {
            fn_echo('.');
        }
        if (!fn_allowed_for('ULTIMATE:FREE')) {
            $usergroups = empty($usergroups) ? array_merge(fn_get_default_usergroups(), db_get_hash_array("SELECT a.usergroup_id, a.status, a.type FROM ?:usergroups as a WHERE a.type = 'C' ORDER BY a.usergroup_id", 'usergroup_id')) : $usergroups;
        } else {
            $usergroups = array();
        }
        fn_se_get_products_additionals($products, $company_id, $lang_code);
        fn_se_get_products_features($products, $company_id, $lang_code);
        $schema = $items = array();
        foreach ($products as $product) {
            $item = array();
            $data = fn_se_prepare_product_data($product, $usergroups, $company_id, $lang_code);
            foreach ($data as $name => $d) {
                $name = isset($d['name']) ? $d['name'] : $name;
                $item[$name] = $d['value'];
                unset($d['value']);
                if (!empty($d)) {
                    $schema[$name] = $d;
                }
            }
            $items[] = $item;
        }
    }
    return array('schema' => $schema, 'items' => $items);
}
Esempio n. 7
0
    //fn_set_notification('I','view>',print_r($view));
    $view->assign('total_print', $total_print);
    $view->assign('order_info', $order_info);
    $view->assign('fonts_path', fn_get_theme_path('[relative]/[theme]/media/fonts'));
    if ($order_info['shipping_cost'] != 0) {
        $view->assign('shipping_cost', true);
    }
    if ($mode == "send_account_payment") {
        if (!empty($order_info['email'])) {
            fn_disable_live_editor_mode();
            $html = array($view->displayMail('addons/rus_payments/print_invoice_payment.tpl', false, 'C'));
            Pdf::render($html, fn_get_files_dir_path() . 'account_payment.pdf', 'save');
            $data = array('order_info' => $order_info, 'total_print' => $total_print, 'fonts_path' => fn_get_theme_path('[relative]/[theme]/media/fonts'));
            Mailer::sendMail(array('to' => $order_info['email'], 'from' => 'default_company_orders_department', 'data' => $data, 'attachments' => array(fn_get_files_dir_path() . 'account_payment.pdf'), 'tpl' => 'addons/rus_payments/print_invoice_payment.tpl', 'is_html' => true), 'A');
            fn_set_notification('N', __('notice'), __('text_email_sent'));
        }
    } else {
        $view->assign('show_print_button', true);
        $view->displayMail('addons/rus_payments/print_invoice_payment.tpl', true, 'C');
    }
    exit;
} elseif ($mode == 'get_stamp') {
    Header("Content-Type: image/png");
    Header("Content-Type: image/jpg");
    Header("Content-Type: image/jpeg");
    Header("Content-Type: image/gif");
    $path_stamp = fn_get_image_pairs($_REQUEST['payment_id'], 'stamp', 'M', true, true, DESCR_SL);
    $image = fn_get_contents($path_stamp['icon']['absolute_path']);
    fn_echo($image);
    exit;
}
Esempio n. 8
0
function fn_google_export_add_additional_google_categories()
{
    $available_langs = array_keys(fn_google_export_available_categories());
    fn_echo(__('google_export_start_import'));
    foreach ($available_langs as $lang) {
        $new_feature = array("Google product category ({$lang})" => array('S' => fn_get_google_categories($lang)));
        $parent_feature_id = db_get_field("SELECT feature_id FROM ?:product_features_descriptions WHERE description = 'Google export features' AND lang_code = ?s", DEFAULT_LANGUAGE);
        fn_google_export_add_feature($new_feature, $parent_feature_id, true);
        fn_google_export_update_alt_languages('product_features_descriptions', 'feature_id', true);
        fn_google_export_update_alt_languages('product_feature_variant_descriptions', 'variant_id', true);
    }
}
Esempio n. 9
0
function fn_send_confirmation_email($subscriber_id, $list_id, $email, $lang_code = CART_LANGUAGE)
{
    $list = fn_get_mailing_list_data($list_id);
    if ($list['register_autoresponder']) {
        $autoresponder = fn_get_newsletter_data($list['register_autoresponder']);
        $body = $autoresponder['body_html'];
        $body = fn_render_newsletter($body, array('list_id' => $list_id, 'subscriber_id' => $subscriber_id, 'email' => $email));
        if (AREA == 'A') {
            fn_echo(__('sending_email_to', array('[email]' => $email)) . '<br />');
        }
        fn_send_newsletter($email, $list, $autoresponder['newsletter'], $body, array(), $lang_code, $list['reply_to']);
    }
}
Esempio n. 10
0
function fn_yandex_auth_error($msg)
{
    header('WWW-Authenticate: Basic realm="Authorization required"');
    header('HTTP/1.0 401 Unauthorized');
    fn_echo($msg);
    exit;
}
Esempio n. 11
0
function fn_export($pattern, $export_fields, $options)
{
    if (!empty($pattern['pre_processing'])) {
        $func = $pattern['pre_processing'];
        $function = array_shift($func);
        $args = $func;
        foreach ($args as $k => $v) {
            if (strpos($v, '@') !== false) {
                $_opt = str_replace('@', '', $v);
                $args[$k] = isset($options[$_opt]) ? $options[$_opt] : '';
            }
        }
        call_user_func_array($function, $args);
    }
    if (isset($options['fields_names'])) {
        if ($options['fields_names']) {
            $fields_names = $export_fields;
            $export_fields = array_keys($export_fields);
        }
    }
    $primary_key = $pattern['key'];
    array_walk($primary_key, 'fn_attach_value_helper', $pattern['table'] . '.');
    $table_fields = $primary_key;
    $joins = array();
    $processes = array();
    $conditions = array();
    // Build list of fields that should be retrieved from the database
    foreach ($pattern['export_fields'] as $field => $data) {
        if (!in_array($field, $export_fields)) {
            continue;
        }
        // Do no link this field
        if (isset($data['linked']) && $data['linked'] == false) {
            // do something?
        } elseif (empty($data['table']) || $data['table'] == $pattern['table']) {
            $table_fields[] = $pattern['table'] . '.' . (!empty($data['db_field']) ? $data['db_field'] . ' as "' . $field . '"' : $field);
            // Linked object tables
        } else {
            $table_fields[] = $data['table'] . '.' . (!empty($data['db_field']) ? $data['db_field'] . ' as "' . $field . '"' : $field);
        }
        if (!empty($data['process_get'])) {
            $processes[$field]['function'] = array_shift($data['process_get']);
            $processes[$field]['args'] = $data['process_get'];
        }
    }
    // Build the list of joins
    if (!empty($pattern['references'])) {
        foreach ($pattern['references'] as $table => $data) {
            $ref = array();
            foreach ($data['reference_fields'] as $k => $v) {
                if (strval($v) == 'key' || strval($v) == '#key') {
                    $_val = sizeof($primary_key) == 1 ? reset($primary_key) : '';
                } elseif ($v[0] == '&') {
                    $_val = $pattern['table'] . '.' . substr($v, 1);
                } elseif (strpos($v, '@') !== false) {
                    $_opt = str_replace('@', '', $v);
                    $_val = "'" . $options[$_opt] . "'";
                } else {
                    $_val = "'{$v}'";
                }
                $ref[] = "{$table}.{$k} = {$_val}";
                // fixme
            }
            $joins[] = $data['join_type'] . ' JOIN ?:' . $table . " as {$table} ON " . implode(' AND ', $ref);
        }
    }
    // Add retrieve conditions
    if (!empty($pattern['condition'])) {
        $_cond = array();
        foreach ($pattern['condition'] as $field => $value) {
            if (is_array($value)) {
                $_val = implode("','", $value);
            } elseif (strpos($value, '@') !== false) {
                $_opt = str_replace('@', '', $value);
                $_val = $options[$_opt];
            } else {
                $_val = $value;
            }
            $_cond[] = $pattern['table'] . ".{$field} IN ('{$_val}')";
        }
        $conditions[] = implode(' AND ', $_cond);
    }
    // Limit scope to the current vendor's products only (if in vendor mode)
    $company_condition = fn_get_company_condition('products.company_id', false);
    if (!empty($company_condition)) {
        $conditions[] = $company_condition;
    }
    // Build main query
    $query = "SELECT " . implode(', ', $table_fields) . " FROM ?:" . $pattern['table'] . " as " . $pattern['table'] . ' ' . implode(' ', $joins) . (!empty($conditions) ? ' WHERE ' . implode(' AND ', $conditions) : '');
    $step = 30;
    // define number of rows to get from database
    $iterator = 0;
    // start retrieving from
    $data_exported = false;
    fn_start_scroller();
    fn_echo(fn_get_lang_var('exporting_data') . '<br />');
    while ($data = db_get_array($query . " LIMIT {$iterator}, {$step}")) {
        $data_exported = true;
        $iterator += $step;
        $result = array();
        foreach ($data as $k => $v) {
            $result[$k] = fn_array_key_intersect($v, $pattern['export_fields']);
            foreach ($processes as $field => $process_data) {
                $args = array();
                foreach ($process_data['args'] as $ak => $av) {
                    if ($av == '#this') {
                        $args[$ak] = $v[$field];
                    } elseif ($av == '#key') {
                        $args[$ak] = sizeof($pattern['key']) == 1 ? $v[reset($pattern['key'])] : '';
                    } elseif (strpos($av, '@') !== false) {
                        $_opt = str_replace('@', '', $av);
                        $args[$ak] = $options[$_opt];
                    } elseif ($av == '#field') {
                        $args[$ak] = $field;
                    } else {
                        $args[$ak] = $av;
                    }
                }
                $result[$k][$field] = call_user_func_array($process_data['function'], $args);
            }
        }
        // Sort result array
        $_result = array();
        foreach ($result as $k => $v) {
            foreach ($export_fields as $field) {
                if (isset($fields_names[$field])) {
                    $_result[$k][$fields_names[$field]] = $v[$field];
                } else {
                    $_result[$k][$field] = $v[$field];
                }
            }
        }
        unset($result);
        // Put data
        $enclosure = isset($pattern['enclosure']) ? $pattern['enclosure'] : '"';
        fn_echo(' .');
        fn_put_csv($_result, $options, $enclosure);
        unset($_result);
    }
    fn_stop_scroller();
    if (!empty($pattern['post_processing'])) {
        $func = $pattern['post_processing'];
        if (file_exists(DIR_EXIM . $options['filename'])) {
            $function = array_shift($func);
            $args = $func;
            foreach ($args as $k => $v) {
                if (strpos($v, '@') !== false) {
                    $_opt = str_replace('@', '', $v);
                    $args[$k] = $options[$_opt];
                }
            }
            $data_exported = call_user_func_array($function, $args);
        }
    }
    echo '<br/>';
    echo '<a href="/var/exim/' . $options['filename'] . '">' . $options['filename'] . '</a>';
    return $data_exported;
}
Esempio n. 12
0
 protected function _convertOrders($default_company_id)
 {
     $limit = 50;
     General::connectToOriginalDB(array('table_prefix' => General::formatPrefix()));
     db_query("UPDATE ?:order_data SET type='A' WHERE type='G'");
     //change marker for addon Reward points
     $orders_count = db_get_field("SELECT COUNT(*) FROM ?:orders");
     $crypt = new Crypt_Blowfish($this->store_data['crypt_key']);
     $crypt_new = new Crypt_Blowfish(Registry::get('config.crypt_key'));
     $location_fields = array('s_firstname as firstname', 's_lastname as lastname', 's_address as address', 's_address_2 as address_2', 's_city as city', 's_state as state', 's_country as country', 's_zipcode as zipcode', 's_phone as phone', 's_address_type as address_type');
     fn_set_progress('step_scale', ceil($orders_count / $limit));
     for ($i = 0; $i <= floor($orders_count / $limit); $i++) {
         $order_ids = db_get_fields("SELECT order_id FROM ?:orders LIMIT ?i, ?i", $i * $limit, $limit);
         $data = array();
         $shipment_items = array();
         fn_set_progress('echo', '<br />' . General::getUnavailableLangVar('converting_orders'), true);
         foreach ($order_ids as $order_id) {
             $order_info = array();
             $order_info['shipping'] = unserialize(db_get_field("SELECT data FROM ?:order_data WHERE type='L' AND order_id = ?i", $order_id));
             $order_info['products'] = db_get_hash_array("SELECT * FROM ?:order_details WHERE order_id = ?i", 'item_id', $order_id);
             $location = db_get_row("SELECT ?p FROM ?:orders WHERE order_id = ?i", implode(',', $location_fields), $order_id);
             if ($order_info['products']) {
                 foreach ($order_info['products'] as $cart_id => $product) {
                     if ($product['extra']) {
                         $order_info['products'][$cart_id]['extra'] = unserialize($product['extra']);
                     }
                 }
             }
             $products = array();
             foreach ($order_info['products'] as $cart_id => $product) {
                 $products[$cart_id] = $product['extra'];
                 $products[$cart_id]['amount'] = $product['amount'];
                 $products[$cart_id]['product_id'] = $product['product_id'];
             }
             $product_groups = $this->_groupProductsListOrder($products);
             $shippings = array();
             foreach ($product_groups as $key_group => $group) {
                 if (!empty($order_info['shipping'])) {
                     foreach ($order_info['shipping'] as $shipping_id => $shipping) {
                         $_shipping = $shipping;
                         $_shipping['shipping_id'] = $shipping_id;
                         unset($_shipping['rates']);
                         if (isset($_shipping['tracking_number'])) {
                             $shipment = array('shipping_id' => $shipping_id, 'tracking_number' => $_shipping['tracking_number'], 'carrier' => strtolower($_shipping['carrier']));
                             $shipment_id = db_query("INSERT INTO ?:shipments ?e", $shipment);
                             foreach ($group['products'] as $cart_id => $product) {
                                 $shipment_items[] = array('item_id' => $cart_id, 'shipment_id' => $shipment_id, 'order_id' => $order_id, 'product_id' => $product['product_id'], 'amount' => $product['amount']);
                             }
                             unset($_shipping['tracking_number']);
                             unset($_shipping['carrier']);
                         }
                         if (!empty($shipping_id)) {
                             foreach ($shipping['rates'] as $company_id => $rate) {
                                 if ($company_id == $group['company_id'] || $company_id == 0 && $group['company_id'] == $default_company_id) {
                                     $_shipping['rate'] = $rate;
                                     $_shipping['group_key'] = $key_group;
                                     $product_groups[$key_group]['shippings'][$shipping_id] = $_shipping;
                                     $product_groups[$key_group]['chosen_shippings'][] = $_shipping;
                                     $product_groups[$key_group]['package_info'] = !empty($_shipping['packages_info']) ? $_shipping['packages_info'] : array();
                                     $product_groups[$key_group]['package_info']['location'] = $location;
                                     $shippings[$shipping_id] = !empty($shippings[$shipping_id]) ? $shippings[$shipping_id] : $_shipping;
                                     $shippings[$shipping_id]['rates'][$key_group] = $shipping_id;
                                 }
                             }
                         }
                     }
                 }
             }
             $payment_info = db_get_field("SELECT data FROM ?:order_data WHERE type='P' AND order_id = ?i", $order_id);
             if (!empty($payment_info)) {
                 $payment_info = $crypt->decrypt(base64_decode($payment_info));
                 $payment_info = base64_encode($crypt_new->encrypt($payment_info));
                 $data[] = array('order_id' => $order_id, 'type' => 'P', 'data' => $payment_info);
             }
             $data[] = array('order_id' => $order_id, 'type' => 'G', 'data' => serialize($product_groups));
             $data[] = array('order_id' => $order_id, 'type' => 'L', 'data' => serialize(array_values($shippings)));
             fn_echo(' .');
         }
         if (!empty($data)) {
             db_query("REPLACE INTO ?:order_data ?m", $data);
         }
         if (!empty($shipment_items)) {
             db_query("REPLACE INTO ?:shipment_items ?m", $shipment_items);
         }
     }
     db_query("UPDATE ?:shipments SET carrier = LOWER(carrier);");
     db_query("UPDATE ?:shipments SET carrier = 'usps' WHERE carrier = 'usp';");
     db_query("UPDATE ?:shipments SET carrier = 'fedex' WHERE carrier = 'fdx';");
     db_query("UPDATE ?:shipments SET carrier = 'swisspost' WHERE carrier = 'chp';");
 }
Esempio n. 13
0
        fn_install_addon('twigmo', false);
        $_SESSION['twigmo_upgrade'] = array('upgrade_dirs' => $upgrade_dirs, 'install_src_dir' => $install_src_dir);
        fn_stop_scroller();
        echo '<br><br>';
        fn_redirect('upgrade_center.upgrade_twigmo.step2');
    }
}
if ($mode == 'upgrade_twigmo' and $action == 'step2' and isset($_SESSION['twigmo_upgrade']) && !fn_twg_is_on_saas()) {
    fn_start_scroller();
    fn_echo(__('twgadmin_restore_settings') . '<br>');
    fn_ftp_connect(Settings::instance()->getValues('Upgrade_center'));
    fn_echo('.');
    $upgrade_dirs = $_SESSION['twigmo_upgrade']['upgrade_dirs'];
    fn_echo('.');
    // Uninstal addon
    fn_uninstall_addon('twigmo', false);
    fn_echo('.');
    // Install
    fn_install_addon('twigmo', false);
    fn_echo('.');
    // Restore settings
    TwigmoUpgrade::restoreSettingsAndCSS($upgrade_dirs, $auth['user_id']);
    fn_echo('.');
    // Clear template cache
    fn_rm(Registry::get('config.dir.cache_templates'));
    fn_echo('.');
    fn_echo('<br><b>' . __('twgadmin_upgrade_completed') . '<b><br>');
    unset($_SESSION['twigmo_upgrade']);
    fn_stop_scroller();
    return array(CONTROLLER_STATUS_REDIRECT, 'addons.update?addon=twigmo');
}
Esempio n. 14
0
function fn_se_echo_connect_progress($text)
{
    if (!defined('AJAX_REQUEST')) {
        fn_echo($text);
    }
}
                        $address .= ', ' . $company_data['company_zipcode'];
                    }
                    if (!empty($company_data['company_country_descr'])) {
                        $address .= ', ' . $company_data['company_country_descr'];
                    }
                    $text_header = str_replace("%company_address%", $address, $text_header);
                    Mailer::sendMail(array('to' => $user_data['email'], 'from' => 'company_orders_department', 'data' => array('letter_body' => $text_header, 'subject' => $subject, 'products' => $products), 'tpl' => 'addons/abandoned_cart_reminder/notification.tpl'), 'C', $recipient_data['lang_code']);
                    if (!empty($copy_email)) {
                        Mailer::sendMail(array('to' => $copy_email, 'from' => 'company_orders_department', 'data' => array('letter_body' => $text_header, 'subject' => $subject, 'products' => $products), 'tpl' => 'addons/abandoned_cart_reminder/notification.tpl'), 'C', CART_LANGUAGE);
                    }
                    $sent++;
                    if ($reminder_number == 1) {
                        db_query("UPDATE ?:user_session_products SET abandoned_is_send_first = ?i WHERE user_id = ?i", time(), $recipient_data['user_id']);
                    } elseif ($reminder_number == 2) {
                        db_query("UPDATE ?:user_session_products SET abandoned_is_send_second = ?i WHERE user_id = ?i", time(), $recipient_data['user_id']);
                    }
                }
            }
        }
    }
}
$delete_days = Registry::get('addons.abandoned_cart_reminder.delete');
if (!empty($delete_days)) {
    $today_start = strtotime("00:00");
    $today_end = strtotime("23:59");
    $period_start = $today_start - intval($delete_days) * 24 * 60 * 60;
    $period_end = $today_end - intval($delete_days) * 24 * 60 * 60;
    db_query("DELETE FROM ?:user_session_products WHERE timestamp >= ?i AND timestamp <= ?i", $period_start, $period_end);
}
fn_echo('Sent messages: ' . $sent);
Esempio n. 16
0
                    }
                    $counter->out();
                }
                $tbl .= '</table>';
                $counter->out();
                Pdf::batchAdd($tbl);
            }
        }
    }
    //Close and output PDF document
    $temp_filename = fn_create_temp_file();
    $imp_filename = $temp_filename . '.pdf';
    fn_rename($temp_filename, $imp_filename);
    Pdf::batchRender($imp_filename, true);
    Storage::instance('assets')->put($filename, array('file' => $imp_filename, 'caching' => true));
    fn_echo('<br />' . __('done'));
}
/**
 *
 * Adds product data in HTML format to price list table
 * @param array $product Product data
 * @param array $selected_fields Product fields that should be in price list
 * @param string $style Product row style (similar to the HTML style attribute, e.g.: style="background-color: #EEEEEE")
 * @param array $price_schema Price list columns scheme
 * @param array $options_variants Product options variants
 *
 * @return string Product data row in HTML format
 */
function fn_price_list_print_product_data($product, $selected_fields, $style, $price_schema, $options_variants = array())
{
    $tbl = '<tr>';
Esempio n. 17
0
function fn_export($pattern, $export_fields, $options)
{
    if (empty($pattern) || empty($export_fields)) {
        return false;
    }
    // Languages
    if (!empty($options['lang_code'])) {
        $multi_lang = $options['lang_code'];
        $count_langs = count($multi_lang);
    } else {
        $multi_lang = array(DEFAULT_LANGUAGE);
        $count_langs = 1;
        $options['lang_code'] = $multi_lang;
    }
    $can_continue = true;
    if (!empty($pattern['export_pre_moderation'])) {
        $data_export_pre_moderation = array('pattern' => &$pattern, 'export_fields' => &$export_fields, 'options' => &$options, 'can_continue' => &$can_continue);
        fn_exim_processing('export', $pattern['export_pre_moderation'], $options, $data_export_pre_moderation);
    }
    if (!$can_continue) {
        return false;
    }
    if (!empty($pattern['pre_processing'])) {
        fn_exim_processing('export', $pattern['pre_processing'], $options);
    }
    if (isset($options['fields_names'])) {
        if ($options['fields_names']) {
            $fields_names = $export_fields;
            $export_fields = array_keys($export_fields);
        }
    }
    $primary_key = array();
    $_primary_key = $pattern['key'];
    foreach ($_primary_key as $key) {
        $primary_key[$key] = $key;
    }
    array_walk($primary_key, 'fn_attach_value_helper', $pattern['table'] . '.');
    $table_fields = $primary_key;
    $processes = array();
    // Build list of fields that should be retrieved from the database
    fn_export_build_retrieved_fields($processes, $table_fields, $pattern, $export_fields);
    if (empty($pattern['export_fields']['multilang'])) {
        $multi_lang = array(DEFAULT_LANGUAGE);
        $count_langs = 1;
        $options['lang_code'] = $multi_lang;
    }
    // Build the list of joins
    $joins = fn_export_build_joins($pattern, $options, $primary_key, $multi_lang);
    // Add retrieve conditions
    $conditions = fn_export_build_conditions($pattern, $options);
    if (!empty($pattern['pre_export_process'])) {
        $pre_export_process_data = array('pattern' => &$pattern, 'export_fields' => &$export_fields, 'options' => &$options, 'conditions' => &$conditions, 'joins' => &$joins, 'table_fields' => &$table_fields, 'processes' => &$processes);
        fn_exim_processing('export', $pattern['pre_export_process'], $options, $pre_export_process_data);
    }
    $total = db_get_field("SELECT COUNT(*) FROM ?:" . $pattern['table'] . " as " . $pattern['table'] . ' ' . implode(' ', $joins) . (!empty($conditions) ? ' WHERE ' . implode(' AND ', $conditions) : ''));
    fn_set_progress('parts', $total);
    fn_set_progress('step_scale', 1);
    $sorting = '';
    if (!empty($pattern['order_by'])) {
        $sorting = ' ORDER BY ' . $pattern['order_by'];
    }
    // Build main query
    $query = "SELECT " . implode(', ', $table_fields) . " FROM ?:" . $pattern['table'] . " as " . $pattern['table'] . ' ' . implode(' ', $joins) . (!empty($conditions) ? ' WHERE ' . implode(' AND ', $conditions) : '') . $sorting;
    $step = fn_floor_to_step(DB_LIMIT_SELECT_ROW, $count_langs);
    // define number of rows to get from database
    $iterator = 0;
    // start retrieving from
    $progress = 0;
    $data_exported = false;
    $main_lang = reset($multi_lang);
    $manual_multilang = true;
    $field_lang = '';
    foreach ($pattern['export_fields']['multilang'] as $key => $value) {
        if (array_search('languages', $value, true)) {
            if (!isset($value['linked']) || $value['linked'] === true) {
                $manual_multilang = false;
            }
            $field_lang = $key;
            break;
        }
    }
    if (empty($field_lang) || !in_array($field_lang, $export_fields)) {
        $multi_lang = array($main_lang);
        $count_langs = 1;
    }
    while ($data = db_get_array($query . " LIMIT {$iterator}, {$step}")) {
        $data_exported = true;
        if ($manual_multilang) {
            $data_lang = $data;
            $data = array();
            foreach ($data_lang as $data_key => $data_value) {
                $data[] = array_combine($multi_lang, array_fill(0, $count_langs, $data_value));
            }
        } else {
            $data_lang = array_chunk($data, $count_langs);
            $data = array();
            foreach ($data_lang as $data_key => $data_value) {
                // Sort
                foreach ($multi_lang as $lang_code) {
                    foreach ($data_value as $v) {
                        if (array_search($lang_code, $v, true)) {
                            $data[$data_key][$lang_code] = $v;
                        }
                    }
                }
            }
        }
        $result = array();
        foreach ($data as $k => $v) {
            $progress += $count_langs;
            fn_set_progress('echo', __('exporting_data') . ':&nbsp;<b>' . $progress . '</b>');
            fn_export_fill_fields($result[$k], $v, $processes, $pattern, $options);
        }
        $_result = array();
        foreach ($result as $k => $v) {
            foreach ($multi_lang as $lang_code) {
                $_data = array();
                foreach ($export_fields as $field) {
                    if (isset($fields_names[$field])) {
                        $_data[$fields_names[$field]] = $v[$lang_code][$field];
                    } else {
                        $_data[$field] = isset($v[$lang_code][$field]) ? $v[$lang_code][$field] : '';
                    }
                }
                $_result[] = $_data;
            }
        }
        // Put data
        $enclosure = isset($pattern['enclosure']) ? $pattern['enclosure'] : '"';
        fn_echo(' .');
        if (isset($pattern['func_save_content_to_file']) && is_callable($pattern['func_save_content_to_file'])) {
            call_user_func($pattern['func_save_content_to_file'], $_result, $options, $enclosure);
        } else {
            fn_put_csv($_result, $options, $enclosure);
        }
        $iterator += $step;
    }
    if (!empty($pattern['post_processing'])) {
        fn_set_progress('echo', __('processing'), false);
        if ($data_exported && file_exists(fn_get_files_dir_path() . $options['filename'])) {
            $data_exported = fn_exim_processing('export', $pattern['post_processing'], $options);
        }
    }
    return $data_exported;
}
Esempio n. 18
0
function fn_exim_1c_init()
{
    fn_echo("zip=no\n");
    fn_echo('file_limit=' . FILE_LIMIT . "\n");
}
Esempio n. 19
0
            fn_theme_editor_set_style($_REQUEST['style_id']);
            // If theme elements passed, get them
        } elseif (!empty($_REQUEST['style']['data'])) {
            $data = $_REQUEST['style']['data'];
            $data = Styles::factory($theme_name)->processCopy('', $data);
        }
        $less = new Less();
        $import_path[] = Registry::get('config.dir.root') . fn_get_theme_path('/[relative]/[theme]/css');
        $import_path[] = Registry::get('config.dir.root') . fn_get_theme_path('/[relative]/[theme]/css/tygh');
        $less->setImportDir($import_path);
        $content = $css_content . $less->customCompile($less_content, Registry::get('config.dir.root'), $data);
        // remove external fonts to avoid flickering when styles are reloaded
        //$content = preg_replace("/@font-face \{.*?\}/s", '', $content);
    }
    header('content-type: text/css');
    fn_echo($content);
    exit;
} elseif ($mode == 'duplicate') {
    // FIXME: Bacward preset compatibility
    if (!empty($_REQUEST['preset_id'])) {
        $_REQUEST['style_id'] = $_REQUEST['preset_id'];
    }
    if (!empty($_REQUEST['name']) && Styles::factory(fn_get_theme_path('[theme]', 'C'))->copy($_REQUEST['style_id'], $_REQUEST['name'])) {
        fn_theme_editor_set_style($_REQUEST['name']);
    } else {
        //FIXME: Presets backward compability
        $path = fn_get_theme_path('[relative]/[theme]/styles');
        if (!is_dir($path)) {
            $path = fn_get_theme_path('[relative]/[theme]/presets');
        }
        fn_set_notification('E', __('error'), __('theme_editor.style_data_cannot_be_saved', array('[theme_dir]' => $path)));
Esempio n. 20
0
/**
* Redirect browser to the new location
*
* @param string location - destination of redirect
* @param bool no_delay - do not delay redirection if output was performed
* @param bool allow_external_redirect - allow redirection to external resource
* @return
*/
function fn_redirect($location, $no_delay = false, $allow_external_redirect = false)
{
    $external_redirect = false;
    $protocol = defined('HTTPS') ? 'https' : 'http';
    // Cleanup location from &amp; signs and call fn_url()
    $location = str_replace('&amp;', '&', fn_url(str_replace(array("\n", "\r"), array('', ''), $location)));
    // Convert absolute link with location to relative one
    if (strpos($location, '://') !== false || substr($location, 0, 7) == 'mailto:') {
        if (strpos($location, Registry::get('config.http_location')) !== false) {
            $location = str_replace(array(Registry::get('config.http_location') . '/', Registry::get('config.http_location')), '', $location);
            $protocol = 'http';
        } elseif (strpos($location, Registry::get('config.https_location')) !== false) {
            $location = str_replace(array(Registry::get('config.https_location') . '/', Registry::get('config.https_location')), '', $location);
            $protocol = 'https';
        } else {
            if ($allow_external_redirect == false) {
                // if external redirects aren't allowed, redirect to index script
                $location = INDEX_SCRIPT;
            } else {
                $external_redirect = true;
            }
        }
        // Convert absolute link without location to relative one
    } else {
        $_protocol = "";
        $http_path = Registry::get('config.http_path');
        $https_path = Registry::get('config.https_path');
        if (!empty($http_path) && substr($location, 0, strlen($http_path)) == $http_path) {
            $location = substr($location, strlen($http_path) + 1);
            $_protocol = 'http';
        } elseif (!empty($https_path) && substr($location, 0, strlen($https_path)) == $https_path) {
            $location = substr($location, strlen($https_path) + 1);
            $_protocol = 'https';
        }
        $protocol = Registry::get('config.http_path') != Registry::get('config.https_path') && !empty($_protocol) ? $_protocol : $protocol;
    }
    if ($external_redirect == false) {
        fn_set_hook('redirect', $location);
        $protocol_changed = defined('HTTPS') && $protocol == 'http' || !defined('HTTPS') && $protocol == 'https';
        // For correct redirection, location must be absolute with path
        $location = ($protocol == 'http' ? Registry::get('config.http_location') : Registry::get('config.https_location')) . '/' . ltrim($location, '/');
        // Parse the query string
        $query_array = array();
        if (strpos($location, '?') !== false) {
            $qs = substr($location, strpos($location, '?') + 1);
            $location = str_replace('?' . $qs, '', $location);
            parse_str($qs, $query_array);
        }
        if ($protocol_changed && (Registry::get('config.http_host') != Registry::get('config.https_host') || Registry::get('config.http_path') != Registry::get('config.https_path'))) {
            $query_array[SESS_NAME] = Session::get_id();
        }
        // If this is not ajax request, remove ajax specific parameters
        if (!defined('AJAX_REQUEST')) {
            unset($query_array['is_ajax']);
            unset($query_array['result_ids']);
        } else {
            $query_array['result_ids'] = implode(',', Registry::get('ajax')->result_ids);
            $query_array['is_ajax'] = Registry::get('ajax')->request_type;
            $ajax_assigned_vars = Registry::get('ajax')->get_assigned_vars();
            if (!empty($ajax_assigned_vars['html'])) {
                unset($ajax_assigned_vars['html']);
            }
            $query_array['_ajax_data'] = $ajax_assigned_vars;
            fn_define('AJAX_REDIRECT', true);
        }
        if (!empty($query_array)) {
            $location .= '?' . fn_build_query($query_array);
        }
        // Redirect from https to http location
        if ($protocol_changed && defined('HTTPS')) {
            $no_delay = true;
            fn_define('META_REDIRECT', true);
        }
    }
    if (!ob_get_contents() && !headers_sent() && !defined('META_REDIRECT')) {
        header('Location: ' . $location);
        exit;
    } else {
        if (defined('AJAX_REQUEST')) {
            die("AJAX REDIRECT AFTER OUTPUT");
        }
        $delay = $no_delay == true ? 0 : 10;
        if ($no_delay == false) {
            fn_echo('<br /><div style="margin-top: 20px; border: 1px solid #dadada; background-color: #fcffd8; padding: 15px; float: left;">');
            fn_echo(fn_get_lang_var('text_redirect_notice') . '&nbsp;');
            fn_echo('<a href="' . htmlspecialchars($location) . '" style="text-transform: lowercase;">' . fn_get_lang_var('continue') . '</a>');
            fn_echo('</div>');
        }
        fn_echo("<meta http-equiv=\"Refresh\" content=\"{$delay};URL=" . htmlspecialchars($location) . "\" />");
    }
    fn_flush();
    exit;
}
Esempio n. 21
0
function fn_set_progress($prop, $value, $extra = null)
{
    if ($prop == 'echo') {
        fn_echo($value);
        fn_echo('<br>');
    }
    return true;
}
Esempio n. 22
0
 public static function updateAltLanguages($table, $keys, $show_process = false)
 {
     General::connectToOriginalDB(array('table_prefix' => General::formatPrefix()));
     $langs = self::getLangCodes();
     if (!is_array($keys)) {
         $keys = array($keys);
     }
     $i = 0;
     $step = 50;
     while ($items = db_get_array("SELECT * FROM ?:{$table} WHERE lang_code = ?s LIMIT {$i}, {$step}", self::$default_language)) {
         $i += $step;
         foreach ($items as $v) {
             foreach ($langs as $lang) {
                 $condition = array();
                 foreach ($keys as $key) {
                     $lang_var = $v[$key];
                     $condition[] = db_quote("{$key} = ?s", $lang_var);
                 }
                 $condition = implode(' AND ', $condition);
                 $exists = db_get_field("SELECT COUNT(*) FROM ?:{$table} WHERE {$condition} AND lang_code = ?s", $lang);
                 if (empty($exists)) {
                     $v['lang_code'] = $lang;
                     db_query("REPLACE INTO ?:{$table} ?e", $v);
                     if ($show_process) {
                         fn_echo(' .');
                     }
                 }
             }
         }
     }
     return true;
 }
Esempio n. 23
0
/**
 * Recursively copy directory (or just a file)
 *
 * @param string $source
 * @param string $dest
 * @param bool $silent
 */
function fn_copy($source, $dest, $silent = true)
{
    //var_dump($silent);
    //var_dump($source);
    // Simple copy for a file
    if (is_file($source)) {
        if (@is_dir($dest)) {
            $dest .= '/' . basename($source);
        }
        if (filesize($source) == 0) {
            $fd = fopen($dest, 'w');
            fclose($fd);
            $res = true;
        } else {
            $res = @copy($source, $dest);
        }
        @chmod($dest, DEFAULT_FILE_PERMISSIONS);
        //var_dump('1');
        return $res;
    }
    // Make destination directory
    if ($silent == false) {
        fn_echo('Creating directory <b>' . (strpos($dest, DIR_ROOT) === 0 ? str_replace(DIR_ROOT . '/', '', $dest) : $dest) . '</b><br />');
    }
    if (!@is_dir($dest)) {
        if (fn_mkdir($dest) == false) {
            //			var_dump('2');
            return false;
        }
    }
    // Loop through the folder
    if (@is_dir($source)) {
        $dir = dir($source);
        while (false !== ($entry = $dir->read())) {
            // Skip pointers
            if ($entry == '.' || $entry == '..') {
                continue;
            }
            // Deep copy directories
            if ($dest !== $source . '/' . $entry) {
                if (fn_copy($source . '/' . $entry, $dest . '/' . $entry, $silent) == false) {
                    //					var_dump('3');
                    return false;
                }
            }
        }
        // Clean up
        $dir->close();
        return true;
    } else {
        //	var_dump('4');
        return false;
    }
}
Esempio n. 24
0
/**
* Set state for time-consuming processes
*
* @param string $prop property name
* @param string $value value to set
* @param mixed $extra extra data
* @return boolean - always true
*/
function fn_set_progress($prop, $value, $extra = null)
{
    if (Registry::get('runtime.comet') == true) {
        if ($prop == 'step_scale') {
            Tygh::$app['ajax']->setStepScale($value);
        } elseif ($prop == 'parts') {
            Tygh::$app['ajax']->setProgressParts($value);
        } elseif ($prop == 'echo') {
            Tygh::$app['ajax']->progressEcho($value, $extra === false ? $extra : true);
        } elseif ($prop == 'title') {
            Tygh::$app['ajax']->changeTitle($value);
        }
    } else {
        if ($prop == 'echo') {
            fn_echo($value);
        }
    }
    fn_set_hook('after_set_progress', $prop, $value, $extra);
    return true;
}
Esempio n. 25
0
                            		$worksheet->set_row($row, $height);*/
                        } else {
                            $worksheet->write($col . $row, $product[$field], $row % 2 == 0 ? $field_simple_odd : $field_simple);
                            if (isset($width[$col])) {
                                if ($width[$col] < strlen($product[$field])) {
                                    $width[$col] = strlen($product[$field]);
                                }
                            } else {
                                $width[$col] = strlen($product[$field]);
                            }
                        }
                        $col++;
                    }
                    $col = 'A';
                    $row++;
                }
            }
            $counter->Out();
        }
    }
    foreach ($width as $col => $size) {
        if ($size > MAX_SIZE) {
            $size = MAX_SIZE;
        }
        $worksheet->set_column($col . ':' . $col, $size);
    }
    unset($bmp);
    //Close and output XLS document
    $workbook->close();
    fn_echo('<br />' . fn_get_lang_var('done'));
}
Esempio n. 26
0
    $image_path = 'sess_data/' . fn_basename($_REQUEST['image']);
    if (Storage::instance('custom_files')->isExist($image_path)) {
        $real_path = Storage::instance('custom_files')->getAbsolutePath($image_path);
        list(, , $image_type, $tmp_path) = fn_get_image_size($real_path);
        if ($type == 'T') {
            $thumb_path = $image_path . '_thumb';
            if (!Storage::instance('custom_files')->isExist($thumb_path)) {
                // Output a thumbnail image
                list($cont, $format) = fn_resize_image($tmp_path, Registry::get('settings.Thumbnails.product_lists_thumbnail_width'), Registry::get('settings.Thumbnails.product_lists_thumbnail_height'), Registry::get('settings.Thumbnails.thumbnail_background_color'));
                if (!empty($cont)) {
                    Storage::instance('custom_files')->put($thumb_path, array('contents' => $cont));
                }
            }
            $real_path = Storage::instance('custom_files')->getAbsolutePath($thumb_path);
        }
        header('Content-type: ' . $image_type);
        fn_echo(fn_get_contents($real_path));
        exit;
    }
    // Not image file. Display spacer instead.
    header('Content-type: image/gif');
    readfile(fn_get_theme_path('[themes]/[theme]') . '/media/images/spacer.gif');
    exit;
} elseif ($mode == 'thumbnail') {
    $img = fn_generate_thumbnail($_REQUEST['image_path'], $_REQUEST['w'], $_REQUEST['h']);
    if (!empty($img)) {
        header('Content-type: ' . fn_get_file_type($img));
        fn_echo(fn_get_contents($img));
    }
    exit;
}
Esempio n. 27
0
/**
 * Fuctnions parses SQL file and import data from it
 *
 * @param string $file File for import
 * @param integer $buffer Buffer size for fread function
 * @param bool $show_status Show or do not show process by printing ' .'
 * @param integer $show_create_table 0 - Do not print the name of created table, 1 - Print name and get lang_var('create_table'), 2 - Print name without getting lang_var
 * @param bool $check_prefix Check table prefix and replace it with the installed in config.php
 * @param bool $track Use queries cache. Do not execute queries that already are executed.
 * @param bool $skip_errors Skip errors or not
 * @param bool $move_progress_bar Move COMET progress bar or not on show progress
 * @return bool false, if file is not accessible
 */
function db_import_sql_file($file, $buffer = 16384, $show_status = true, $show_create_table = 1, $check_prefix = false, $track = false, $skip_errors = false, $move_progress_bar = true)
{
    if (file_exists($file)) {
        $path = dirname($file);
        $file_name = fn_basename($file);
        $tmp_file = $path . "/{$file_name}.tmp";
        $executed_queries = array();
        if ($track && file_exists($tmp_file)) {
            $executed_queries = unserialize(fn_get_contents($tmp_file));
        }
        if ($skip_errors) {
            $_skip_errors = Registry::get('runtime.database.skip_errors');
            Registry::set('runtime.database.skip_errors', true);
        }
        $fd = fopen($file, 'r');
        if ($fd) {
            $ret = array();
            $rest = '';
            $fs = filesize($file);
            if ($show_status && $move_progress_bar) {
                fn_set_progress('step_scale', ceil($fs / $buffer));
            }
            while (!feof($fd)) {
                $str = $rest . fread($fd, $buffer);
                $rest = fn_parse_queries($ret, $str);
                if ($show_status) {
                    fn_set_progress('echo', '<br />' . __('importing_data'), $move_progress_bar);
                }
                if (!empty($ret)) {
                    foreach ($ret as $query) {
                        if (!in_array($query, $executed_queries)) {
                            if ($show_create_table && preg_match('/CREATE\\s+TABLE\\s+`?(\\w+)`?/i', $query, $matches)) {
                                if ($show_create_table == 1) {
                                    $_text = __('creating_table');
                                } elseif ($show_create_table == 2) {
                                    $_text = 'Creating table';
                                }
                                $table_name = $check_prefix ? fn_check_db_prefix($matches[1], Registry::get('config.table_prefix')) : $matches[1];
                                if ($show_status) {
                                    fn_set_progress('echo', '<br />' . $_text . ': <b>' . $table_name . '</b>', $move_progress_bar);
                                }
                            }
                            if ($check_prefix) {
                                $query = fn_check_db_prefix($query);
                            }
                            Database::query($query);
                            if ($track) {
                                $executed_queries[] = $query;
                                fn_put_contents($tmp_file, serialize($executed_queries));
                            }
                            if ($show_status) {
                                fn_echo(' .');
                            }
                        }
                    }
                    $ret = array();
                }
            }
            fclose($fd);
            return true;
        }
        if ($skip_errors) {
            Registry::set('runtime.database.skip_errors', $_skip_errors);
        }
    }
    return false;
}
Esempio n. 28
0
                RusEximCommerceml::importDataOffersFile($xml, $service_exchange, $lang_code);
            }
        }
        fn_echo("success\n");
    }
} elseif ($type == 'sale' && $user_data['user_type'] != 'V' && $s_commerceml['exim_1c_check_prices'] != 'Y') {
    if ($mode == 'checkauth') {
        RusEximCommerceml::exportDataCheckauth();
    } elseif ($mode == 'init') {
        RusEximCommerceml::exportDataInit();
    } elseif ($mode == 'file') {
        if (RusEximCommerceml::createImportFile($filename) === false) {
            fn_echo("failure");
            exit;
        }
        if ($s_commerceml['exim_1c_import_statuses'] == 'Y' && strpos($filename, 'orders') == 0) {
            $xml = RusEximCommerceml::getFileCommerceml($filename);
            if ($xml === false) {
                fn_echo("failure");
                exit;
            }
            RusEximCommerceml::importFileOrders($xml, $lang_code);
        }
        fn_echo("success\n");
    } elseif ($mode == 'query') {
        RusEximCommerceml::exportDataOrders($lang_code);
    } elseif ($mode == 'success') {
        fn_echo("success");
    }
}
exit;
Esempio n. 29
0
/**
 * Dispathes the execution control to correct controller
 *
 * @return nothing
 */
function fn_dispatch($controller = '', $mode = '', $action = '', $dispatch_extra = '', $area = AREA)
{
    Debugger::checkpoint('After init');
    $auth = $_SESSION['auth'];
    $controller = empty($controller) ? Registry::get('runtime.controller') : $controller;
    $mode = empty($mode) ? Registry::get('runtime.mode') : $mode;
    $action = empty($action) ? Registry::get('runtime.action') : $action;
    $dispatch_extra = empty($dispatch_extra) ? Registry::get('runtime.dispatch_extra') : $dispatch_extra;
    fn_set_hook('before_dispatch', $controller, $mode, $action, $dispatch_extra, $area);
    $view = Registry::get('view');
    $run_controllers = true;
    $external = false;
    $status = CONTROLLER_STATUS_NO_PAGE;
    // CSRF protection
    if (fn_is_csrf_protection_enabled($auth) && !fn_csrf_validate_request(array('server' => $_SERVER, 'request' => $_REQUEST, 'session' => $_SESSION, 'controller' => $controller, 'mode' => $mode, 'action' => $action, 'dispatch_extra' => $dispatch_extra, 'area' => $area, 'auth' => $auth))) {
        fn_set_notification('E', __('error'), __('text_csrf_attack'));
        fn_redirect(fn_url());
    }
    // If $config['http_host'] was different from the domain name, there was redirection to $config['http_host'] value.
    if (strtolower(Registry::get('config.current_host')) != strtolower(REAL_HOST) && $_SERVER['REQUEST_METHOD'] == 'GET' && !defined('CONSOLE')) {
        if (!empty($_SERVER['REDIRECT_URL'])) {
            $qstring = $_SERVER['REDIRECT_URL'];
        } else {
            if (!empty($_SERVER['REQUEST_URI'])) {
                $qstring = $_SERVER['REQUEST_URI'];
            } else {
                $qstring = Registry::get('config.current_url');
            }
        }
        $curent_path = Registry::get('config.current_path');
        if (!empty($curent_path) && strpos($qstring, $curent_path) === 0) {
            $qstring = substr_replace($qstring, '', 0, fn_strlen($curent_path));
        }
        fn_redirect(Registry::get('config.current_location') . $qstring, false, true);
    }
    $upload_max_filesize = Bootstrap::getIniParam('upload_max_filesize');
    $post_max_size = Bootstrap::getIniParam('post_max_size');
    if (!defined('AJAX_REQUEST') && isset($_SERVER['CONTENT_LENGTH']) && ($_SERVER['CONTENT_LENGTH'] > fn_return_bytes($upload_max_filesize) || $_SERVER['CONTENT_LENGTH'] > fn_return_bytes($post_max_size))) {
        $max_size = fn_return_bytes($upload_max_filesize) < fn_return_bytes($post_max_size) ? $upload_max_filesize : $post_max_size;
        fn_set_notification('E', __('error'), __('text_forbidden_uploaded_file_size', array('[size]' => $max_size)));
        fn_redirect($_SERVER['HTTP_REFERER']);
    }
    // If URL contains session ID, remove it
    if (!defined('AJAX_REQUEST') && !empty($_REQUEST[Session::getName()]) && $_SERVER['REQUEST_METHOD'] == 'GET') {
        fn_redirect(fn_query_remove(Registry::get('config.current_url'), Session::getName()));
    }
    // If demo mode is enabled, check permissions FIX ME - why did we need one more user login check?
    if ($area == 'A') {
        if (Registry::get('config.demo_mode') == true) {
            $run_controllers = fn_check_permissions($controller, $mode, 'demo');
            if ($run_controllers == false) {
                fn_set_notification('W', __('demo_mode'), __('demo_mode_content_text'), 'K', 'demo_mode');
                if (defined('AJAX_REQUEST')) {
                    exit;
                }
                fn_delete_notification('changes_saved');
                $status = CONTROLLER_STATUS_REDIRECT;
                $_REQUEST['redirect_url'] = !empty($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : fn_url('');
            }
        } else {
            $run_controllers = fn_check_permissions($controller, $mode, 'admin', '', $_REQUEST);
            if ($run_controllers == false) {
                if (defined('AJAX_REQUEST')) {
                    $_info = Debugger::isActive() || fn_is_development() ? ' ' . $controller . '.' . $mode : '';
                    fn_set_notification('W', __('warning'), __('access_denied') . $_info);
                    exit;
                }
                $status = CONTROLLER_STATUS_DENIED;
            }
        }
    }
    if ($_SERVER['REQUEST_METHOD'] != 'POST' && !defined('AJAX_REQUEST')) {
        if ($area == 'A' && empty($_REQUEST['keep_location']) && !defined('CONSOLE')) {
            if (!defined('HTTPS') && Registry::get('settings.Security.secure_admin') == 'Y') {
                fn_redirect(Registry::get('config.https_location') . '/' . Registry::get('config.current_url'));
            } elseif (defined('HTTPS') && Registry::get('settings.Security.secure_admin') != 'Y') {
                fn_redirect(Registry::get('config.http_location') . '/' . Registry::get('config.current_url'));
            }
        } elseif ($area == 'C') {
            $secure_controllers = fn_get_secure_controllers();
            // if we are not on https but controller is secure, redirect to https
            if (!defined('HTTPS') && (Registry::get('settings.Security.secure_storefront') == 'full' || isset($secure_controllers[$controller]) && $secure_controllers[$controller] == 'active')) {
                fn_redirect(Registry::get('config.https_location') . '/' . Registry::get('config.current_url'), false, true);
            }
            // if we are on https and the controller is insecure, redirect to http
            if (defined('HTTPS') && Registry::get('settings.Security.secure_storefront') != 'full' && !isset($secure_controllers[$controller]) && Registry::get('settings.Security.keep_https') != 'Y') {
                fn_redirect(Registry::get('config.http_location') . '/' . Registry::get('config.current_url'), false, true);
            }
        }
    }
    LastView::instance()->prepare($_REQUEST);
    $controllers_cascade = array();
    $controllers_list = array('init');
    if ($run_controllers == true) {
        $controllers_list[] = $controller;
        $controllers_list = array_unique($controllers_list);
    }
    foreach ($controllers_list as $ctrl) {
        $core_controllers = fn_init_core_controllers($ctrl);
        list($addon_controllers) = fn_init_addon_controllers($ctrl);
        if (empty($core_controllers) && empty($addon_controllers)) {
            //$controllers_cascade = array(); // FIXME: controllers_cascade contains INIT. We should not clear initiation code.
            $status = CONTROLLER_STATUS_NO_PAGE;
            $run_controllers = false;
            break;
        }
        if (count($core_controllers) + count($addon_controllers) > 1) {
            throw new DeveloperException('Duplicate controller ' . $controller . var_export(array_merge($core_controllers, $addon_controllers), true));
        }
        $core_pre_controllers = fn_init_core_controllers($ctrl, GET_PRE_CONTROLLERS);
        $core_post_controllers = fn_init_core_controllers($ctrl, GET_POST_CONTROLLERS);
        list($addon_pre_controllers) = fn_init_addon_controllers($ctrl, GET_PRE_CONTROLLERS);
        list($addon_post_controllers, $addons) = fn_init_addon_controllers($ctrl, GET_POST_CONTROLLERS);
        // we put addon post-controller to the top of post-controller cascade if current addon serves this request
        if (count($addon_controllers)) {
            $addon_post_controllers = fn_reorder_post_controllers($addon_post_controllers, $addon_controllers[0]);
        }
        $controllers_cascade = array_merge($controllers_cascade, $addon_pre_controllers, $core_pre_controllers, $core_controllers, $addon_controllers, $core_post_controllers, $addon_post_controllers);
        if (empty($controllers_cascade)) {
            throw new DeveloperException("No controllers for: {$ctrl}");
        }
    }
    if ($mode == 'add') {
        $tpl = 'update.tpl';
    } elseif (strpos($mode, 'add_') === 0) {
        $tpl = str_replace('add_', 'update_', $mode) . '.tpl';
    } else {
        $tpl = $mode . '.tpl';
    }
    $view = Registry::get('view');
    if ($view->templateExists('views/' . $controller . '/' . $tpl)) {
        // try to find template in base views
        $view->assign('content_tpl', 'views/' . $controller . '/' . $tpl);
    } elseif (defined('LOADED_ADDON_PATH') && $view->templateExists('addons/' . LOADED_ADDON_PATH . '/views/' . $controller . '/' . $tpl)) {
        // try to find template in addon views
        $view->assign('content_tpl', 'addons/' . LOADED_ADDON_PATH . '/views/' . $controller . '/' . $tpl);
    } elseif (!empty($addons)) {
        // try to find template in addon views that extend base views
        foreach ($addons as $addon => $_v) {
            if ($view->templateExists('addons/' . $addon . '/views/' . $controller . '/' . $tpl)) {
                $view->assign('content_tpl', 'addons/' . $addon . '/views/' . $controller . '/' . $tpl);
                break;
            }
        }
    }
    /**
     * Performs actions after template assignment and before controller run
     *
     * @param string $controller          controller name
     * @param string $mode                controller mode name
     * @param string $area                current working area
     * @param array  $controllers_cascade list of controllers to run
     */
    fn_set_hook('dispatch_assign_template', $controller, $mode, $area, $controllers_cascade);
    foreach ($controllers_cascade as $item) {
        $_res = fn_run_controller($item, $controller, $mode, $action, $dispatch_extra);
        // 0 - status, 1 - url
        $url = !empty($_res[1]) ? $_res[1] : '';
        $external = !empty($_res[2]) ? $_res[2] : false;
        $permanent = !empty($_res[3]) ? $_res[3] : false;
        // Status could be changed only if we allow to run controllers despite of init controller
        if ($run_controllers == true) {
            $status = !empty($_res[0]) ? $_res[0] : CONTROLLER_STATUS_OK;
        }
        if ($status == CONTROLLER_STATUS_OK && !empty($url)) {
            $redirect_url = $url;
        } elseif ($status == CONTROLLER_STATUS_REDIRECT && !empty($url)) {
            $redirect_url = $url;
            break;
        } elseif ($status == CONTROLLER_STATUS_DENIED || $status == CONTROLLER_STATUS_NO_PAGE) {
            break;
        }
    }
    LastView::instance()->init($_REQUEST);
    // In console mode, just stop here
    if (defined('CONSOLE')) {
        $notifications = fn_get_notifications();
        $exit_code = 0;
        foreach ($notifications as $n) {
            fn_echo('[' . $n['title'] . '] ' . $n['message'] . "\n");
            if ($n['type'] == 'E') {
                $exit_code = 1;
            }
        }
        exit($exit_code);
    }
    if (!empty($auth['this_login']) && Registry::ifGet($auth['this_login'], 'N') === 'Y') {
        fn_set_notification('E', __('error'), __(ACCOUNT_TYPE . LOGIN_STATUS_USER_DISABLED));
        $status = CONTROLLER_STATUS_DENIED;
    }
    // [Block manager]
    // block manager is disabled for vendors.
    if (!(fn_allowed_for('MULTIVENDOR') && Registry::get('runtime.company_id') || fn_allowed_for('ULTIMATE') && !Registry::get('runtime.company_id'))) {
        if (fn_check_permissions('block_manager', 'manage', 'admin')) {
            $dynamic_object = SchemesManager::getDynamicObject($_REQUEST['dispatch'], $area, $_REQUEST);
            if (!empty($dynamic_object)) {
                if ($area == 'A' && Registry::get('runtime.mode') != 'add' && !empty($_REQUEST[$dynamic_object['key']])) {
                    $object_id = $_REQUEST[$dynamic_object['key']];
                    $location = Location::instance()->get($dynamic_object['customer_dispatch'], $dynamic_object, CART_LANGUAGE);
                    if (!empty($location) && $location['is_default'] != 1) {
                        $params = array('dynamic_object' => array('object_type' => $dynamic_object['object_type'], 'object_id' => $object_id), $dynamic_object['key'] => $object_id, 'manage_url' => Registry::get('config.current_url'));
                        Registry::set('navigation.tabs.blocks', array('title' => __('layouts'), 'href' => 'block_manager.manage_in_tab?' . http_build_query($params), 'ajax' => true));
                    }
                }
            }
        }
    }
    // [/Block manager]
    // Redirect if controller returned successful/redirect status only
    if (in_array($status, array(CONTROLLER_STATUS_OK, CONTROLLER_STATUS_REDIRECT)) && !empty($_REQUEST['redirect_url']) && !$external) {
        $redirect_url = $_REQUEST['redirect_url'];
    }
    // If controller returns "Redirect" status, check if redirect url exists
    if ($status == CONTROLLER_STATUS_REDIRECT && empty($redirect_url)) {
        $status = CONTROLLER_STATUS_NO_PAGE;
    }
    // In backend show "changes saved" notification
    if ($area == 'A' && $_SERVER['REQUEST_METHOD'] == 'POST' && in_array($status, array(CONTROLLER_STATUS_OK, CONTROLLER_STATUS_REDIRECT))) {
        if (strpos($mode, 'update') !== false && $mode != 'update_status' && $mode != 'update_mode' && !fn_notification_exists('extra', 'demo_mode') && !fn_notification_exists('type', 'E')) {
            fn_set_notification('N', __('notice'), __('text_changes_saved'), 'I', 'changes_saved');
        }
    }
    // Attach params and redirect if needed
    if (in_array($status, array(CONTROLLER_STATUS_OK, CONTROLLER_STATUS_REDIRECT)) && !empty($redirect_url)) {
        if (!isset($_REQUEST['return_to_list'])) {
            $params = array('page', 'selected_section', 'active_tab');
            $url_params = array();
            foreach ($params as $param) {
                if (!empty($_REQUEST[$param])) {
                    $url_params[$param] = $_REQUEST[$param];
                }
            }
            if (!empty($url_params)) {
                $redirect_url = fn_link_attach($redirect_url, http_build_query($url_params));
            }
        }
        if (!isset($external)) {
            $external = false;
        }
        if (!isset($permanent)) {
            $permanent = false;
        }
        fn_redirect($redirect_url, $external, $permanent);
    }
    if (!$view->getTemplateVars('content_tpl') && $status == CONTROLLER_STATUS_OK) {
        // FIXME
        $status = CONTROLLER_STATUS_NO_PAGE;
    }
    if ($status != CONTROLLER_STATUS_OK) {
        if ($status == CONTROLLER_STATUS_NO_PAGE) {
            if ($area == 'A' && empty($auth['user_id'])) {
                // If admin is not logged in redirect to login page from not found page
                fn_set_notification('W', __('page_not_found'), __('page_not_found_text'));
                fn_redirect("auth.login_form");
            }
            header(' ', true, 404);
        }
        $view->assign('exception_status', $status);
        if ($area == 'A') {
            $view->assign('content_tpl', 'exception.tpl');
            // for backend only
        }
        if ($status == CONTROLLER_STATUS_DENIED) {
            $view->assign('page_title', __('access_denied'));
        } elseif ($status == CONTROLLER_STATUS_NO_PAGE) {
            $view->assign('page_title', __('page_not_found'));
        }
    }
    fn_set_hook('dispatch_before_display');
    Debugger::checkpoint('Before TPL');
    // Pass current URL to ajax response only if we render whole page
    if (defined('AJAX_REQUEST') && Registry::get('runtime.root_template') == 'index.tpl') {
        Registry::get('ajax')->assign('current_url', fn_url(Registry::get('config.current_url'), $area, 'current'));
    }
    Registry::get('view')->display(Registry::get('runtime.root_template'));
    Debugger::checkpoint('After TPL');
    Debugger::display();
    fn_set_hook('complete');
    if (defined('AJAX_REQUEST')) {
        // HHVM workaround. Destroy Ajax object manually if it has been created.
        $ajax = Registry::get('ajax');
        $ajax = null;
    }
    exit;
    // stop execution
}
Esempio n. 30
0
 }
 if (is_array($data)) {
     // Ger newsletter data
     $newsletter_data = array();
     foreach ($data['send_ids'] as $newsletter_id) {
         $n = array();
         foreach (fn_get_translation_languages() as $lang_code => $v) {
             $n[$lang_code] = fn_get_newsletter_data($newsletter_id, $lang_code);
             $n[$lang_code]['body_html'] = fn_rewrite_links($n[$lang_code]['body_html'], $newsletter_id, $n[$lang_code]['campaign_id']);
         }
         $newsletter_data[] = $n;
     }
     foreach (array_splice($data['recipients'], 0, Registry::get('addons.newsletters.newsletters_per_pass')) as $subscriber) {
         foreach ($newsletter_data as $newsletter) {
             $body = fn_render_newsletter($newsletter[$subscriber['lang_code']]['body_html'], $subscriber);
             fn_echo(__('sending_email_to', array('[email]' => $subscriber['email'])) . '<br />');
             if (!empty($newsletter[$subscriber['lang_code']]['newsletter_multiple'])) {
                 $subjects = explode("\n", $newsletter[$subscriber['lang_code']]['newsletter_multiple']);
                 $newsletter[$subscriber['lang_code']]['newsletter'] = trim($subjects[rand(0, count($subjects) - 1)]);
             }
             fn_send_newsletter($subscriber['email'], $subscriber, $newsletter[$subscriber['lang_code']]['newsletter'], $body, array(), $subscriber['lang_code'], $subscriber['reply_to']);
         }
     }
     if (!empty($data['recipients'])) {
         fn_set_storage_data('newsletters_batch_' . $_REQUEST['key'], serialize($data));
         return array(CONTROLLER_STATUS_OK, 'newsletters.batch_send?key=' . $_REQUEST['key']);
     } else {
         fn_set_storage_data('newsletters_batch_' . $_REQUEST['key']);
         fn_set_notification('N', __('notice'), __('text_newsletter_sent'));
         $suffix = sizeof($data['send_ids']) == 1 ? ".update?newsletter_id=" . array_pop($data['send_ids']) : '.manage';
         return array(CONTROLLER_STATUS_OK, 'newsletters' . $suffix);