public function execute()
 {
     if (!$this->getUser()->getRights('shop', 'settings')) {
         throw new waRightsException(_w('Access denied'));
     }
     $values = waRequest::post('values');
     if (!$values || !is_array($values)) {
         $values = array();
         $values[] = array('name' => 'test', 'value' => 0);
     }
     $type = null;
     $value_type = waRequest::post('value_type', waRequest::TYPE_STRING, shopFeatureModel::TYPE_VARCHAR);
     if (strpos($value_type, '.')) {
         list($value_type, $type) = explode('.', $value_type, 2);
     }
     foreach ($values as $data) {
         switch ($value_type) {
             case shopFeatureModel::TYPE_DIMENSION:
                 $data['type'] = $type;
                 $this->response[] = shopDimension::getControl($data['name'], $data);
                 break;
             case shopFeatureModel::TYPE_BOOLEAN:
                 $this->response[] = waHtmlControl::getControl(waHtmlControl::CHECKBOX, $data['name'], $data);
                 break;
             default:
                 $this->response[] = waHtmlControl::getControl(waHtmlControl::INPUT, $data['name'], $data);
                 break;
         }
     }
 }
Ejemplo n.º 2
0
 /**
  *
  * @return waHtmlControl
  */
 private static function getInstance()
 {
     if (!self::$instance instanceof self) {
         self::$instance = new self();
     }
     return self::$instance;
 }
Ejemplo n.º 3
0
 protected function getCustomFields($id, waPayment $plugin)
 {
     $contact = $this->getContact();
     $order_params = $this->getSessionData('params', array());
     $payment_params = isset($order_params['payment']) ? $order_params['payment'] : array();
     foreach ($payment_params as $k => $v) {
         $order_params['payment_params_' . $k] = $v;
     }
     $order = new waOrder(array('contact' => $contact, 'contact_id' => $contact ? $contact->getId() : null, 'params' => $order_params));
     $custom_fields = $plugin->customFields($order);
     if (!$custom_fields) {
         return $custom_fields;
     }
     $params = array();
     $params['namespace'] = 'payment_' . $id;
     $params['title_wrapper'] = '%s';
     $params['description_wrapper'] = '<br><span class="hint">%s</span>';
     $params['control_wrapper'] = '<div class="wa-name">%s</div><div class="wa-value">%s %s</div>';
     $selected = $id == $this->getSessionData('payment');
     $controls = array();
     foreach ($custom_fields as $name => $row) {
         $row = array_merge($row, $params);
         if ($selected && isset($payment_params[$name])) {
             $row['value'] = $payment_params[$name];
         }
         $controls[$name] = waHtmlControl::getControl($row['control_type'], $name, $row);
     }
     return $controls;
 }
Ejemplo n.º 4
0
 public function execute()
 {
     $controls = array(_w('Enable PHP error log') => waHtmlControl::getControl(waHtmlControl::CHECKBOX, 'settings[php_log]', array('value' => 1, 'checked' => logsHelper::getPhpLogSetting(), 'description' => '<span class="hint">' . _w('PHP error messages will be saved to file <tt>wa-log/<b>php.log</b></tt>.') . '<br><br>' . '<b>' . _w('Enable this setting if you cannot, or do not want to, edit files on your server.') . '</b><br>' . sprintf(_w('Otherwise add the following lines to your file <tt class>%s</tt>:'), wa()->getConfig()->getRootPath() . '/<b>.htaccess</b>') . '<br><br>' . '<tt>php_flag display_errors Off<br>
                     php_value error_reporting 2147483647<br>
                     php_flag log_errors On<br>
                     php_value error_log ./wa-log/php.log</tt>' . '</span>')));
     $this->view->assign('controls', $controls);
 }
 public function getControls($params = array())
 {
     $controls = array();
     $settings_config = $this->getSettingsConfig();
     foreach ($settings_config as $name => $row) {
         $row = array_merge($row, $params);
         $row['value'] = $this->getSettings($name);
         if (isset($row['control_type'])) {
             $controls[$name] = waHtmlControl::getControl($row['control_type'], $name, $row);
         }
     }
     return $controls;
 }
Ejemplo n.º 6
0
 /**
  * @param array $params Control items params (see waHtmlControl::getControl for details)
  * @return string[string] Html code of control
  */
 public function getControls($params = array())
 {
     $controls = array();
     $settings_config = $this->getSettingsConfig();
     foreach ($settings_config as $name => $row) {
         if (!is_array($row)) {
             continue;
         }
         if (!empty($params['subject']) && !empty($row['subject']) && !in_array($row['subject'], (array) $params['subject'])) {
             continue;
         }
         $row = array_merge($row, $params);
         $row['value'] = $this->getSettings($name);
         if (!empty($row['control_type'])) {
             $controls[$name] = waHtmlControl::getControl($row['control_type'], $name, $row);
         }
     }
     return $controls;
 }
    public function getControls()
    {
        $controls = array();
        $params = array();
        $params['title_wrapper'] = '<div class="name">%s</div>';
        $params['description_wrapper'] = '<br><span class="hint">%s</span><br>';
        $params['control_separator'] = '</div><br><div class="value no-shift">';
        $params['control_wrapper'] = <<<HTML
<div class="field">
%s
<div class="value no-shift">
\t%s
\t%s
</div>
</div>
HTML;
        foreach ($this->options as $field => $properties) {
            $controls[$field] = waHtmlControl::getControl($properties['settings_html_function'], $field, array_merge($properties, $params));
        }
        return $controls;
    }
 public function payment($payment_form_data, $order_data, $auto_submit = false)
 {
     if ($order_data['currency_id'] != 'RUB') {
         return array('type' => 'error', 'data' => _w('Оплата на сайте Яндекс.Денег производится в только в рублях (RUB) и в данный момент невозможна, так как эта валюта не определена в настройках.'));
     }
     $hidden_fields = array('scid' => $this->scid, 'ShopID' => $this->ShopID, 'CustomerNumber' => $order_data['customer_contact_id'], 'customerNumber' => $order_data['customer_contact_id'], 'orderNumber' => $this->app_id . '_' . $this->merchant_id . '_' . $order_data['order_id'], 'Sum' => number_format($order_data['amount'], 2, '.', ''));
     $fields = array();
     if ($this->payment_mode) {
         switch ($this->payment_mode) {
             case 'customer':
                 $ways = self::settingsPaymentOptions();
                 $options = array('title' => 'Способ оплаты', 'description' => '', 'options' => array());
                 foreach ($ways as $way => $name) {
                     if (isset($this->paymentType[$way]) && !empty($this->paymentType[$way])) {
                         $options['options'][$way] = $name;
                     }
                 }
                 if (count($options['options']) == 1) {
                     $hidden_fields['paymentType'] = key($options['options']);
                 } elseif (count($options['options']) > 1) {
                     $options['value'] = key($options['options']);
                     $fields['paymentType'] = waHtmlControl::getControl(waHtmlControl::SELECT, 'paymentType', $options);
                     $auto_submit = false;
                 }
                 break;
             default:
                 $hidden_fields['paymentType'] = $this->payment_mode;
                 break;
         }
     }
     $view = wa()->getView();
     $view->assign('hidden_fields', $hidden_fields);
     $view->assign('fields', $fields);
     $view->assign('form_url', $this->getEndpointUrl());
     $view->assign('auto_submit', $auto_submit);
     return $view->fetch($this->path . '/templates/payment.html');
 }
Ejemplo n.º 9
0
 /**
  * Returns array of payment methods.
  *
  * @param array $order Array of order data whose parameters must be pre-filled in payment method's custom fields.
  * @return array
  */
 public static function getPaymentMethods($order = array())
 {
     $plugin_model = new shopPluginModel();
     $methods = $plugin_model->listPlugins(shopPluginModel::TYPE_PAYMENT);
     $order_params = $order ? $order['params'] : array();
     $order = new waOrder(array('contact_id' => $order ? $order['contact_id'] : null, 'contact' => $order ? new waContact($order['contact_id']) : null, 'params' => $order_params));
     foreach ($methods as $m_id => $m) {
         $plugin = shopPayment::getPlugin($m['plugin'], $m['id']);
         $custom_fields = $plugin->customFields($order);
         if ($custom_fields) {
             $params = array();
             $params['namespace'] = 'payment_' . $m['id'];
             $params['title_wrapper'] = '%s';
             $params['description_wrapper'] = '<br><span class="hint">%s</span>';
             $params['control_wrapper'] = '<div class="name">%s</div><div class="value">%s %s</div>';
             $controls = array();
             foreach ($custom_fields as $name => $row) {
                 $row = array_merge($row, $params);
                 if (!empty($order_params['payment_id']) && $m['id'] == $order_params['payment_id'] && isset($order_params['payment_params_' . $name])) {
                     $row['value'] = $order_params['payment_params_' . $name];
                 }
                 if (!empty($row['control_type'])) {
                     $controls[$name] = waHtmlControl::getControl($row['control_type'], $name, $row);
                 }
             }
             if ($controls) {
                 $custom_html = '';
                 foreach ($controls as $c) {
                     $custom_html .= '<div class="field">' . $c . '</div>';
                 }
                 $methods[$m_id]['custom_html'] = $custom_html;
             }
         }
     }
     return $methods;
 }
Ejemplo n.º 10
0
    public function getCsvmapControl($name, $params = array())
    {
        $targets = ifset($params['options'], array());
        ifset($params['value'], array());
        $html = '';
        if (!empty($params['validate'])) {
            $html .= $this->validateSourceFields($params['validate']);
        }
        $title = _w('CSV columns');
        $description = ifempty($params['description'], _w('Properties'));
        $html .= <<<HTML
<table class="zebra">
  <thead>
    <tr class="white heading small">
        <th>{$title}</th>
        <th>&nbsp;</th>
        <th>{$description}</th>
    </tr>
  </thead>
HTML;
        $default = array('value' => -1, 'title' => '', 'description' => '', 'title_wrapper' => '%s', 'description_wrapper' => '<span class="hint">(%s)</span>', 'control_wrapper' => '
<tr>
    <td>%2$s</td>
    <td>→</td>
    <td>%1$s%3$s</td>
</tr>', 'translate' => false, 'options' => array(-1 => array('value' => -1, 'title' => sprintf('-- %s --', _w('No associated column')), 'style' => 'font-style:italic;')));
        waHtmlControl::addNamespace($params, $name);
        $params = array_merge($params, $default);
        if ($this->header) {
            foreach ($this->header as $id => $column) {
                $params['options'][] = array('value' => $id, 'title' => $column, 'description' => sprintf(_w('CSV columns numbers %s'), implode(', ', explode(':', $id))));
            }
        }
        $group = null;
        while ($target = array_shift($targets)) {
            if (!isset($target['group'])) {
                $target['group'] = array('title' => '');
            } elseif (!is_array($target['group']) && $target['group']) {
                $target['group'] = array('title' => $target['group']);
            }
            $params_target = array_merge($params, array('title' => $target['title'], 'description' => ifset($target['description']), 'control' => ifset($target['control'])));
            if ($target['group'] && !$group || $target['group']['title'] !== $group) {
                if ($group) {
                    $html .= '</tbody>';
                }
                $group = $target['group']['title'];
                $group_name = htmlentities(ifset($target['group']['title'], ' '), ENT_NOQUOTES, waHtmlControl::$default_charset);
                $class = '';
                if (!empty($target['group']['class'])) {
                    $class = sprintf(' class="%s"', htmlentities($target['group']['class'], ENT_QUOTES, waHtmlControl::$default_charset));
                }
                $html .= <<<HTML
<tbody {$class}><tr><th colspan="3">{$group_name}</th></tr>
HTML;
            }
            if (empty($params_target['control'])) {
                self::findSimilar($params_target, null, array('similar' => false));
            }
            $control = waHtmlControl::getControl(waHtmlControl::SELECT, $target['value'], $params_target);
            if (!empty($params_target['control'])) {
                $_type = ifempty($params_target['control']['control'], waHtmlControl::INPUT);
                $_control = waHtmlControl::getControl($_type, $target['value'], ifempty($params_target['control']['params'], array()));
                $control = preg_replace('@</td></tr>$@', $_control, $control) . '</td></tr>';
            }
            $html .= $control;
        }
        if ($group) {
            $html .= '</tbody>';
        }
        $html .= '</table>';
        return $html;
    }
Ejemplo n.º 11
0
 public static function getControl($name, $params = array())
 {
     $control = '';
     $instance = self::getInstance();
     $type = isset($params['type']) ? $params['type'] : false;
     if ($type && ($d = $instance->getDimension($type))) {
         $unit = '';
         if (!isset($params['value'])) {
             $params['value'] = array();
         }
         $params['value'] = array_merge(array('value' => '0', 'unit' => $unit), $params['value']);
         waHtmlControl::addNamespace($params, $name);
         $control .= waHtmlControl::getControl(waHtmlControl::INPUT, 'value', $r = array_merge($params, array('value' => $params['value']['value'])));
         if ($params['options'] = self::getUnits($type)) {
             unset($params['title']);
             $control .= waHtmlControl::getControl(waHtmlControl::SELECT, 'unit', $t = array_merge($params, array('value' => $params['value']['unit'])));
         }
     } else {
         $control .= '—';
     }
     return $control;
 }
Ejemplo n.º 12
0
 /**
  * Get control html code
  *
  * @see waHtmlControl#getControl()
  * @throws waException
  * @param string $type Type of control (use standard or try to found registered control types)
  * @param string $name
  * @param array $params
  * @return string
  */
 public function getControl($type, $name, $params = array())
 {
     if (isset($this->settingsParams) && isset($this->settingsParams[$name]) || isset($this->settings[$name]) || true) {
         $params['value'] = $this[$name];
         $params = array_merge($this->settingsParams[$name], $params);
         return waHtmlControl::getControl($type, $name, $params);
     } else {
         throw new waException("undefined setting {$name}");
     }
 }
 protected function save(waRequestFile $file)
 {
     $path = wa()->getTempPath('csv/upload/');
     waFiles::create($path);
     $original_name = $file->name;
     if ($name = tempnam($path, 'csv')) {
         unlink($name);
         if (($ext = pathinfo($original_name, PATHINFO_EXTENSION)) && preg_match('/^\\w+$/', $ext)) {
             $name .= '.' . $ext;
         }
         $file->moveTo($name);
     } else {
         throw new waException(_w('Error file upload'));
     }
     $encoding = waRequest::post('encoding', 'UTF-8');
     $delimiter = waRequest::post('delimiter');
     try {
         $this->reader = new shopCsvReader($name, $delimiter, $encoding);
         $delimiters = array(';', ',', 'tab');
         $used_delimiters = array($delimiter);
         while (count($this->reader->header()) < 2 && ($delimiter = array_diff($delimiters, $used_delimiters))) {
             $delimiter = reset($delimiter);
             $used_delimiters[] = $delimiter;
             $this->reader->delete();
             $this->reader = new shopCsvReader($name, $delimiter, $encoding);
         }
         if (count($this->reader->header()) < 2) {
             $this->reader->delete();
             $delimiter = waRequest::post('delimiter');
             $this->reader = new shopCsvReader($name, $delimiter, $encoding);
         }
         $encodings = array('UTF-8', 'Windows-1251', 'ISO-8859-1');
         $used_encodings = array($encoding);
         while (in_array(false, (array) $this->reader->header(), true) && ($encoding = array_diff($encodings, $used_encodings))) {
             $encoding = reset($encoding);
             $used_encodings[] = $encoding;
             $this->reader->delete();
             $this->reader = new shopCsvReader($name, $delimiter, $encoding);
         }
         if (in_array(false, (array) $this->reader->header(), true) || count($this->reader->header()) < 2) {
             throw new waException($this->reader->header() ? _w('No data columns were located in the uploaded file. Make sure right separator and encoding were chosen for this upload.') : _w('Unsupported CSV file structure'));
         }
         $profile_helper = new shopImportexportHelper('csv:product:import');
         $profile = $profile_helper->getConfig();
         $profile['config'] += array('encoding' => $encoding, 'delimiter' => ';', 'map' => array());
         $params = array();
         $params['id'] = 'csvproducts';
         $params['title_wrapper'] = '%s';
         $params['description_wrapper'] = '<br><span class="hint">%s</span>';
         $params['control_wrapper'] = '<div class="field"><div class="name">%s</div><div class="value">%s %s</div></div>';
         $params['options'] = $this->options();
         $control = true ? shopCsvReader::TABLE_CONTROL : shopCsvReader::MAP_CONTROL;
         switch ($control) {
             case shopCsvReader::TABLE_CONTROL:
                 $params['preview'] = 50;
                 $params['columns'] = array(array('shopCsvProductviewController', 'tableRowHandler'), '&nbsp;');
                 $params['control_wrapper'] = '<div class="field"><div class="value" style="overflow-x:auto;margin-left:0;">%s %s</div></div>';
                 $params['title_wrapper'] = false;
                 $params['row_handler'] = 'csv_product/rows/';
                 $params['row_handler_string'] = true;
                 $params['autocomplete_handler'] = 'csv_product/autocomplete/reset/';
                 break;
             case shopCsvReader::MAP_CONTROL:
             default:
                 $control = shopCsvReader::MAP_CONTROL;
                 break;
         }
         return array('name' => htmlentities(basename($this->reader->file()), ENT_QUOTES, 'utf-8'), 'original_name' => htmlentities(basename($original_name), ENT_QUOTES, 'utf-8'), 'size' => waFiles::formatSize($this->reader->size()), 'original_size' => waFiles::formatSize($file->size), 'controls' => waHtmlControl::getControl($control, 'csv_map', $params), 'control' => $control, 'header' => $this->reader->header(), 'columns_offset' => count(ifset($params['columns'], array())), 'delimiter' => $delimiter, 'encoding' => $encoding);
     } catch (waException $ex) {
         if ($this->reader) {
             $this->reader->delete(true);
         }
         throw $ex;
     }
 }
    public static function controlReplaceMap($name, $params = array())
    {
        foreach ($params as $field => $param) {
            if (preg_match('/(wrapper|title|description)/', $field)) {
                unset($params[$field]);
            }
        }
        if (!isset($params['value']) || !is_array($params['value'])) {
            $params['value'] = array();
        }
        waHtmlControl::addNamespace($params, $name);
        $columns = array('search' => waHtmlControl::INPUT, 'replace' => waHtmlControl::INPUT, 'is_regexp' => waHtmlControl::CHECKBOX);
        if (!empty($params['value']) && isset($params['value']['search'])) {
            foreach ($params['value']['search'] as $id => $value) {
                if (empty($value)) {
                    foreach ($columns as $column => $type) {
                        if (isset($params['value'][$column][$id])) {
                            unset($params['value'][$column][$id]);
                        }
                    }
                }
            }
        } else {
            $params['value'] = array();
        }
        if (empty($params['value']['search']) || !count($params['value']['search'])) {
            foreach ($columns as $column => $type) {
                $params['value'][$column][] = false;
            }
        }
        $strings = array('search' => _wp('Search for'), 'replace' => _wp('Replace with'), 'regexp' => _wp('Reg Exp<br /> (advanced)'), 'remove' => _wp('Remove the rule'), 'add' => _wp('Add a rule'));
        $control = <<<HTML

<script>
function blog_import_html_control_replace_add(element, eventObject) {
    var row = \$(element).parents('table').find('tbody tr:last');
    if(row){
    \trow = row.clone().insertAfter(row);
    \trow.find(':text').val('');
    \trow.find(':checked').attr('checked',false);
    }
    return false;
}
function blog_import_html_control_replace_remove(element, eventObject) {
var row = \$(element).parents('tr');
    if(\$(element).parents('table').find('tbody tr').length > 1) {
    \trow.remove();
    } else {
    \trow.find(':text').val('');
    \trow.find(':checked').attr('checked',false);
    }
    return false;
}
</script>
<table class="zebra">
\t<thead>
\t\t<tr>
        \t<td>{$strings['search']}</td>
        \t<td>{$strings['replace']}</td>
        \t<td>{$strings['regexp']}</td>
\t\t\t<td>&nbsp;</td>
        </tr>
\t</thead>
\t<tfoot>
\t\t<tr>
\t\t\t<td colspan="4">
\t\t\t\t<a href="#" class="inline-link" onClick="return blog_import_html_control_replace_add(this,event)"><i class="icon16 add"></i><b><i>{$strings['add']}</i></b></a>
\t\t\t</td>
\t\t</tr>
\t</tfoot>
\t<tbody>
HTML;
        foreach ($params['value']['search'] as $id => $value) {
            $control .= "\n\t\t<tr>";
            foreach ($columns as $field => $type) {
                $column_params = $params;
                $column_params['value'] = isset($params['value'][$field][$id]) ? $params['value'][$field][$id] : null;
                waHtmlControl::addNamespace($column_params, $field);
                $control .= "\n\t\t\t<td class='align-center'>" . waHtmlControl::getControl($type, '', $column_params) . "</td>";
            }
            $control .= <<<HTML

\t\t\t<td>
\t\t\t\t<a href="#" class="inline-link" onClick="return blog_import_html_control_replace_remove(this,event)"><i class="icon16 delete" title="{$strings['remove']}"></i></a>
\t\t\t</td>
HTML;
            $control .= "\n\t\t</tr>";
        }
        $control .= '</tbody></table>';
        return $control;
    }
 public static function settingGatewayCurrency($name, $params = array())
 {
     $default = array('title_wrapper' => false, 'description_wrapper' => false, 'control_wrapper' => '%s%s%s');
     $params = array_merge($params, $default);
     $options = array();
     if (extension_loaded('curl') && ($ch = curl_init())) {
         $data = array();
         $data['Language'] = 'ru';
         if (!empty($params['instance']) && $params['instance'] instanceof self) {
             $data['MerchantLogin'] = $params['instance']->merchant_login;
             if ($params['instance']->testmode) {
                 $url = 'http://test.robokassa.ru/Webservice/Service.asmx/GetCurrencies?';
             } else {
                 $url = 'http://merchant.roboxchange.com/WebService/Service.asmx/GetCurrencies?';
             }
         }
         if (empty($data['MerchantLogin'])) {
             $data['MerchantLogin'] = '******';
             $url = 'http://test.robokassa.ru/Webservice/Service.asmx/GetCurrencies?';
         }
         $url .= 'MerchantLogin='******'MerchantLogin'];
         $url .= '&Language=' . $data['Language'];
         curl_setopt($ch, CURLOPT_URL, $url);
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
         if ((version_compare(PHP_VERSION, '5.4', '>=') || !ini_get('safe_mode')) && !ini_get('open_basedir')) {
             //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
         }
         $http_response = curl_exec($ch);
         if (!$http_response) {
             self::log(preg_replace('/payment$/', '', strtolower(__CLASS__)), array('error' => curl_errno($ch) . ':' . curl_error($ch)));
             curl_close($ch);
             return $default;
         } else {
             if ($content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE)) {
                 if (preg_match('/charset=[\'"]?([a-z\\-0-9]+)[\'"]?/i', $content_type, $matches)) {
                     $charset = strtolower($matches[1]);
                     if (!in_array($charset, array('utf-8', 'utf8'))) {
                         $http_response = iconv($charset, 'utf-8', $http_response);
                     }
                 }
             }
             curl_close($ch);
             if ($xml = @simplexml_load_string($http_response)) {
                 if ($code = (int) $xml->Result->Code) {
                     self::log(preg_replace('/payment$/', '', strtolower(__CLASS__)), array('url' => $url, 'error' => $code . ': ' . (string) $xml->Result->Description, 'xml' => $http_response));
                     $options[] = array('title' => (string) $xml->Result->Description, 'value' => null, 'group' => 'Ошибка получения списка валют');
                 } else {
                     foreach ($xml->Groups as $xml_group) {
                         foreach ($xml_group->Group as $xml_group_item) {
                             foreach ($xml_group_item->Items as $xml_items) {
                                 foreach ($xml_items as $xml_item) {
                                     $options[] = array('title' => (string) $xml_group_item['Description'] . ' — ' . (string) $xml_item['Name'], 'value' => (string) $xml_item['Label'], 'group' => (string) $xml_group_item['Code']);
                                 }
                             }
                         }
                     }
                 }
             } else {
                 self::log(preg_replace('/payment$/', '', strtolower(__CLASS__)), array('error' => 'Invalid service response', 'xml' => $http_response));
             }
         }
     } else {
         //TODO
     }
     $params['options'] = $options;
     return waHtmlControl::getControl(waHtmlControl::SELECT, $name, $params);
 }
 /**
  * Формирует HTML-код пользовательского элемента управления с идентификатором 'RegionRatesControl'.
  *
  * @see waHtmlControl::getControl()
  * @param string $name Идентификатор элемента управления
  * @param array $params Параметры элемента управления
  * @return string
  */
 public static function settingRegionRatesControl($name, $params = array())
 {
     foreach ($params as $field => $param) {
         if (strpos($field, 'wrapper')) {
             unset($params[$field]);
         }
     }
     if (empty($params['value']) || !is_array($params['value'])) {
         $params['value'] = array();
     }
     $control = '';
     waHtmlControl::addNamespace($params, $name);
     $rm = new waRegionModel();
     if ($regions = $rm->getByCountry('rus')) {
         $control .= "<table class=\"zebra\"><thead>";
         $control .= "<tr class=\"gridsheader\"><th colspan=\"3\">";
         $control .= htmlentities('Распределите регионы по тарифным поясам Почты России', ENT_QUOTES, 'utf-8');
         $control .= "</th>";
         $control .= "<th>Только авиа</th>";
         $control .= "</th></tr></thead><tbody>";
         $params['control_wrapper'] = '<tr><td>%s</td><td>&rarr;</td><td>%s</td><td>%s</td></tr>';
         $params['title_wrapper'] = '%s';
         $params['description_wrapper'] = '%s';
         $params['options'] = array();
         $params['options'][0] = _wp('*** пояс не выбран ***');
         for ($region = 1; $region <= 5; $region++) {
             $params['options'][$region] = sprintf(_wp('Пояс %d'), $region);
         }
         $avia_params = $params;
         $avia_params['control_wrapper'] = '%2$s';
         $avia_params['description_wrapper'] = false;
         $avia_params['title_wrapper'] = false;
         foreach ($regions as $region) {
             $name = 'zone';
             $id = $region['code'];
             if (empty($params['value'][$id])) {
                 $params['value'][$id] = array();
             }
             $params['value'][$id] = array_merge(array($name => 0, 'avia_only' => false), $params['value'][$id]);
             $region_params = $params;
             waHtmlControl::addNamespace($region_params, $id);
             $avia_params = array('namespace' => $region_params['namespace'], 'control_wrapper' => '%2$s', 'description_wrapper' => false, 'title_wrapper' => false, 'value' => $params['value'][$id]['avia_only']);
             $region_params['value'] = max(0, min(5, $params['value'][$id][$name]));
             $region_params['description'] = waHtmlControl::getControl(waHtmlControl::CHECKBOX, 'avia_only', $avia_params);
             $region_params['title'] = $region['name'];
             if ($region['code']) {
                 $region_params['title'] .= " ({$region['code']})";
             }
             $control .= waHtmlControl::getControl(waHtmlControl::SELECT, 'zone', $region_params);
         }
         $control .= "</tbody>";
         $control .= "</table>";
     } else {
         $control .= 'Для Российской Федерации не указаны регионы. Добавьте хотя бы один регион в настройках стран и регионов.';
     }
     return $control;
 }
    public function getGuide($params = array())
    {
        $controls = array();
        $default = array('instance' => &$this, 'title_wrapper' => '%s', 'description_wrapper' => '<br><span class="hint">%s</span>', 'translate' => array(&$this, '_w'), 'readonly' => true, 'control_wrapper' => '
<div class="field">
    <div class="name">%s</div>
    <div class="value">%s%s</div>
</div>
');
        $options = ifempty($params['options'], array());
        $values = ifempty($params['value'], array());
        unset($params['options']);
        unset($params['value']);
        if (isset($params['namespace'])) {
            unset($params['namespace']);
        }
        $params = array_merge($default, $params);
        ifempty($params['class'], array());
        if (!is_array($params['class'])) {
            $params['class'] = array($params['class']);
        }
        $params['class'][] = 'long';
        $replace = array('%RELAY_URL%' => $this->getRelayUrl(), '%HTTP_RELAY_URL%' => $this->getRelayUrl(false), '%HTTPS_RELAY_URL%' => $this->getRelayUrl(true), '%APP_ID%' => $this->app_id, '%MERCHANT_ID%' => $this->merchant_id);
        foreach ($this->guide() as $name => $row) {
            if (is_array($row)) {
                if (isset($row['class']) && !is_array($row['class'])) {
                    $row['class'] = empty($row['class']) ? array() : array($row['class']);
                }
                if (isset($row['class'])) {
                    $params['class'] = array_merge(array_values($row['class']), array_values($params['class']));
                }
                $row = array_merge($row, $params);
                if (isset($options[$name])) {
                    $row['options'] = $options[$name];
                }
                if (isset($values[$name])) {
                    $row['value'] = $values[$name];
                }
                $row['value'] = str_replace(array_keys($replace), array_values($replace), $row['value']);
                $controls[$name] = waHtmlControl::getControl(ifempty($row['control_type'], waHtmlControl::INPUT), false, $row);
            } else {
                $controls[$name] = sprintf($params['control_wrapper'], '', '', $row);
            }
        }
        return implode("\n", $controls);
    }
Ejemplo n.º 18
0
    /**
     *
     * Получение массива элементов настроек
     * @param array [string]mixed $params
     * @param array [string]string $params['namespace']
     * @param array [string]string $params['value']'
     * @return string
     */
    public function getSettingsHTML($params = array())
    {
        $this->initControls();
        $controls = array();
        $default = array('instance' => &$this, 'title_wrapper' => '%s', 'description_wrapper' => '<br><span class="hint">%s</span>', 'translate' => array(&$this, '_w'), 'control_wrapper' => '
<div class="field">
    <div class="name">%s</div>
    <div class="value">%s%s</div>
</div>
');
        $options = ifempty($params['options'], array());
        unset($params['options']);
        $params = array_merge($default, $params);
        foreach ($this->config() as $name => $row) {
            $row = array_merge($row, $params);
            $row['value'] = $this->getSettings($name);
            if (isset($options[$name])) {
                $row['options'] = $options[$name];
            }
            if (isset($params['value']) && isset($params['value'][$name])) {
                $row['value'] = $params['value'][$name];
            }
            if (!empty($row['control_type'])) {
                $controls[$name] = waHtmlControl::getControl($row['control_type'], $name, $row);
            }
        }
        return implode("\n", $controls);
    }
 public static function settingGatewayCurrency($name, $params = array())
 {
     $default = array('title_wrapper' => false, 'description_wrapper' => false, 'control_wrapper' => '%s%s%s');
     $params = array_merge($params, $default);
     $options = array();
     $data = array();
     $data['Language'] = 'ru';
     if (!empty($params['instance']) && $params['instance'] instanceof self) {
         $data['MerchantLogin'] = $params['instance']->merchant_login;
         $test = !!$params['instance']->testmode;
     } else {
         $test = false;
     }
     if ($test || empty($data['MerchantLogin'])) {
         $url = 'http://test.robokassa.ru/Webservice/Service.asmx/GetCurrencies?';
     } else {
         $url = 'http://merchant.roboxchange.com/WebService/Service.asmx/GetCurrencies?';
     }
     if (empty($data['MerchantLogin'])) {
         $data['MerchantLogin'] = '******';
     }
     $url .= 'MerchantLogin='******'MerchantLogin'];
     $url .= '&Language=' . $data['Language'];
     if (extension_loaded('curl') && ($ch = @curl_init())) {
         curl_setopt($ch, CURLOPT_URL, $url);
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
         if ((version_compare(PHP_VERSION, '5.4', '>=') || !ini_get('safe_mode')) && !ini_get('open_basedir')) {
             //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
         }
         $http_response = curl_exec($ch);
         if (!$http_response) {
             self::log(preg_replace('/payment$/', '', strtolower(__CLASS__)), array('error' => curl_errno($ch) . ':' . curl_error($ch)));
             curl_close($ch);
         } else {
             if ($content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE)) {
                 if (preg_match('/charset=[\'"]?([a-z\\-0-9]+)[\'"]?/i', $content_type, $matches)) {
                     $charset = strtolower($matches[1]);
                     if (!in_array($charset, array('utf-8', 'utf8'))) {
                         $http_response = iconv($charset, 'utf-8', $http_response);
                     }
                 }
             }
             curl_close($ch);
             $options = self::parse($http_response, $url);
         }
     } elseif (ini_get('allow_url_fopen')) {
         $old_timeout = @ini_set('default_socket_timeout', 15);
         $http_response = '';
         if ($stream = fopen($url, 'rb')) {
             while (!feof($stream)) {
                 $http_response .= fread($stream, 4096);
             }
             $meta = stream_get_meta_data($stream);
             fclose($stream);
             if ($http_response) {
                 foreach (ifset($meta['wrapper_data'], array()) as $meta_data) {
                     if (strpos($meta_data, ':')) {
                         list($meta_name, $content_type) = explode(':', $meta_data, 2);
                         if (strtolower($meta_name) == 'content-type') {
                             if (preg_match('/charset=[\'"]?([a-z\\-0-9]+)[\'"]?/i', $content_type, $matches)) {
                                 $charset = strtolower($matches[1]);
                                 if (!in_array($charset, array('utf-8', 'utf8'))) {
                                     $http_response = iconv($charset, 'utf-8', $http_response);
                                 }
                             }
                             break;
                         }
                     }
                 }
                 $options = self::parse($http_response, $url);
             }
         }
         @ini_set('default_socket_timeout', $old_timeout);
     }
     if (empty($options)) {
         $message = '<span class="errormsg">Произошла ошибка при получении списка доступных способов оплаты шлюза (Детали в логе платежного плагина).</span>';
         if (!empty($params['value'])) {
             $message .= sprintf('<span class="hint">Текущее значение настройки: <b>%s</b>.</span>', htmlentities($params['value'], ENT_NOQUOTES, waHtmlControl::$default_charset));
         } else {
             $message .= '<span class="hint">Покупателю будет предложено самостоятельно выбрать способ оплаты на сайте платежного шлюза.</span>';
         }
         return waHtmlControl::getControl(waHtmlControl::HIDDEN, $name, $params) . $message;
     } else {
         array_unshift($options, array('title' => 'Покупателю будет предложен выбор на сайте шлюза', 'value' => '', 'group' => 'Пользовательский'));
         $params['options'] = $options;
         return waHtmlControl::getControl(waHtmlControl::SELECT, $name, $params);
     }
 }
Ejemplo n.º 20
0
    public function settingRedirectControl($name, $params = array())
    {
        $control = '';
        $default_rule = array('pattern' => '', 'regex' => false, 'replacement' => '');
        if (!isset($params['value']) || !is_array($params['value'])) {
            $params['value'] = array();
        }
        $params['value'][] = $default_rule;
        unset($params['options']);
        foreach ($params as $field => $param) {
            if (strpos($field, 'wrapper')) {
                unset($params[$field]);
            }
        }
        waHtmlControl::addNamespace($params, $name);
        $template = <<<HTML
<tr>
    <td>%s</td>
    <td><span class="hint">%s</span></td>
    <td>%s</td>
    <td>&rarr;</td>
    <td>%s</td>
    <td><a href="#/redirect/delete/" class="inline-link js-action"><i class="icon16 delete"></i></a></td>
</tr>
HTML;
        $params = array_merge($params, array('description' => null, 'title_wrapper' => false, 'title' => null));
        $control .= "<table class = \"zebra\">";
        $control .= "<tfoot>";
        $control .= sprintf('<tr><td colspan="6"><a href="#/redirect/add/" class="inline-link js-action"><i class="icon16 add"></i> %s</a></td></tr>', _wp('Add rule'));
        $frontend_urls = $this->getFrontendUrls();
        if (false) {
            $urls = array();
            foreach ($frontend_urls as &$frontend_url) {
                $frontend_url = htmlspecialchars($frontend_url, ENT_QUOTES, waHtmlControl::$default_charset);
                $urls[] = sprintf('<span class="hint">%s</span>', $frontend_url);
                unset($frontend_url);
            }
            $control .= sprintf('<tr><td colspan="6"> %s</td></tr>', implode('<br/>', $urls));
        }
        $control .= "</tfoot>";
        $control .= "<tbody>";
        $redirect_template = '<span class="hint">%s</span>';
        foreach ($params['value'] as $id => $rule) {
            $rule_params = $params;
            waHtmlControl::addNamespace($rule_params, $id);
            $value = isset($params['value'][$id]) ? $params['value'][$id] : $default_rule;
            $pattern = waHtmlControl::getControl(waHtmlControl::INPUT, 'pattern', array_merge($rule_params, array('description' => sprintf('<span class="hint">%s</span>', reset($frontend_urls)), 'value' => ifset($value['pattern'], ''), 'placeholder' => '/auxpage/*/', 'class' => 'long')));
            $regex = waHtmlControl::getControl(waHtmlControl::CHECKBOX, 'regex', array_merge($rule_params, array('title' => 'regex', 'value' => ifset($value['regex']))));
            $redirect = $this->redirectCustom($value['pattern'], true);
            if ($redirect === null) {
                $hint = sprintf($redirect_template, '—');
            } else {
                $hint = sprintf($redirect_template, htmlspecialchars($redirect, ENT_QUOTES, waHtmlControl::$default_charset));
            }
            $replacement = waHtmlControl::getControl(waHtmlControl::INPUT, 'replacement', array_merge($rule_params, array('placeholder' => '/*/', 'value' => ifset($value['replacement'], ''), 'description' => $hint)));
            $control .= sprintf($template, '<i class="icon16 sort"></i>', $regex, $pattern, $replacement);
        }
        $control .= "</tbody>";
        $control .= "</table><script type='text/javascript'>";
        $control .= <<<JS
\$('table.zebra ').sortable({
                distance: 5,
                opacity: 0.75,
                items: '>tbody>tr',
                axis: 'y',
                containment: 'parent',
                handle:'i.sort',
                tolerance: 'pointer'
            });
JS;
        $control .= '</script>';
        return $control;
    }
Ejemplo n.º 21
0
    /**
     * @param array $settings
     * @return string
     */
    public function backendCategoryDialog($settings)
    {
        if (!isset($settings['params'])) {
            if (!empty($settings['id'])) {
                $category_params_model = new shopCategoryParamsModel();
                $params = $category_params_model->get($settings['id']);
            } else {
                $params = array();
            }
        } else {
            $params = $settings['params'];
        }
        $control_params = array('namespace' => 'yandexmarket', 'value' => !empty($params['yandexmarket_group_skus']), 'title' => 'Яндекс.Маркет', 'description' => 'При экспорте в Яндекс.Маркет группировать все артикулы товаров <span class="hint">Настройка учитывается только для случая экспорта каждого артикула товара как отдельной товарной позиции на Яндекс.Маркете (настраивается в профиле экспорта)</span>', 'title_wrapper' => '%s', 'description_wrapper' => '%s', 'control_wrapper' => '<div class="name">%s</div><div class="value no-shift"><label>%s %s</label></div>');
        $control = waHtmlControl::getControl(waHtmlControl::CHECKBOX, 'group_skus', $control_params);
        return <<<HTML
<div class="field-group">
    <div class="field">
        {$control}
    </div>
</div>
HTML;
    }