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; } } }
/** * * @return waHtmlControl */ private static function getInstance() { if (!self::$instance instanceof self) { self::$instance = new self(); } return self::$instance; }
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; }
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; }
/** * @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'); }
/** * 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; }
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> </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; }
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; }
/** * 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'), ' '); $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> </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>→</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); }
/** * * Получение массива элементов настроек * @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); } }
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>→</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; }
/** * @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; }