public function format($data) { if (is_array($data)) { $data['data'] = $data['value']; $data['value'] = htmlspecialchars($data['value']); } else { $data = array('data' => $data, 'value' => htmlspecialchars($data)); } if (!$data['data']) { $data['value'] = ''; return $data; } $icon = ''; if (isset($data['ext']) && $data['ext'] && ($f = waContactFields::get('im'))) { $exts = $f->getParameter('ext'); if (isset($exts[$data['ext']])) { $icon = '<i class="icon16 ' . $data['ext'] . '"></i>'; } } if (!$icon) { $icon = '<i class="icon16 im"></i>'; } $data['value'] = $icon . $data['value']; return $data; }
public function format($data) { $value = htmlspecialchars(trim($data['value'])); if (!preg_match("/^(http|https):/", $value)) { $f = waContactFields::get('socialnetwork'); if ($f) { $domain = $f->getParameter('domain'); if (!empty($domain[$data['ext']])) { $d = $domain[$data['ext']]; if (strpos($value, $d) === false) { $value = '<a href="' . 'http://' . $d . '/' . ltrim($value, "/ ") . '" target="_blank">' . $value . '</a>'; } } } } else { $value = "<a href='{$value}' target='_blank'>{$value}</a>"; } $icon = ''; $ext = ''; if (isset($data['ext']) && $data['ext'] && ($f = waContactFields::get('socialnetwork'))) { $exts = $f->getParameter('ext'); if (isset($exts[$data['ext']])) { $ext = ' <em class="hint">' . $exts[$data['ext']] . '</em>'; $icon = '<i class="icon16 ' . $data['ext'] . '"></i>'; } else { $ext = ' <em class="hint">' . htmlspecialchars($data['ext']) . '</em>'; } } return $icon . $value . $ext; }
public function execute() { $field = waRequest::get('field', null, waRequest::TYPE_STRING_TRIM); if (!$field) { throw new waException(_w("Unknown field")); } // List of field values $cfvm = new waContactFieldValuesModel(); $fields = $cfvm->getInfo($field); // Possible parent fields this conditional field may depend on $parent_fields = array(); foreach (waContactFields::getAll('person') as $f) { /** @var waContactField $f */ if (!$f instanceof waContactCompositeField && !$f->isMulti()) { $parent_fields[$f->getId()] = $f->getName(); } } $field_ids = explode(':', $field); $f = waContactFields::get($field_ids[0]); if (!empty($field_ids[1]) && $f && $f instanceof waContactCompositeField) { $subfields = $f->getFields(); foreach ($subfields as $sfid => $sf) { $pid = $f->getId() . ':' . $sfid; if ($pid !== $field) { $parent_fields[$pid] = $f->getName() . ' — ' . $sf->getName(); } } } // Selected parent field $parent_selected = null; if ($fields) { $parent_selected = reset($fields); $parent_selected = $parent_selected['field']; } // Human readable name of current field if (!empty($field_ids[1]) && !empty($subfields[$field_ids[1]])) { $title = $subfields[$field_ids[1]]->getName(); } else { if ($f) { $title = $f->getName(); } else { // Loose guess on whether this field has just been created $new_field = false; if (substr($field, 0, 2) == '__') { $new_field = true; } else { if (!empty($field_ids[1]) && substr($field_ids[1], 0, 2) == '__') { $new_field = true; } } if ($new_field) { $title = _w('Conditional field'); } else { $title = _w(ucfirst($field)); } } } $this->view->assign(array('field' => $field, 'title' => $title, 'fields' => $fields, 'parent_fields' => $parent_fields, 'parent_selected' => $parent_selected)); }
public function execute() { $domain = siteHelper::getDomain(); $config = wa()->getConfig()->getAuth(); if (!isset($config[$domain])) { $config[$domain] = array(); } if (waRequest::post('auth_captcha') !== null) { if (waRequest::post('auth_captcha')) { $config[$domain]['signup_captcha'] = true; } elseif (isset($config[$domain]['signup_captcha'])) { unset($config[$domain]['signup_captcha']); } } if (waRequest::post('auth_rememberme')) { $config[$domain]['rememberme'] = true; } elseif (isset($config[$domain]['rememberme'])) { unset($config[$domain]['rememberme']); } // save auth adapters if (waRequest::post('auth_adapters') && waRequest::post('adapter_ids')) { $config[$domain]['adapters'] = array(); $adapters = waRequest::post('adapters', array()); foreach (waRequest::post('adapter_ids') as $adapter_id) { $config[$domain]['adapters'][$adapter_id] = $adapters[$adapter_id]; } } else { if (isset($config[$domain]['adapters'])) { unset($config[$domain]['adapters']); } } // signup $fields = waRequest::post('fields'); $params = waRequest::post('params'); $must_have_fields = array('email', 'password'); $default_fields = array_merge(array('firstname', 'lastname', ''), $must_have_fields); $config[$domain]['params'] = $params; if (!$config[$domain]) { $config[$domain]['fields'] = $default_fields; } else { $config[$domain]['fields'] = array(); } foreach ($fields as $field_id => $field) { $config[$domain]['fields'][$field_id] = $field; } foreach ($must_have_fields as $field) { if (!in_array($field, array_keys($fields))) { $tmp = waContactFields::get($field); $config[$domain]['fields'][$field] = array('required' => true, 'caption' => $tmp->getName()); } else { $config[$domain]['fields'][$field]['required'] = true; } } // save to file if (!$this->getConfig()->setAuth($config)) { $this->errors = sprintf(_w('File could not be saved due to the insufficient file write permissions for the "%s" folder.'), 'wa-config/'); } }
protected function getParts($data, $format = null) { $result = array('pic' => '', 'marker' => '', 'parts' => array()); $countryName = ''; // $countryPic = ''; // $searchLink = ''; if (isset($data['data']['country']) && $data['data']['country']) { $model = new waCountryModel(); $countryName = $model->name($data['data']['country']); // Do not show pic for unknown country if ($countryName) { $result['pic'] = '<img src="' . wa_url() . 'wa-content/img/country/' . strtolower($data['data']['country']) . '.gif" class="overhanging" />'; } } if (isset($data['data']['street']) || isset($data['data']['city']) || isset($data['data']['region']) || isset($data['data']['country']) || $countryName) { $searchURL = ''; foreach (array('street', 'city', 'region') as $id) { if (!isset($data['data'][$id])) { continue; } $searchURL .= ($searchURL ? ' ' : '') . $data['data'][$id]; } if ($countryName) { $searchURL .= ($searchURL ? ' ' : '') . $countryName; } $searchURL = htmlspecialchars($searchURL); $result['marker'] = '<a href="http://mapof.it/' . $searchURL . '" class="small"><i class="icon16 marker"></i><b><i>' . _w('show on map') . '</i></b></a>'; } foreach (waContactFields::get('address')->getFields() as $field) { /** * @var waContactField $field */ $id = $field->getId(); if (isset($data['data'][$id]) && trim($data['data'][$id])) { if ($id === 'country') { $result['parts'][$id] = $countryName; } else { $result['parts'][$id] = $field->format($data['data'][$id], $format, $data['data']); } $result['parts'][$id] = htmlspecialchars($result['parts'][$id]); } } $result['marker'] = ''; // marker is disabled, but may be needed in future return $result; }
public function format($data) { $data['value'] = htmlspecialchars(trim($data['value'])); $value = self::formatLink($data); $icon = ''; $ext = ''; if (isset($data['ext']) && $data['ext'] && ($f = waContactFields::get('socialnetwork'))) { $exts = $f->getParameter('ext'); if (isset($exts[$data['ext']])) { $ext = ' <em class="hint">' . $exts[$data['ext']] . '</em>'; $icon = '<i class="icon16 ' . $data['ext'] . '"></i>'; } else { $ext = ' <em class="hint">' . htmlspecialchars($data['ext']) . '</em>'; } } return $icon . $value . $ext; }
public function format($data) { if (is_array($data)) { $result = htmlspecialchars($data['value']); $result = '<a class="inline" href="mailto:' . $result . '">' . $result . '</a>'; if (isset($data['ext']) && $data['ext']) { $ext = $data['ext']; $f = waContactFields::get('email'); $exts = $f->getParameter('ext'); if (isset($exts[$ext])) { $ext = _ws($exts[$ext]); } $result .= ' <em class="hint">' . htmlspecialchars($ext) . '</em>'; } return $result; } return htmlspecialchars($data); }
public function execute() { $this->contact = wa()->getUser(); $data = json_decode(waRequest::post('data'), true); if (!$data || !is_array($data)) { $this->response = array('errors' => array(), 'data' => array()); return; } // Make sure only allowed fields are saved $allowed = array(); foreach (waContactFields::getAll('person') as $f) { if ($f->getParameter('allow_self_edit')) { $allowed[$f->getId()] = true; } } $data = array_intersect_key($data, $allowed); $oldLocale = $this->getUser()->getLocale(); // Validate and save contact if no errors found $errors = $this->contact->save($data, true); if ($errors) { $response = array(); } else { // New data formatted for JS $response['name'] = $this->contact->get('name', 'js'); foreach ($data as $field_id => $field_value) { if (!isset($errors[$field_id])) { $response[$field_id] = $this->contact->get($field_id, 'js'); } } // Top fields $response['top'] = array(); foreach (array('email', 'phone', 'im') as $f) { if ($v = $this->contact->get($f, 'top,html')) { $response['top'][] = array('id' => $f, 'name' => waContactFields::get($f)->getName(), 'value' => is_array($v) ? implode(', ', $v) : $v); } } } // Reload page with new language if user just changed it in own profile if ($oldLocale != $this->contact->getLocale()) { $response['reload'] = TRUE; } $this->response = array('errors' => $errors, 'data' => $response); }
public function format($data) { $value = htmlspecialchars($data['value']); $icon = ''; $ext = ''; if (isset($data['ext']) && $data['ext'] && ($f = waContactFields::get('im'))) { $exts = $f->getParameter('ext'); if (isset($exts[$data['ext']])) { $ext = ' <em class="hint">' . $exts[$data['ext']] . '</em>'; $icon = '<i class="icon16 ' . $data['ext'] . '"></i>'; } else { $ext = ' <em class="hint">' . htmlspecialchars($data['ext']) . '</em>'; } } if (!$icon) { $icon = '<i class="icon16 im"></i>'; } return $icon . $value . $ext; }
/** * @param array $data * @param array $errors * @return bool|waContact */ public function signup($data, &$errors = array()) { // check exists contacts $auth = wa()->getAuth(); $field_id = $auth->getOption('login'); if ($field_id == 'login') { $field_name = _ws('Login'); } else { $field = waContactFields::get($field_id); if ($field) { $field_name = $field->getName(); } else { $field_name = ucfirst($field_id); } } $is_error = false; // check passwords if ($data['password'] !== $data['password_confirm']) { $errors['password'] = array(); $errors['password_confirm'] = array(_ws('Passwords do not match')); $is_error = true; } elseif (!$data['password']) { $errors['password'] = array(); $errors['password_confirm'][] = _ws('Password can not be empty.'); $is_error = true; } if (!$data[$field_id]) { $errors[$field_id] = array(sprintf(_ws("%s is required"), $field_name)); $is_error = true; } if (!$is_error) { $contact = $auth->getByLogin($data[$field_id]); if ($contact) { $errors[$field_id] = array(sprintf(_ws('User with the same %s is already registered'), $field_name)); $is_error = true; } } $auth_config = wa()->getAuthConfig(); // set unknown or unconfirmed status for email if (isset($data['email']) && $data['email']) { if (!empty($auth_config['params']['confirm_email'])) { $email_status = 'unconfirmed'; } else { $email_status = 'unknown'; } $data['email'] = array('value' => $data['email'], 'status' => $email_status); } // check captcha if (isset($auth_config['signup_captcha']) && $auth_config['signup_captcha']) { if (!wa()->getCaptcha()->isValid()) { $errors['captcha'] = _ws('Invalid captcha'); $is_error = true; } } if (is_array($auth_config['fields'])) { foreach ($auth_config['fields'] as $fld_id => $fld) { if (array_key_exists('required', $fld) && !$data[$fld_id] && $fld_id !== 'password') { $field = waContactFields::get($fld_id); if (!empty($fld['caption'])) { $field_name = $fld['caption']; } else { if ($field) { $field_name = $field->getName(); } else { $field_name = ucfirst($fld_id); } } $errors[$fld_id] = array(sprintf(_ws("%s is required"), $field_name)); $is_error = true; } } } if ($is_error) { return false; } if (isset($data['birthday']) && is_array($data['birthday']['value'])) { foreach ($data['birthday']['value'] as $bd_id => $bd_val) { if (strlen($bd_val) === 0) { $data['birthday']['value'][$bd_id] = null; } } } // remove password_confirm field unset($data['password_confirm']); // set advanced data $data['create_method'] = 'signup'; $data['create_ip'] = waRequest::getIp(); $data['create_user_agent'] = waRequest::getUserAgent(); // try save contact $contact = new waContact(); if (!($errors = $contact->save($data, true))) { if (!empty($data['email'])) { $this->send($contact); } /** * @event signup * @param waContact $contact */ wa()->event('signup', $contact); // after sign up callback $this->afterSignup($contact); // try auth new contact try { if (empty($data['email']) || empty($auth_config['params']['confirm_email'])) { if (wa()->getAuth()->auth($contact)) { $this->logAction('signup', wa()->getEnv()); } } } catch (waException $e) { $errors = array('auth' => $e->getMessage()); } return $contact; } if (isset($errors['name'])) { $errors['firstname'] = array(); $errors['middlename'] = array(); $errors['lastname'] = $errors['name']; } return false; }
public function deleteAll($fields, $type = null) { if (!$fields) { return; } if (!is_array($fields)) { $fields = array($fields); } $where = array(); foreach ($fields as $id) { $f = waContactFields::get($id); if ($f instanceof waContactCompositeField) { $where[] = "cd.field LIKE '" . $this->getModel()->escape($id) . ":%'"; } else { $where[] = "cd.field='" . $this->getModel()->escape($id) . "'"; } } switch ($type) { case 'person': case 'company': $join = "JOIN wa_contact AS c ON c.id=cd.contact_id"; if ($type == 'company') { $cwhere = "c.is_company>0 AND "; } else { $cwhere = "c.is_company=0 AND "; } break; default: $join = ''; $cwhere = ''; } // Hope they know what they're doing :) $sql = "DELETE cd FROM " . $this->getModel()->getTableName() . " AS cd {$join}\n WHERE {$cwhere}(" . implode(' OR ', $where) . ")"; $this->getModel()->exec($sql); }
public function displayPrintForm($id, waOrder $order, $params = array()) { if ($id = 'delivery_list') { $view = wa()->getView(); $main_contact_info = array(); foreach (array('email', 'phone') as $f) { if ($v = $order->contact->get($f, 'top,html')) { $main_contact_info[] = array('id' => $f, 'name' => waContactFields::get($f)->getName(), 'value' => is_array($v) ? implode(', ', $v) : $v); } } $formatter = new waContactAddressSeveralLinesFormatter(); $shipping_address = array(); foreach (waContactFields::get('address')->getFields() as $k => $v) { if (isset($order->params['shipping_address.' . $k])) { $shipping_address[$k] = $order->params['shipping_address.' . $k]; } } $shipping_address_text = array(); foreach (array('country_name', 'region_name', 'zip', 'city', 'street') as $k) { if (isset($order->shipping_address[$k])) { $shipping_address_text[] = $order->shipping_address[$k]; } } $shipping_address_text = implode(', ', $shipping_address_text); $view->assign('shipping_address_text', $shipping_address_text); $shipping_address = $formatter->format(array('data' => $shipping_address)); $shipping_address = $shipping_address['value']; $view->assign('shipping_address', $shipping_address); $view->assign('main_contact_info', $main_contact_info); $view->assign('order', $order); $view->assign('params', $params); $view->assign('p', $this); return $view->fetch($this->path . '/templates/form.html'); } else { throw new waException('Print form not found'); } }
public function execute() { $order = $this->getOrder(); if (!$order) { $this->view->assign('order', $order); return; } $workflow = new shopWorkflow(); $actions = $workflow->getStateById($order['state_id'])->getActions(); $bottom_buttons = $top_buttons = $buttons = array(); foreach ($actions as $action) { /** * @var shopWorkflowAction $action */ if ($action->getOption('top') || $action->getOption('position') == 'top') { $top_buttons[] = $action->getButton(); } elseif ($action->getOption('position') == 'bottom') { $bottom_buttons[] = $action->getButton(); } else { $buttons[] = $action->getButton(); } } $config = $this->getConfig(); $last_action_datetime = null; $log_model = new shopOrderLogModel(); $log = $log_model->getLog($order['id']); foreach ($log as &$l) { if ($l['action_id']) { $l['action'] = $workflow->getActionById($l['action_id']); } if ($order['state_id'] == $l['after_state_id']) { $last_action_datetime = $l['datetime']; } } $params = $order['params']; $tracking = ''; if (!empty($params['shipping_id'])) { try { $plugin = shopShipping::getPlugin(null, $params['shipping_id']); if (!empty($params['tracking_number'])) { $tracking = $plugin->tracking($params['tracking_number']); } if ($custom_fields = $plugin->customFields(new waOrder())) { foreach ($custom_fields as $k => $v) { if (!empty($params['shipping_params_' . $k])) { $custom_fields[$k]['value'] = $params['shipping_params_' . $k]; } else { unset($custom_fields[$k]); } } $this->view->assign('custom_fields', $custom_fields); } } catch (waException $ex) { $tracking = $ex->getMessage(); } } $this->view->assign('tracking', $tracking); $settings = wa('shop')->getConfig()->getCheckoutSettings(); $form_fields = ifset($settings['contactinfo']['fields'], array()); $formatter = new waContactAddressSeveralLinesFormatter(); $shipping_address = shopHelper::getOrderAddress($params, 'shipping'); $this->view->assign('shipping_address_text', shopHelper::getShippingAddressText($params)); $shipping_address = $formatter->format(array('data' => $shipping_address)); $shipping_address = $shipping_address['value']; if (isset($form_fields['address.billing'])) { $billing_address = shopHelper::getOrderAddress($params, 'billing'); $billing_address = $formatter->format(array('data' => $billing_address)); $billing_address = $billing_address['value']; if ($billing_address === $shipping_address) { $billing_address = null; } } else { $billing_address = null; } $customer_model = new shopCustomerModel(); $customer = $customer_model->getById($order['contact_id']); $customer_contact = new waContact($order['contact_id']); // Customer info $main_contact_info = array(); foreach (array('email', 'phone', 'im') as $f) { if ($v = $customer_contact->get($f, 'top,html')) { $main_contact_info[] = array('id' => $f, 'name' => waContactFields::get($f)->getName(), 'value' => is_array($v) ? implode(', ', $v) : $v); } } $this->view->assign(array('customer' => $customer, 'customer_contact' => $customer_contact, 'main_contact_info' => $main_contact_info, 'currency' => $config->getCurrency(), 'order' => $order, 'params' => $params, 'log' => $log, 'last_action_datetime' => $last_action_datetime, 'bottom_buttons' => $bottom_buttons, 'top_buttons' => $top_buttons, 'buttons' => $buttons, 'filter_params' => $this->getParams(), 'filter_params_str' => $this->getParams(true), 'count_new' => $this->getModel()->getStateCounters('new'), 'timeout' => $config->getOption('orders_update_list'), 'printable_docs' => shopHelper::getPrintForms(array_merge($order, array('params' => $params))), 'billing_address' => $billing_address, 'shipping_address' => $shipping_address, 'shipping_id' => ifset($params['shipping_id'], '') . '.' . ifset($params['shipping_rate_id'], ''), 'offset' => $this->getModel()->getOffset($order['id'], $this->getParams(), true))); /** * Backend order profile page * UI hook allow extends order profile page * @event backend_order * @param array $order * @return array[string][string]string $return[%plugin_id%]['title_suffix'] html output * @return array[string][string]string $return[%plugin_id%]['action_button'] html output * @return array[string][string]string $return[%plugin_id%]['action_link'] html output * @return array[string][string]string $return[%plugin_id%]['info_section'] html output */ $this->view->assign('backend_order', wa()->event('backend_order', $order, array('title_suffix', 'action_button', 'action_link', 'info_section'))); }
/** * Sets a value for specified contact property. * * @param string $field_id Contact property id * @param mixed $value Property value * @param bool $add Flag requiring to add specified value to existing values of a multi-field. If false, * all existing values of the specified multi-field are deleted and replaced with specified value. */ public function set($field_id, $value, $add = false) { if (strpos($field_id, '.') !== false) { $field_parts = explode('.', $field_id, 2); $field_id = $field_parts[0]; $ext = $field_parts[1]; } else { $ext = null; } if (strpos($field_id, ':') !== false) { $field_parts = explode(':', $field_id, 2); $field_id = $field_parts[0]; $subfield = $field_parts[1]; } else { $subfield = null; } $f = waContactFields::get($field_id, $this['is_company'] ? 'company' : 'person'); if (!$f) { if ($field_id == 'password') { $value = self::getPasswordHash($value); } $this->data[$field_id] = $value; } else { $this->data[$field_id] = $f->set($this, $value, array('ext' => $ext, 'subfield' => $subfield), $add); } }
protected function searchPrepare($query, $auto_title = true) { if ($auto_title || !isset($this->alias_index['data'])) { $this->alias_index['data'] = 0; } $query = urldecode($query); // `&` can be escaped in search request. Need to split by not escaped ones only. $escapedBS = 'ESCAPED_BACKSLASH'; while (FALSE !== strpos($query, $escapedBS)) { $escapedBS .= rand(0, 9); } $escapedAmp = 'ESCAPED_AMPERSAND'; while (FALSE !== strpos($query, $escapedAmp)) { $escapedAmp .= rand(0, 9); } $query = str_replace('\\&', $escapedAmp, str_replace('\\\\', $escapedBS, $query)); $query = explode('&', $query); $model = $this->getModel(); $title = array(); foreach ($query as $part) { if (!($part = trim($part))) { continue; } $part = str_replace(array($escapedBS, $escapedAmp), array('\\\\', '\\&'), $part); $parts = preg_split("/(\\\$=|\\^=|\\*=|==|!=|>=|<=|=|>|<|@=)/uis", $part, 2, PREG_SPLIT_DELIM_CAPTURE); if ($parts) { if ($parts[0] == 'email') { if (!isset($this->joins['email'])) { $this->joins['email'] = array('table' => 'wa_contact_emails', 'alias' => 'e'); } $title[] = waContactFields::get($parts[0])->getName() . $parts[1] . $parts[2]; $this->where[] = 'e.email' . $this->getExpression($parts[1], $parts[2]); } elseif ($model->fieldExists($parts[0])) { if ($f = waContactFields::get($parts[0])) { $title[] = $f->getName() . $parts[1] . $parts[2]; } else { $title[] = $parts[0] . $parts[1] . $parts[2]; } $this->where[] = 'c.' . $parts[0] . $this->getExpression($parts[1], $parts[2]); } else { if ($parts[0] == 'category') { if (!isset($this->joins['categories'])) { $this->joins['categories'] = array('table' => 'wa_contact_categories', 'alias' => 'cc'); } $title[] = _ws('Category') . $parts[1] . $parts[2]; $this->where[] = 'cc.category_id' . $this->getExpression($parts[1], $parts[2]); } else { $alias = "d" . $this->alias_index['data']++; $field_parts = explode('.', $parts[0]); $f = $field_parts[0]; if ($fo = waContactFields::get($f)) { $title[] = $fo->getName() . $parts[1] . $parts[2]; } $ext = isset($field_parts[1]) ? $field_parts[1] : null; $on = $alias . '.contact_id = c.id AND ' . $alias . ".field = '" . $model->escape($f) . "'"; $on .= ' AND ' . $alias . ".value " . $this->getExpression($parts[1], $parts[2]); if ($ext !== null) { $on .= " AND " . $alias . ".ext = '" . $model->escape($ext) . "'"; } $this->joins[] = array('table' => 'wa_contact_data', 'alias' => $alias, 'on' => $on); $this->where_fields[] = $f; } } } } if ($title) { $title = implode(', ', $title); // Strip slashes from search title. $bs = '\\\\'; $title = preg_replace("~{$bs}(_|%|&|{$bs})~", '\\1', $title); } if ($auto_title) { $this->addTitle($title, ' '); } }
public function execute() { $this->id = (int) waRequest::post('id'); // Check access if (!$this->id) { if (!$this->getRights('create')) { throw new waRightsException('Access denied.'); } } else { $cr = new contactsRightsModel(); if ($cr->getRight(null, $this->id) != 'write') { throw new waRightsException('Access denied.'); } } $this->type = waRequest::post('type'); $this->contact = new waContact($this->id); if ($this->type == 'company') { $this->contact['is_company'] = 1; } $data = json_decode(waRequest::post('data'), true); if (!$this->id && !isset($data['create_method'])) { $data['create_method'] = 'add'; } $oldLocale = $this->getUser()->getLocale(); $response = array(); if (!($errors = $this->contact->save($data, true))) { if ($this->id) { foreach ($data as $field_id => $field_value) { if (!isset($errors[$field_id])) { $response[$field_id] = $this->contact->get($field_id, 'js'); } } $response['name'] = $this->contact->get('name', 'js'); $fields = array('email', 'phone', 'im'); $top = array(); foreach ($fields as $f) { if ($v = $this->contact->get($f, 'top,html')) { $top[] = array('id' => $f, 'name' => waContactFields::get($f)->getName(), 'value' => is_array($v) ? implode(', ', $v) : $v); } } $response['top'] = $top; } else { $response = array('id' => $this->contact->getId()); $this->log('contact_add', 1); } // Update recently added menu item if (($name = $this->contact->get('name')) || $name === '0') { $name = trim($this->contact->get('title') . ' ' . $name); $history = new contactsHistoryModel(); $history->save('/contact/' . $this->contact->getId(), $name, $this->id ? null : 'add'); $history = $history->get(); // to update history in user's browser } } // Reload page with new language if user just changed it in own profile if ($this->contact->getId() == $this->getUser()->getId() && $oldLocale != $this->contact->getLocale()) { $response['reload'] = TRUE; } $this->response = array('errors' => $errors, 'data' => $response); if (isset($history)) { $this->response['history'] = $history; } }
/** * Returns customer's shipping address written in one string. * * @param array $order_params 'params' element of order data array returned by getOrder() method of shopOrderModel class * @param bool $for_map Whether full or brief address information must be returned; defaults to true * @return string */ public static function getShippingAddressText($order_params, $for_map = true) { $address = array(); foreach (waContactFields::get('address')->getFields() as $k => $v) { $address[$k] = ifset($order_params['shipping_address.' . $k]); } if ($for_map) { $address_f = array(); foreach (array('country', 'region', 'zip', 'city', 'street') as $k) { if (!isset($address[$k])) { continue; } elseif ($k == 'country') { $address_f[$k] = waCountryModel::getInstance()->name(ifempty($address['country'])); } elseif ($k == 'region') { $address_f['region'] = ''; if (!empty($address['country']) && !empty($address['region'])) { $model = new waRegionModel(); if ($region = $model->get($address['country'], $address['region'])) { $address_f['region'] = $region['name']; } } } else { $address_f[$k] = $address[$k]; } } return implode(', ', $address_f); } return implode(', ', $address); }
public function getAddressForm($method_id, waShipping $plugin, $config, $contact_address, $address_form) { $config_address = isset($config['contactinfo']['fields']['address.shipping']) ? $config['contactinfo']['fields']['address.shipping'] : (isset($config['contactinfo']['fields']['address']) ? $config['contactinfo']['fields']['address'] : array()); $address_fields = $plugin->requestedAddressFields(); $disabled_only = $address_fields === array() ? false : true; if ($address_fields === false || $address_fields === null) { return false; } foreach ($address_fields as $f) { if ($f !== false) { $disabled_only = false; break; } } $address = array(); if ($disabled_only) { $allowed = $plugin->allowedAddress(); if (count($allowed) == 1) { $one = true; if (!isset($config_address['fields'])) { $address_field = waContactFields::get('address'); foreach ($address_field->getFields() as $f) { $fields[$f->getId()] = array(); } } else { $fields = $config_address['fields']; } foreach ($allowed[0] as $k => $v) { if (is_array($v)) { $one = false; break; } else { $fields[$k]['hidden'] = 1; $fields[$k]['value'] = $v; } } foreach ($address_fields as $k => $v) { if ($v === false && isset($fields[$k])) { unset($fields[$k]); } } if ($one) { $address = $config_address; $address['fields'] = $fields; } } } else { if (isset($config_address['fields'])) { $fields = $config_address['fields']; if ($address_fields) { foreach ($fields as $f_id => $f) { if (isset($address_fields[$f_id])) { foreach ($address_fields[$f_id] as $k => $v) { $fields[$f_id][$k] = $v; } } else { unset($fields[$f_id]); } } foreach ($address_fields as $f_id => $f) { if (!isset($fields[$f_id])) { $fields[$f_id] = $f; } } } $address_fields = $fields; } if ($address_fields) { $address = array('fields' => $address_fields); } } if (!$address_form && !empty($address['fields'])) { foreach ($address['fields'] as $k => $v) { if (empty($contact_address[$k])) { $address_form = true; } } } if ($address_form) { if (!empty($config['shipping']['prompt_type'])) { if (!empty($address['fields'])) { foreach ($address['fields'] as $k => $v) { if (empty($v['cost'])) { unset($address['fields'][$k]); } } if (!$address['fields']) { return null; } } else { $empty = true; foreach ($address_fields as $f) { if (!empty($f['cost'])) { $empty = false; break; } } if ($empty) { return null; } } } return waContactForm::loadConfig(array('address.shipping' => $address), array('namespace' => 'customer_' . $method_id)); } else { return null; } }
private function getContactControl($name, $params = array()) { $control = array(); if ($name) { self::addNamespace($params, $name); } $params['namespace'] = $namespace = self::makeNamespace($params); $contact = wa()->getUser(); $values = isset($params['value']) ? (array) $params['value'] : array(); $custom_params = array('class', 'style', 'placeholder', 'id', 'readonly'); $id = 0; foreach ((array) $params['options'] as $field) { $params['namespace'] = $namespace; $control[$id] = array('title' => '', 'control' => '', 'description' => ''); $field_id = is_array($field) ? $field['value'] : $field; if (!isset($values[$field_id])) { $values[$field_id] = $contact->get($field_id); } $params['value'] = $values[$field_id]; if (strpos($field_id, ':')) { list($field_id, $subfield_id) = explode(':', $field_id, 2); } else { $subfield_id = null; } if ($contact_field = waContactFields::get($field_id)) { if (is_array($params['value'])) { $params['value'] = current($params['value']); } self::makeId($params, $field_id); $params['title'] = $contact_field->getName(); $attrs = $this->addCustomParams($custom_params, $params); if ($subfield_id) { self::makeId($params, $subfield_id); $params['namespace'] = self::makeNamespace($params + array('name')); } unset($params['id']); if ($subfield_id) { if ($contact_subfield = $contact_field->getFields($subfield_id)) { $control[$id]['title'] .= ' ' . $contact_subfield->getName(); $params['id'] = "{$field_id}:{$subfield_id}"; $control[$id]['control'] = $contact_subfield->getHTML($params, $attrs); } else { $params['title'] .= ':' . $subfield_id; $control[$id]['title'] = $this->getControlTitle($params); $control[$id]['control'] .= sprintf('<span class="error">%s<span>', _w('Contact subfield not found')); } } else { $control[$id]['control'] = $contact_field->getHTML($params, $attrs); $control[$id]['title'] = $this->getControlTitle($params); } } else { $params['title'] = $field_id; $control[$id]['title'] = $this->getControlTitle($params); $control[$id]['control'] .= sprintf('<span class="error">%s<span>', _w('Contact field not found')); } ++$id; } return $control; }
public function format($data) { $parts = $this->getParts($data); $i = 0; $data['value'] = array(); $fields = waContactFields::get('address')->getFields(); foreach ($parts['parts'] as $part_id => $part) { $v = ''; // add country flag before the first line if ($i === 0 && $parts['pic'] && (!isset($this->options['image']) || $this->options['image'])) { $v = $parts['pic'] . ' '; } $v .= $part; // add marker after the first line of address if ($i == 0 && $parts['marker']) { $v .= $parts['marker']; } $data['value'][] = $v; $i++; } $data['value'] = implode("<br>\n", $data['value']); return $data; }
public function displayPrintForm($id, waOrder $order, $params = array()) { if ($id = 'delivery_list') { $view = wa()->getView(); $main_contact_info = array(); foreach (array('email', 'phone') as $f) { if ($v = $order->contact->get($f, 'top,html')) { $main_contact_info[] = array('id' => $f, 'name' => waContactFields::get($f)->getName(), 'value' => is_array($v) ? implode(', ', $v) : $v); } } $formatter = new waContactAddressSeveralLinesFormatter(); $shipping_address = array(); foreach (waContactFields::get('address')->getFields() as $k => $v) { if (isset($order->params['shipping_address.' . $k])) { $shipping_address[$k] = $order->params['shipping_address.' . $k]; } } $shipping_address_text = array(); foreach (array('country_name', 'region_name', 'zip', 'city', 'street') as $k) { if (!empty($order->shipping_address[$k])) { $shipping_address_text[] = $order->shipping_address[$k]; } } $shipping_address_text = implode(', ', $shipping_address_text); $map = ''; if ($shipping_address_text) { $map_adapter = $this->getSettings('map'); if (!$map_adapter) { $map_adapter = 'google'; } try { $map = wa()->getMap($map_adapter)->getHTML($shipping_address_text, array('width' => '100%', 'height' => '350pt', 'zoom' => 16)); } catch (waException $e) { $map = ''; } } $view->assign('map', $map); $shipping_address = $formatter->format(array('data' => $shipping_address)); $shipping_address = $shipping_address['value']; $view->assign(compact('shipping_address_text', 'shipping_address', 'main_contact_info', 'order', 'params')); $view->assign('p', $this); return $view->fetch($this->path . '/templates/form.html'); } else { throw new waException('Print form not found'); } }
$field = waContactFields::get('sex', 'all'); if ($field && $field->getParameter('storage') == 'info') { $p = $field->getParameter('localized_names'); if (isset($p['en_US']) && $p['en_US'] == 'Sex') { $p['en_US'] = 'Gender'; $field->setParameter('localized_names', $p); waContactFields::updateField($field); } } // make enable main fields for person $main_fields = array('name', 'title', 'firstname', 'middlename', 'lastname', 'jobtitle', 'company'); $sort = 0; foreach ($main_fields as $f_id) { $field = waContactFields::get($f_id, 'all'); if ($field) { waContactFields::updateField($field); waContactFields::enableField($field, 'person', $sort); $sort += 1; } } // make enable main fields for company $main_fields = array('name', 'company'); $sort = 0; foreach ($main_fields as $f_id) { $field = waContactFields::get($f_id, 'all'); if ($field) { waContactFields::updateField($field); waContactFields::enableField($field, 'company', $sort); $sort += 1; } }
/** * Factory method to load form fields from config. * * Config must return an array: field_id => waContactField OR array of options to specify on existing field with given field_id. * * @param string|array $file path to config file, or array of config options. * @param array $options */ public static function loadConfig($file, $options = array()) { if (is_array($file)) { $fields_config = $file; } else { if (!is_readable($file)) { throw new waException('Config is not readable: ' . $file); } $fields_config = (include $file); if (!$fields_config || !is_array($fields_config)) { waLog::log('Incorrect config ' . $file); $fields_config = array(); } } $fields = array(); $values = array(); // hidden field values known beforehand foreach ($fields_config as $full_field_id => $opts) { if ($opts instanceof waContactField) { $f = clone $opts; } else { if (is_array($opts)) { // Allow to specify something like 'phone.home' as field_id in config file. $fid = explode('.', $full_field_id, 2); $fid = $fid[0]; $f = waContactFields::get($fid); if (!$f) { waLog::log('ContactField ' . $fid . ' not found.'); continue; } else { // Prepare fields parameter for composite field if ($f instanceof waContactCompositeField && !empty($opts['fields'])) { if (!is_array($opts['fields'])) { unset($opts['fields']); } else { $old_subfields = $f->getFields(); $subfields = array(); foreach ($opts['fields'] as $sfid => $sfopts) { if (empty($old_subfields[$sfid])) { waLog::log('Field ' . $fid . ':' . $sfid . ' not found and is ignored in ' . (is_array($file) ? 'config' : $file)); continue; } $subfields[$sfid] = self::getClone($old_subfields[$sfid], $sfopts); if ($subfields[$sfid] instanceof waContactHiddenField) { if (empty($values[$full_field_id]['data'])) { $values[$full_field_id] = array('data' => array()); } $values[$full_field_id]['data'][$sfid] = $subfields[$sfid]->getParameter('value'); } } $opts['fields'] = $subfields; } } $f = self::getClone($f, $opts); if ($f instanceof waContactHiddenField) { $values[$full_field_id] = $f->getParameter('value'); } } } else { waLog::log('Field ' . $full_field_id . ' has incorrect format and is ignored in ' . $file); continue; } } $fields[$full_field_id] = $f; } $form = new self($fields, $options); $form->setValue($values); return $form; }
public function signupFields($errors = array()) { $config = wa()->getAuthConfig(); $config_fields = isset($config['fields']) ? $config['fields'] : array('firstname', 'lastname', '', 'email' => array('required' => true), 'password' => array('required' => true)); $format_fields = array(); foreach ($config_fields as $k => $v) { if (is_numeric($k)) { if ($v) { $format_fields[$v] = array(); } else { $format_fields[] = ''; } } else { $format_fields[$k] = $v; } } $fields = array(); foreach ($format_fields as $field_id => $field) { if (!is_numeric($field_id)) { if (strpos($field_id, '.')) { $field_id_parts = explode('.', $field_id); $id = $field_id_parts[0]; $field['ext'] = $field_id_parts[1]; } else { $id = $field_id; } $f = waContactFields::get($id); if ($f) { $fields[$field_id] = array($f, $field); } elseif ($field_id == 'login') { $fields[$field_id] = array(new waContactStringField($field_id, _ws('Login')), $field); } elseif ($field_id == 'password') { $fields[$field_id] = array(new waContactPasswordField($field_id, _ws('Password')), $field); $field_id .= '_confirm'; $fields[$field_id] = array(new waContactPasswordField($field_id, _ws('Confirm password')), $field); } } else { $fields[] = ''; } } return $fields; }
/** * @param array $data * @param array $errors * @return bool|waContact */ public function signup($data, &$errors = array()) { // check exists contacts $auth = wa()->getAuth(); $field_id = $auth->getOption('login'); if ($field_id == 'login') { $field_name = _ws('Login'); } else { $field = waContactFields::get($field_id); if ($field) { $field_name = $field->getName(); } else { $field_name = ucfirst($field_id); } } $is_error = false; // check passwords if ($data['password'] !== $data['password_confirm']) { $errors['password'] = array(); $errors['password_confirm'] = array(_ws('Passwords do not match')); $is_error = true; } elseif (!$data['password']) { $errors['password'] = array(); $errors['password_confirm'][] = _ws('Password can not be empty.'); $is_error = true; } if (!$data[$field_id]) { $errors[$field_id] = array(sprintf(_ws("%s is required"), $field_name)); $is_error = true; } $contact = $auth->getByLogin($data[$field_id]); if ($contact) { $errors[$field_id] = array(sprintf(_ws('User with the same %s is already registered'), $field_name)); $is_error = true; } // set unconfirmed status for email if (isset($data['email']) && $data['email']) { $data['email'] = array('value' => $data['email'], 'status' => 'unconfirmed'); } // check captcha $auth_config = wa()->getAuthConfig(); if (isset($auth_config['signup_captcha']) && $auth_config['signup_captcha']) { if (!wa()->getCaptcha()->isValid()) { $errors['captcha'] = _ws('Invalid captcha'); $is_error = true; } } if ($is_error) { return false; } // remove password_confirm field unset($data['password_confirm']); // set advansed data $data['create_method'] = 'signup'; $data['create_ip'] = waRequest::getIp(); $data['create_user_agent'] = waRequest::getUserAgent(); // try save contact $contact = new waContact(); if (!($errors = $contact->save($data, true))) { // after sign up callback $this->afterSignup($contact); // auth new contact wa()->getAuth()->auth($contact); return $contact; } if (isset($errors['name'])) { $errors['firstname'] = array(); $errors['middlename'] = array(); $errors['lastname'] = $errors['name']; } return false; }
public function findDuplicatesFor($field, $values, $excludeIds = array()) { if (!$values) { return array(); } // Check if field exists, is active and is kept in this storage if (!$field instanceof waContactField) { $field = waContactFields::get($field); if (!$field) { return array(); } } if ($field->getParameter('storage') != 'info') { return array(); } $field = $field->getId(); $sql = "SELECT `{$field}` AS f, id\n FROM wa_contact\n WHERE `{$field}` IN (:values)" . ($excludeIds ? " AND id NOT IN (:excludeIds) " : ' ') . "GROUP BY f"; $this->getModel(); $r = $this->model->query($sql, array('values' => $values, 'excludeIds' => $excludeIds)); return $r->fetchAll('f', true); }
<?php // // When this installation has a custom person_fields_order config, // make sure default set of fields is allowed in personal profile to edit. // if (!file_exists($this->getConfigPath('person_fields_order.php', true, 'contacts'))) { return; } $person_fields_default_file = $this->getRootPath() . '/wa-system/contact/data/person_fields_default.php'; if (!is_readable($person_fields_default_file)) { return; } $person_fields_default = (include $person_fields_default_file); if (!$person_fields_default || !is_array($person_fields_default)) { return; } foreach ($person_fields_default as $f_id => $opts) { if (!empty($opts['allow_self_edit'])) { $f = waContactFields::get($f_id, 'person'); if ($f) { $f->setParameter('allow_self_edit', true); waContactFields::enableField($f, 'person'); } } }
public function execute() { $id = waRequest::request('id', null, waRequest::TYPE_INT); $scm = new shopCustomerModel(); $customer = $scm->getById($id); try { $contact = new waContact($id); $contact->getName(); } catch (waException $e) { // !!! What to do when shop_customer exists, but no wa_contact found? throw $e; } $ccsm = new waContactCategoriesModel(); $contact_categories = $ccsm->getContactCategories($id); $contacts_url = wa()->getAppUrl('contacts'); // Info above tabs $top = array(); foreach (array('email', 'phone', 'im') as $f) { if ($v = $contact->get($f, 'top,html')) { $top[] = array('id' => $f, 'name' => waContactFields::get($f)->getName(), 'value' => is_array($v) ? implode(', ', $v) : $v); } } // Get photo $photo = $contact->get('photo'); $config = $this->getConfig(); $use_gravatar = $config->getGeneralSettings('use_gravatar'); $gravatar_default = $config->getGeneralSettings('gravatar_default'); if (!$photo && $use_gravatar) { $photo = shopHelper::getGravatar($contact->get('email', 'default'), 96, $gravatar_default); } else { $photo = $contact->getPhoto(96); } $contact['photo'] = $photo; // Customer orders $im = new shopOrderItemsModel(); $orders_collection = new shopOrdersCollection('search/contact_id=' . $id); $total_count = $orders_collection->count(); $orders = $orders_collection->getOrders('*,items,params', 0, $total_count); shopHelper::workupOrders($orders); foreach ($orders as &$o) { $o['total_formatted'] = waCurrency::format('%{s}', $o['total'], $o['currency']); $o['shipping_name'] = ifset($o['params']['shipping_name'], ''); $o['payment_name'] = ifset($o['params']['payment_name'], ''); // !!! TODO: shipping and payment icons } // Customer reviews $prm = new shopProductReviewsModel(); $reviews = $prm->getList('*,is_new,product', array('escape' => false, 'where' => array('contact_id' => $id), 'limit' => false)); // Customer affiliate transactions history $atm = new shopAffiliateTransactionModel(); $affiliate_history = $atm->getByContact($id); $this->view->assign('top', $top); $this->view->assign('orders', $orders); $this->view->assign('reviews', $reviews); $this->view->assign('contact', $contact); $this->view->assign('customer', $customer); $this->view->assign('contacts_url', $contacts_url); $this->view->assign('affiliate_history', $affiliate_history); $this->view->assign('contact_categories', $contact_categories); $this->view->assign('def_cur_tmpl', str_replace('0', '%s', waCurrency::format('%{s}', 0, wa()->getConfig()->getCurrency()))); $this->view->assign('point_rate', str_replace(',', '.', (double) str_replace(',', '.', wa()->getSetting('affiliate_usage_rate')))); $fields = waContactFields::getAll('person'); if (isset($fields['name'])) { unset($fields['name']); } $this->view->assign('fields', $fields); $this->view->assign('orders_default_view', $config->getOption('orders_default_view')); /* * @event backend_customer * @return array[string]array $return[%plugin_id%] array of html output * @return array[string][string]string $return[%plugin_id%]['info_section'] html output * @return array[string][string]string $return[%plugin_id%]['name_suffix'] html output * @return array[string][string]string $return[%plugin_id%]['header'] html output * @return array[string][string]string $return[%plugin_id%]['action_link'] html output */ $this->view->assign('backend_customer', wa()->event('backend_customer', $customer)); }
protected function searchPrepare($query, $auto_title = true) { if ($auto_title || !isset($this->alias_index['data'])) { $this->alias_index['data'] = 0; } //$query = urldecode($query); // sometime this urldecode broke query, better make urldecode (if needed) outside the searchPrepare // `&` can be escaped in search request. Need to split by not escaped ones only. $escapedBS = 'ESCAPED_BACKSLASH'; while (FALSE !== strpos($query, $escapedBS)) { $escapedBS .= rand(0, 9); } $escapedAmp = 'ESCAPED_AMPERSAND'; while (FALSE !== strpos($query, $escapedAmp)) { $escapedAmp .= rand(0, 9); } $query = str_replace('\\&', $escapedAmp, str_replace('\\\\', $escapedBS, $query)); $query = explode('&', $query); $model = $this->getModel(); $title = array(); foreach ($query as $part) { if (!($part = trim($part))) { continue; } $part = str_replace(array($escapedBS, $escapedAmp), array('\\', '&'), $part); $parts = preg_split("/(\\\$=|\\^=|\\*=|==|!=|>=|<=|=|>|<|@=)/uis", $part, 2, PREG_SPLIT_DELIM_CAPTURE); if ($parts) { if ($parts[0] === 'name' && $parts[1] === '*=') { $t_a = preg_split("/\\s+/", $parts[2]); $cond = array(); foreach ($t_a as $t) { $t = trim($t); if ($t) { $t = $model->escape($t, 'like'); $cond[] = "c.name LIKE '%{$t}%'"; } } $this->addWhere(implode(" AND ", $cond)); $title[] = _ws('Name') . $parts[1] . $parts[2]; } else { if ($parts[0] == 'email') { if (!isset($this->joins['email'])) { $this->joins['email'] = array('table' => 'wa_contact_emails', 'alias' => 'e'); } $title[] = waContactFields::get($parts[0])->getName() . $parts[1] . $parts[2]; $this->where[] = 'e.email' . $this->getExpression($parts[1], $parts[2]); } else { if ($model->fieldExists($parts[0])) { if ($f = waContactFields::get($parts[0])) { $title[] = $f->getName() . $parts[1] . $parts[2]; } else { $title[] = $parts[0] . $parts[1] . $parts[2]; } $this->where[] = 'c.' . $parts[0] . $this->getExpression($parts[1], $parts[2]); } else { if ($parts[0] == 'category') { if (!isset($this->joins['categories'])) { $this->joins['categories'] = array('table' => 'wa_contact_categories', 'alias' => 'cc'); } $title[] = _ws('Category') . $parts[1] . $parts[2]; $this->where[] = 'cc.category_id' . $this->getExpression($parts[1], $parts[2]); } else { $field_parts = explode('.', $parts[0]); $f = $field_parts[0]; if ($fo = waContactFields::get($f)) { $title[] = $fo->getName() . $parts[1] . $parts[2]; } $ext = isset($field_parts[1]) ? $field_parts[1] : null; $on = ":table.contact_id = c.id AND :table.field = '" . $model->escape($f) . "'"; $this->where_fields[] = $f; $op = $parts[1]; $term = $parts[2]; if ($f === 'address:country') { $al1 = $this->addJoin('wa_contact_data', $on); $whr = "{$al1}.value " . $this->getExpression($op, $term); if ($ext !== null) { $whr .= " AND {$al1}.ext = '" . $model->escape($ext) . "'"; $whr = "({$whr})"; } // search by l18n name of countries if ($op === '*=') { if (wa()->getLocale() === 'en_US') { $al2 = $this->addLeftJoin('wa_country', ":table.iso3letter = {$al1}.value"); $whr .= " OR {$al2}.name " . $this->getExpression($parts[1], $parts[2]); } else { if (wa()->getLocale() !== 'en_US') { $iso3letters = array(); $country_model = new waCountryModel(); $countries = $country_model->all(); $term = mb_strtolower($term); foreach ($countries as &$cntr) { if (mb_strpos(mb_strtolower($cntr['name']), $term) === 0) { $iso3letters[] = $cntr['iso3letter']; } } unset($cntr); if ($iso3letters) { $al2 = $this->addLeftJoin('wa_country', ":table.iso3letter = {$al1}.value"); $whr .= " OR {$al2}.iso3letter IN ('" . implode("','", $iso3letters) . "')"; } } } } $this->addWhere($whr); } else { if ($f === 'address:region') { if (strpos($term, ":") !== false) { // country_code : region_code - search by country code AND region code AND only in wa_region $term = explode(":", $term); $country_iso3 = $model->escape($term[0]); $code = $model->escape($term[1]); $al1 = $this->addJoin('wa_contact_data', $on); $whr = array(); if ($ext !== null) { $whr[] = "{$al1}.ext = '" . $model->escape($ext) . "'"; } $al2 = $this->addJoin('wa_contact_data', ":table.contact_id = c.id AND :table.field = 'address:country'"); $al3 = $this->addJoin('wa_region', ":table.code = {$al1}.value AND :table.country_iso3 = {$al2}.value"); $whr[] = "{$al3}.country_iso3 = '{$country_iso3}'"; $whr[] = "{$al3}.code = '{$code}'"; $whr = implode(" AND ", $whr); } else { $al1 = $this->addJoin('wa_contact_data', $on); $whr = "{$al1}.value" . $this->getExpression($op, $term); if ($ext !== null) { $whr .= " AND {$al1}.ext = '" . $model->escape($ext) . "'"; $whr = "({$whr})"; } if ($op === "*=") { // if search by like, search by wa_region.name but taking into account country $al2 = $this->addJoin('wa_contact_data', ":table.contact_id = c.id AND :table.field = 'address:country'"); $al3 = $this->addLeftJoin('wa_region', ":table.code = {$al1}.value AND :table.country_iso3 = {$al2}.value"); $whr .= " OR {$al3}.name " . $this->getExpression($op, $term); } } $this->addWhere($whr); } else { $on .= ' AND :table.value ' . $this->getExpression($op, $term); if ($ext !== null) { $on .= " AND :table.ext = '" . $model->escape($ext) . "'"; } $this->addJoin('wa_contact_data', $on); } } } } } } } } if ($title) { $title = implode(', ', $title); // Strip slashes from search title. $bs = '\\\\'; $title = preg_replace("~{$bs}(_|%|&|{$bs})~", '\\1', $title); } if ($auto_title && $title) { $this->addTitle($title, ' '); } }
public function execute() { $id = waRequest::request('id', 0, 'int'); if (!$id || !wa()->getUser()->getRights('shop', 'orders')) { $this->redirect(wa()->getAppUrl()); } // Order $om = new shopOrderModel(); $order = $om->getOrder($id); shopHelper::workupOrders($order, true); $order['tax'] = (double) $order['tax']; $order['discount'] = (double) $order['discount']; // Order params $opm = new shopOrderParamsModel(); $order['params'] = $opm->get($order['id']); // Order subtotal $order_subtotal = 0; foreach ($order['items'] as $i) { $order_subtotal += $i['price'] * $i['quantity']; } // Format addresses $settings = wa('shop')->getConfig()->getCheckoutSettings(); $form_fields = ifset($settings['contactinfo']['fields'], array()); $formatter = new waContactAddressSeveralLinesFormatter(); $shipping_address = shopHelper::getOrderAddress($order['params'], 'shipping'); $shipping_address = $formatter->format(array('data' => $shipping_address)); $shipping_address = $shipping_address['value']; if (isset($form_fields['address.billing'])) { $billing_address = shopHelper::getOrderAddress($order['params'], 'billing'); $billing_address = $formatter->format(array('data' => $billing_address)); $billing_address = $billing_address['value']; if ($billing_address === $shipping_address) { $billing_address = null; } } else { $billing_address = null; } // Order history $log_model = new shopOrderLogModel(); $log = $log_model->getLog($order['id']); // Customer $contact = $customer = self::getCustomer($order); $top = array(); foreach (array('email', 'phone') as $f) { if ($v = $contact->get($f, 'top,html')) { $top[] = array('id' => $f, 'name' => waContactFields::get($f)->getName(), 'value' => is_array($v) ? implode(', ', $v) : $v); } } // Workflow stuff: actions and state $workflow = new shopWorkflow(); $workflow_state = $workflow->getStateById($order['state_id']); $workflow_buttons = array(); foreach ($workflow_state->getActions() as $a_id => $action) { if ($a_id === 'edit' || $a_id === 'delete') { continue; } $workflow_buttons[] = $action->getButton(); } $this->view->assign('top', $top); $this->view->assign('log', $log); $this->view->assign('order', $order); $this->view->assign('uniqid', uniqid('f')); $this->view->assign('customer', $customer); $this->view->assign('workflow_state', $workflow_state); $this->view->assign('workflow_buttons', $workflow_buttons); $this->view->assign('shipping_address', $shipping_address); $this->view->assign('billing_address', $billing_address); $this->view->assign('order_subtotal', $order_subtotal); $this->view->assign('currency', ifempty($order['currency'], wa()->getConfig()->getCurrency())); wa()->getResponse()->setTitle(_w('Order') . ' ' . $order['id_str']); parent::execute(); }