From f7818cdf6144b6513c177230037af5647ba3907b Mon Sep 17 00:00:00 2001 From: Vitaliy Date: Thu, 10 Dec 2015 10:59:50 +0200 Subject: [PATCH] change request to massage --- .gitignore | 2 ++ gdfg.html | 557 ++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/app/backend/views/projects/edit.php | 2 +- src/app/frontend/controllers/EventsController.php | 412 ++++------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ src/app/frontend/controllers/SeriesOfLettersController.php | 25 +++++++++++++++++++++++++ src/app/frontend/views/event_email/addEdit.php | 6 +++--- src/app/tasks/EventMailTask.php | 131 ++++++++++++++++++----------------------------------------------------------------------------------------------------------------- src/lib/Database.php | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib/MyMailer/Event.php | 67 +++++++++++++++++++++++++++++++++++++++---------------------------- src/lib/MyMailer/EventAdder.php | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib/MyMailer/EventMailer.php | 6 ++++++ src/lib/MyMailer/EventOffline.php | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib/MyMailer/EventOnline.php | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib/MyMailer/EventOnlineSubscribe.php | 45 +++++++++++++++++++++++++++++++++++++++++++++ src/lib/MyMailer/EventSpy.php | 155 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib/MyMailer/EventTemplateManager.php | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib/MyMailer/Mailer.php | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++------- src/lib/MyMailer/OfflineEvent.php | 48 ------------------------------------------------ src/lib/MyMailer/OnlineEvent.php | 80 -------------------------------------------------------------------------------- src/lib/models/emailTemplates.php | 13 +++++++++++++ src/lib/models/spyEvent.php | 16 +++++++--------- src/lib/security.php | 2 ++ storage/posuda_price_list/index.html | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------------------------------------------------------------------------- storage/temp/csv/products_seo.csv | 321 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- tests/_testStuff/StuffForEventTemplateManager/dynamicBody.php | 21 +++++++++++++++++++++ tests/_testStuff/StuffForEventTemplateManager/dynamicFooter.php | 476 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/_testStuff/StuffForEventTemplateManager/dynamicHead.php | 318 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/_testStuff/StuffForEventTemplateManager/staticTemplate.php | 902 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ tests/unit/EventAdderTest.php | 44 ++++++++++++++++++++++++++++++++++++++++++++ www-backend/index.php | 12 ++++++++++-- www-tasks/index.php | 13 +++++++++++-- www/index.php | 13 +++++++++++-- 32 files changed, 2818 insertions(+), 1705 deletions(-) create mode 100644 src/lib/Database.php create mode 100644 src/lib/MyMailer/EventAdder.php create mode 100644 src/lib/MyMailer/EventMailer.php create mode 100644 src/lib/MyMailer/EventOffline.php create mode 100644 src/lib/MyMailer/EventOnline.php create mode 100644 src/lib/MyMailer/EventOnlineSubscribe.php create mode 100644 src/lib/MyMailer/EventSpy.php create mode 100644 src/lib/MyMailer/EventTemplateManager.php delete mode 100644 src/lib/MyMailer/OfflineEvent.php delete mode 100644 src/lib/MyMailer/OnlineEvent.php create mode 100644 tests/_testStuff/StuffForEventTemplateManager/dynamicBody.php create mode 100644 tests/_testStuff/StuffForEventTemplateManager/dynamicFooter.php create mode 100644 tests/_testStuff/StuffForEventTemplateManager/dynamicHead.php create mode 100644 tests/_testStuff/StuffForEventTemplateManager/staticTemplate.php create mode 100644 tests/unit/EventAdderTest.php diff --git a/.gitignore b/.gitignore index 27b8322..8a6a667 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ tmp .idea +/vendor +tests/_output/* \ No newline at end of file diff --git a/gdfg.html b/gdfg.html index 5503b68..54f70a2 100644 --- a/gdfg.html +++ b/gdfg.html @@ -1,553 +1,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - -
Заманчивые предложенияЗагрузить картинки
-
-
- - - - - - - -
-
-
- - - - -
- - - - - - -
- - - - -
-
- - - - - - - -
- - - - - - - - - -
(044) 581-67-15(044) 451-48-59
(050) 464-48-59(067) 464-48-59
-
- - - - -
(093) 026-86-64
-
-
- - - - - - - - - - -
Личный кабинет
Обратная связь
Видеообзоры
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- - - - - - - -
О компанииДоставка и оплатаАкцииСоветы профессионалов
-
-
- - - - - - - - - -
- - - - - - - -
- СЕМЕНА
ОВОЩЕЙ
-
-
- - - - - - - -
- СЕМЕНА
ЦВЕТОВ
-
-
- - - - - - - -
- Удобрения и
средства
защиты
-
-
- - - - - - - -
- Газонные
травы
-
-
- - - - - - - -
- Биопрепараты -
-
- - - - - - - -
- Товары
для сада
и огорода
-
-
-
- - - - - - - - - - -
- - - - -
- - - - - - - - - - - - - -
{{name}}!
- - - - -
- Мы напоминали вам, но, возможно, письмо затерялось.
- В корзине остались зарезервированные вещи на ваше имя. Они могут быть проданы другим пользователям. Не забудьте - оформить заказ или позвоните менеджеру, он поможет. -
-
-
-
- - - - -
- - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - -
(044) 581-67-15 (044) 451-48-59(050) 464-48-59(067) 464-48-59
-
- - - - - - - -
Ваш заказ еще не оплачен и ждет обработки.
-
-
-
- - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - -
- - - - - - - - - - - - -
- - - - - - - - - - - -
{{item_name}}
{{quantity}}шт по цене {{price}} грн
-
-
-
- - - - - - - - - - - - - - - - - - - -
Итого: {{sum}} грн
Телефон: {{phone}}
Адрес доставки: {{address}}
Email: {{email}}
Способ доставки: 
Способ оплаты: Оплата при отриманні товару
-
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - -
- Завершить оформление заказа -
-
- Возвращайтесь к нам.
- Возможно, у вас возникли проблемы? Тогда обращайтесь в службу поддержки, и мы
- обязательно поможем! -
Мы работаем:
-
    -
  • понедельник-пятница: с 9:00 до 18:00
  • -
  • суббота: с 10:00 до 16:00
  • -
  • воскресенье: выходной
  • -
-
С уважением, служба поддержки semena.in.ua
-
-
-
-
-
-
-
- - - - -
- - - - - - -
- - - - - - - -
semena.in.ua
Адрес центрального офиса:
- Киев, ул. Садовая, 95
-
- - - - - - -
(044) 581-67-15
(044) 451-48-59
(050) 464-48-59
(067) 464-48-59
(093) 026-86-64
-
- - - - - - - - - - - - - - - - -
- - - - - -
-
- - - - -
- отписаться от рассылки
-
- - - - -
- Настроить рассылку
-
-
-
-
- - - - -
Вы получили это письмо, потому что зарегистрированы на сайте - semena.in.ua
-
- - \ No newline at end of file +Argument 2 passed to MyMailer\EventTemplateManager::prepareEventData() +must be an instance of emailTemplates, string given, called +in /home/dev/www/seo/src/lib/MyMailer/EventAdder.php on line 54 and defined in +/home/dev/www/seo/src/lib/MyMailer/EventTemplateManager.php on line 47
\ No newline at end of file diff --git a/src/app/backend/views/projects/edit.php b/src/app/backend/views/projects/edit.php index c983dfc..43af079 100644 --- a/src/app/backend/views/projects/edit.php +++ b/src/app/backend/views/projects/edit.php @@ -1,5 +1,5 @@

Изменить проект

-
+
Название проекта diff --git a/src/app/frontend/controllers/EventsController.php b/src/app/frontend/controllers/EventsController.php index 0cfee15..17a6d85 100644 --- a/src/app/frontend/controllers/EventsController.php +++ b/src/app/frontend/controllers/EventsController.php @@ -4,344 +4,14 @@ namespace controllers; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +use MyMailer\EventAdder; + class EventsController extends \Phalcon\Mvc\Controller { - private $post; - private $host; - private $temp_model; - private $model; - private $project_model; - private $customers_model; - private $event_info; - private $delivery_model; - private $customer; - private $spy_model; - - private function insertPost( $post){ - - $this->host = $_SERVER['HTTP_ORIGIN']; - - $this->post = $post; - - $this->post['project_id'] = $this->project_model->getProjectId($this->host)->id; - - if(!$this->post['project_id']){ - throw new \Exception("Project {$this->host} not found"); - } else { - print_r($this->post); - } - - } - - private function addOneCustomer($template ){ - - $model = new \customersEmailList(); - if($model->save($this->post)){ - $this->MyMailer->OnlineEvent->SendForSelect($template, array($this->post)); - }; - } - - private function insertEventData(){ - $data = $this->model->findFirst("name = '{$this->post['event']}' AND email_type = 'event_online' AND project_id = {$this->post['project_id']} "); - if($data instanceof \eventEmail){ - return $data; - } else { - throw new \Exception("EventData for event {$this->post['event']} in project {$this->host} not found"); - } - } - - - private function insertItemData(){ - if(isset($this->post['item_data']) && !empty($this->post['item_data'])){ - return json_decode($this->post['item_data']); - } else { - return array(); - } - } - - private function prepareEventData($item_data, $template){ - if($template->text_type=='static' ){ - if( $item_data ){ - $template->text = $this->MyMailer->OnlineEvent->itemSet( $template->toArray(), $item_data ); - } - $template->text = $this->MyMailer->OnlineEvent->dataSet( $template->text, $this->post ); - print $template->text; - } else { - - $template->text = $this->MyMailer->OnlineEvent->itemDynamicSet( $template->toArray(), $item_data ); - unset($this->post['item_data']); - $template->text = $this->MyMailer->OnlineEvent->dataSet( $template->text, $this->post ); - print $template->text; - } - } - - /** - * @param $data - * @param $template - * @throws \Exception - */ - private function sendDelivery($data, $template){ - if($this->post['email']){ - - $customers = $this->customers_model->findFirst("email = '{$this->post['email']}'"); - - if(isset($this->post['event']) && !empty($this->post['event'])) { - if(!$customers && $this->post['event'] == 'registration'){ - - $this->addOneCustomer($template); - - $customers = $this->customers_model->findFirst("email = '{$this->post['email']}'"); - - $this->event_info->event_id = $data->id; - $this->event_info->customer_id = $customers->id; - $this->event_info->project_id = $this->post['project_id']; - - - $this->event_info->save(); - $this->addLetersList($this->post['project_id']); - - } else { - - $this->event_info->event_id = $data->id; - $this->event_info->customer_id = $customers->id; - $this->event_info->project_id = $this->post['project_id']; - if($data->unique) { - $unique = $this->event_info->findFirst("event_id = {$data->id} AND customer_id = {$customers->id} AND project_id = {$this->post['project_id']}"); - if($unique) { - throw new \Exception(); - } - } - - $this->MyMailer->OnlineEvent->SendDelivery($this->delivery_model,$template->toArray(),$data->toArray(),array($customers->toArray())); - - $this->event_info->save(); - } - - } else { - throw new \Exception(); - } - - } else { - throw new \Exception("email missing"); - } - } - - - private function getCustomer(){ - $user = $this->customers_model->findFirst("email = '{$this->post['email']}' AND project_id = {$this->post['project_id']} "); - if($user instanceof \customersEmailList){ - return $user; - } else { - $user['email'] = $this->post['email']; - $user['name'] = isset($this->post['name']) ? $this->post['name']:''; - $user['project_id'] = $this->post['project_id']; - $user['customer_id'] = isset($this->post['customer_id']) ? $this->post['customer_id']:''; - $user['gender'] = isset($this->post['gender']) ? $this->post['gender']:''; - $user['birthday'] = isset($this->post['birthday']) ? $this->post['birthday']:''; - $this->customers_model->save($user); - return $this->customers_model->findFirst("email = '{$this->post['email']}' AND project_id = {$this->post['project_id']} "); - } - } - - private function saveSpyData(){ - if(isset($this->post['action'])){ - $data['project_id'] = $this->post['project_id']; - $data['customer_id'] = $this->customer->id; - $data['action'] = $this->post['action']; - $data['date'] = date("Y-m-d H:i:s"); - $data['target_id'] = isset($this->post['item_id']) ? $this->post['item_id']:null; - if($data['target_id']){ - - $this->spy_model = \spyEvent::findFirst("customer_id = '{$this->customer->id}' AND project_id = {$this->post['project_id']} AND target_id = {$data['target_id']}"); - if( $this->spy_model instanceof \spyEvent){ - $this->spy_model->save($data); - }else{ - $this->spy_model = new \spyEvent(); - $this->spy_model->save( $data ); - } - }else{ - $this->spy_model = new \spyEvent(); - $this->spy_model->save( $data ); - } - - return $this->spy_model->id; - }else{ - throw new \Exception("action missing"); - } - - } - - private function getSpyData(){ - if(isset($this->post['action'])){ - $data['project_id'] = $this->post['project_id']; - $data['customer_id'] = $this->customer->id; - $data['target_id'] = isset($this->post['item_id']) ? $this->post['item_id']:null; - - $this->spy_model = \spyEvent::findFirst("customer_id = '{$this->customer->id}' AND project_id = {$this->post['project_id']} AND target_id = {$data['target_id']}"); - - if( $this->spy_model instanceof \spyEvent){ - $id = $this->spy_model->id; - $this->spy_model->delete(); - return $id; - }else{ - throw new \Exception("spy event not found"); - } - - - - }else{ - throw new \Exception("action missing"); - } - - } - - private function finishSpyOrder(){ - if(isset($this->post['action'])){ - $data['project_id'] = $this->post['project_id']; - $data['customer_id'] = $this->customer->id; - $data['action'] = $this->post['action']; - $data['date'] = date("Y-m-d H:i:s"); - $data['target_id'] = isset($this->post['item_id']) ? $this->post['item_id']:null; - $this->spy_model = \spyEvent::query() - ->where("project_id = :project_id:") - ->andWhere("action ='order_add'") - ->andWhere("customer_id =:customer_id:") - ->bind(array("project_id" => $this->post['project_id'], "customer_id"=>$this->customer->id)) - ->execute(); - - foreach($this->spy_model as $model){ - - $model->update(["action" =>'finish']); - } - - $events_info = \eventInfo::query() - ->where("project_id = :project_id:") - ->andWhere("event_trigger ='order_time_after'") - ->andWhere("customer_id =:customer_id:") - ->bind(array("project_id" => $this->post['project_id'], "customer_id"=>$this->customer->id)) - ->execute(); - - foreach($events_info as $event_info ){ - $event_info->delete(); - } - - - }else{ - throw new \Exception("action missing"); - } - - } - - - private function saveSpyOrder($spyID,$status){ - - if(isset($this->post['item_id'])){ - - - - $data['item_name'] = isset($this->post['item_name']) ? $this->post['item_name']:null; - $data['item_id'] = $this->post['item_id']; - $data['item_url'] = isset($this->post['item_url']) ? $this->post['item_url']:null; - $data['item_image'] = isset($this->post['item_image']) ? $this->post['item_image']:null; - $data['quantity'] = isset($this->post['quantity']) ? $this->post['quantity']:null; - $data['price'] = isset($this->post['price']) ? $this->post['price']:null; - $data['spy_event_id'] = $spyID; - $data['status'] = $status; - if($status == 'added'){ - $model = \spyStore::findFirst("item_id='{$data['item_id']}' AND spy_event_id = {$spyID}"); - if($model instanceof \spyStore){ - $model->save( $data ); - } else { - $model = new \spyStore(); - $model->save( $data ); - } - } else if($status == 'deleted'){ - $model = \spyStore::findFirst("item_id='{$data['item_id']}' AND spy_event_id = {$spyID}"); - if($model instanceof \spyStore){ - $model->delete(); - } else { - throw new \Exception("there is no item with id {$data['item_id']}"); - } - } - - - - - - }else{ - throw new \Exception("missing item id"); - } - - } - - private function getEventDate($first_delivery,$time){ - $now = date("Y-m-d"); - $EmailDate = new \DateTime($first_delivery); - $EmailDate->modify($time); - return $EmailDate->format('Y-m-d'); - } - - - function getNextDate($day) - { - $ret = false; - for ($i=1; $i<=7; $i++) - { - if (date('w',strtotime('+'.$i.' day'))==$day) - { - $ret = date('Y-m-d',strtotime('+'.$i.' day')); - break; - } - } - return $ret; - } - - private function addLetersList($project_id){ - $data = \seriesOfLetters::find("project_id ={$project_id} "); - - foreach($data as $row){ - - $letters = explode(',',$row->letters); - - - $days = count($letters); - for($i=0; $i<$days; $i++){ - $now = date('N'); - $row->first_delivery = $this->getNextDate($row->first_delivery); - $date = $this->getEventDate($row->first_delivery, "+". ($i)*$row->period_val ." days"); - $event = new \eventInfo(); - $event->customer_id = $this->customers_model->id; - $event->event_id = $letters[$i]; - $event->next_delivery = $date; - $event->project_id = $project_id; - $event->event_trigger = 'series_of_letter'; - $event->save(); - } - - } - } - - - private function subscribeNewCustomer(){ - $user['email'] = $this->post['email']; - $user['name'] = isset($this->post['name']) ? $this->post['name']:''; - $user['project_id'] = $this->post['project_id']; - $customer = $this->customers_model->findFirst("email = '{$this->post['email']}'"); - if($customer instanceof \customersEmailList){ - - } else { - $this->customers_model->save($user); - $this->addLetersList($this->post['project_id']); - - - } - - } - public function eventMailerAction() { header('Access-Control-Allow-Origin: *'); @@ -349,85 +19,11 @@ class EventsController extends \Phalcon\Mvc\Controller session_write_close(); try{ - /* - * $this->project_model = new \projects(); - * $this->customers_model = new \customersEmailList(); - */ - - $this->project_model = new \projects(); - $this->customers_model = new \customersEmailList(); - - - - - $this->insertPost($this->request->get()); - - - if(isset($this->post['event_type'])){ - switch ($this->post['event_type']) { - case 'add_subscribe': - - $this->subscribeNewCustomer(); - - - break; - case 'online_event': - $this->model = new \eventEmail(); - $this->delivery_model = new \delivery(); - $this->temp_model = new \emailTemplates(); - $this->event_info = new \eventInfo(); - - $data = $this->insertEventData(); - - $template = $data->emailTemplates; - - $item_data = $this->insertItemData(); - - $this->MyMailer->OnlineEvent->setFromName($this->project_model->getProjectId($this->host)->name); - - $this->prepareEventData($item_data, $template); - - $template->text = $this->UTMParser->parse($data->toArray(), $template->toArray()); - - $this->sendDelivery( $data, $template); - break; - - case 'spy_event': - - $this->customer = $this->getCustomer(); - - - switch ($this->post['action']) { - case 'order_add': - - $spyID = $this->saveSpyData(); - $this->saveSpyOrder($spyID, 'added'); - - break; - - case 'order_delete': - $spyID = $this->getSpyData(); - $this->saveSpyOrder($spyID, 'deleted'); - - break; - case 'order_finish': - $spyID = $this->saveSpyData(); - $this->finishSpyOrder($spyID, 'finish'); - - break; - default: - throw new \Exception("Unknown event action {$this->post['action']}"); - } - break; - default: - throw new \Exception("Unknown event type"); - } - } else { - throw new \Exception("Unknown event type"); - } + $EventAdder = new EventAdder($this->request->get()); + $EventAdder->callEventFactory(); } diff --git a/src/app/frontend/controllers/SeriesOfLettersController.php b/src/app/frontend/controllers/SeriesOfLettersController.php index 26c7425..c49b098 100644 --- a/src/app/frontend/controllers/SeriesOfLettersController.php +++ b/src/app/frontend/controllers/SeriesOfLettersController.php @@ -22,9 +22,12 @@ class SeriesOfLettersController extends \Phalcon\Mvc\Controller public function addAction(){ + + if( $this->request->isPost() ) { + $data['project_id'] = $this->session->get('project-id'); $data['name'] = $this->request->getPost('name', 'string', NULL ); $data['status'] = $this->request->getPost('status')?$this->request->getPost('status'):0 ; @@ -33,11 +36,33 @@ class SeriesOfLettersController extends \Phalcon\Mvc\Controller $data['first_delivery'] = $this->request->getPost('first_delivery' ); $data['letters'] = implode(',',$data['event']); + + + $model = new \seriesOfLetters(); if( !empty( $data['name'] )) { if( $model->save( $data ) ) { + $users = \customersEmailList::find("project_id = {$this->session->get('project-id')}"); + foreach($users as $user){ + $letters = explode(',',$model->letters); + + + $days = count($letters); + for($i=0; $i<$days; $i++){ + $now = date('N'); + $model->first_delivery = $this->getNextDate($model->first_delivery); + $date = $this->getEventDate($model->first_delivery, "+". ($i)*$model->period_val ." days"); + $event = new \eventInfo(); + $event->customer_id = $this->$user->id; + $event->event_id = $letters[$i]; + $event->next_delivery = $date; + $event->project_id =$this->session->get('project-id'); + $event->event_trigger = 'series_of_letter'; + $event->save(); + } + } $this->flash->success( 'Сохранение прошло успешно' ); return $this->response->redirect('series_of_letters/index'); } diff --git a/src/app/frontend/views/event_email/addEdit.php b/src/app/frontend/views/event_email/addEdit.php index 1033674..552f873 100644 --- a/src/app/frontend/views/event_email/addEdit.php +++ b/src/app/frontend/views/event_email/addEdit.php @@ -66,9 +66,9 @@

Товар добавлен в корзину, но не оформлен спустя:

'>
diff --git a/src/app/tasks/EventMailTask.php b/src/app/tasks/EventMailTask.php index 4001cac..90fee74 100644 --- a/src/app/tasks/EventMailTask.php +++ b/src/app/tasks/EventMailTask.php @@ -29,9 +29,10 @@ class EventMailTask extends \Phalcon\CLI\Task } public function startEventsAction(){ - $this->actionEventAction(); - $this->orderTimeAfterAction(); - $this->seriesOfLettersAction(); + + //$this->actionEventAction(); + $this->orderTimeAfterAction(); //work + $this->seriesOfLettersAction();//work } public function seriesOfLettersAction(){ @@ -57,14 +58,20 @@ class EventMailTask extends \Phalcon\CLI\Task }else { continue; } - $template = \emailTemplates::findFirst("event_id = {$event->event_id} AND project_id = {$project->id}")->toArray(); + //$template = \emailTemplates::findFirst("event_id = {$event->event_id} AND project_id = {$project->id}")->toArray(); $this->post['name']=$customers->name; $this->post['email']=$customers->email; $this->post['phone']=$customers->phone; $this->post['address']=$customers->address; - $this->sendMailData($template,$customers->toArray(),$eventEmail,$project); + //$this->sendMailData($template,$customers->toArray(),$eventEmail,$project); + + $OfflineEvent = new \MyMailer\EventOffline(); + + $event_data = []; + + $OfflineEvent->sendEventDelivery($customers->toArray(),$project,$event,$eventEmail,$event_data,$this->post); $event->last_delivery = date("Y-m-d H:i:s"); $event->delete(); @@ -131,13 +138,14 @@ class EventMailTask extends \Phalcon\CLI\Task } } - $users = $model->getSpyUsers( $this->modelsManager, $project); + $users = $model->getSpyUsers( $this->modelsManager, $project, $event->after_val.' '.$event->after_val_type); foreach( $users as $user){ - $event_data = $model->spyTimeAfter($project, $user['id'])->toArray(); + $event_data = $model->spyTimeAfter($project->id, $user['id'])->toArray(); $customers = $customers_model->findFirst("id={$user['id']}"); if($customers instanceof customersEmailList && $customers->checkEventForUser($event->id, $project->id)){ + $sum = 0; foreach($event_data as $item_one){ $sum += (integer)$item_one['price']*$item_one['quantity']; @@ -148,8 +156,9 @@ class EventMailTask extends \Phalcon\CLI\Task $this->post['address']=$customers->address; $this->post['sum']=$sum; + $OfflineEvent = new \MyMailer\EventOffline(); - $this->sendMail($customers->toArray(),$project,$event,$event->eventEmail->toArray(),$event_data); + $OfflineEvent->sendEventDelivery($customers->toArray(),$project,$event,$event->eventEmail->toArray(),$event_data,$this->post); } @@ -158,41 +167,12 @@ class EventMailTask extends \Phalcon\CLI\Task //$customers = $project->findUsersTimeAfter()->toArray(); } - } - } - - /** - *TODO: $this->post array with dynamic data for static letters, need to change in some variable - * - * - * - **/ - private function prepareEventData($item_data, $template){ - - if($template['text_type']=='static' ){ - - - if( $item_data ){ - $template['text'] = $this->MyMailer->OnlineEvent->itemSet( $template, $item_data ); - } - $template['text'] = $this->MyMailer->OnlineEvent->dataSet( $template['text'], $this->post ); - - - - - } else { - - if( $item_data ) { - $template['text'] = $this->MyMailer->OfflineEvent->itemDynamicSet($template, $item_data); - } - $template['text'] = $this->MyMailer->OnlineEvent->dataSet( $template['text'], $this->post ); } - return $template['text']; - } + private function eventByTrigger($project, $trigger){ $result = array(); @@ -216,85 +196,10 @@ class EventMailTask extends \Phalcon\CLI\Task - private function getEventInfo($event, $customers,$project){ - $info = \eventInfo::findFirst("event_id = {$event->id} AND customer_id = {$customers['id']}"); - if($info instanceof \eventInfo){ - return $info; - } else { - $info = new \eventInfo(); - $info->customer_id = $customers['id']; - $info->event_id = $event->id; - $info->project_id = $project->id; - $info->event_trigger = $event->event_trigger; - $info->save(); - return $info; - } - } - - - /** - * send Email - * @params array $customers - * @params object $project - * @params object $offline_data_model - * @params array $event - * @params array $event_data - **/ - public function sendMail($customers,$project,$offline_data_model, $event, $event_data = [] ){ - - if($customers){ - - $event_info = $this->getEventInfo($offline_data_model,$customers,$project); - - $template = \emailTemplates::findFirst("event_id = {$event['id']} AND project_id = {$project->id}")->toArray(); - - - -// if(isset($get['item_data']) && !empty($get['item_data'])){ -// $item_data = json_decode($get['item_data']); -// -// $template->text = $this->UTMParser->itemSet( $template->toArray(), $item_data ); -// -// } - $this->sendMailData($template,$customers,$event,$project,$event_data); - $event_info->last_delivery = date("Y-m-d H:i:s"); - $event_info->save(); -// $model = \delivery::find(); -// foreach($model->toArray() as $data){ -// $result = $this->MyMailer->getCampaignDeliveryStats( $data['campaign_id']); -// -// $result['status'] = $this->MyMailer->getDeliveryStatus( $data['campaign_id']); -// print_r($result); -// } -// $model->status = $this->MyMailer->getCampaignDeliveryStats( $id); - } - } - - - /** - * send Email - * @params array $customers - * @params object $project - * @params array $event - * @params array $event_data - * @params array $template - **/ - - private function sendMailData($template,$customers,$event,$project,$event_data=[]) - { - $template['text'] = $this->prepareEventData($event_data, $template); - - $template['text'] = $this->UTMParser->parse($event, $template); - - $this->MyMailer->OfflineEvent->setFromName($project->name); - - $this->MyMailer->OfflineEvent->SendDelivery(new \delivery(),$template,$event,[$customers]); - - } diff --git a/src/lib/Database.php b/src/lib/Database.php new file mode 100644 index 0000000..d988658 --- /dev/null +++ b/src/lib/Database.php @@ -0,0 +1,210 @@ + | + | Eduar Carvajal | + | Nikita Vershinin | + +------------------------------------------------------------------------+ +*/ + +use Phalcon\Db; +use Phalcon\Session\Adapter; +use Phalcon\Session\AdapterInterface; +use Phalcon\Session\Exception; +/** + * Phalcon\Session\Adapter\Database + * Database adapter for Phalcon\Session + */ +class Database extends Adapter implements AdapterInterface +{ + /** + * Flag to check if session is destroyed. + * + * @var boolean + */ + protected $isDestroyed = false; + /** + * {@inheritdoc} + * + * @param array $options + * + * @throws \Phalcon\Session\Exception + */ + public function __construct($options = null) + { + if (!isset($options['db'])) { + throw new Exception("The parameter 'db' is required"); + } + if (!isset($options['table'])) { + throw new Exception("The parameter 'table' is required"); + } + if (!isset($options['column_session_id'])) { + $options['column_session_id'] = 'session_id'; + } + if (!isset($options['column_data'])) { + $options['column_data'] = 'data'; + } + if (!isset($options['column_created_at'])) { + $options['column_created_at'] = 'created_at'; + } + if (!isset($options['column_modified_at'])) { + $options['column_modified_at'] = 'modified_at'; + } + parent::__construct($options); + session_set_save_handler( + array($this, 'open'), + array($this, 'close'), + array($this, 'read'), + array($this, 'write'), + array($this, 'destroy'), + array($this, 'gc') + ); + } + /** + * {@inheritdoc} + * @return boolean + */ + public function open() + { + return true; + } + /** + * {@inheritdoc} + * @return boolean + */ + public function close() + { + return false; + } + /** + * {@inheritdoc} + * @param string $sessionId + * + * @return string + */ + public function read($sessionId) + { + $maxlifetime = (int) ini_get('session.gc_maxlifetime'); + $options = $this->getOptions(); + $row = $options['db']->fetchOne( + sprintf( + 'SELECT %s FROM %s WHERE %s = ? AND COALESCE(%s, %s) + %d >= ?', + $options['db']->escapeIdentifier($options['column_data']), + $options['db']->escapeIdentifier($options['table']), + $options['db']->escapeIdentifier($options['column_session_id']), + $options['db']->escapeIdentifier($options['column_modified_at']), + $options['db']->escapeIdentifier($options['column_created_at']), + $maxlifetime + ), + Db::FETCH_NUM, + array($sessionId, time()) + ); + if (empty($row)) { + return ''; + } + return $row[0]; + } + /** + * {@inheritdoc} + * @param string $sessionId + * @param string $data + * + * @return boolean + */ + public function write($sessionId, $data) + { + if ($this->isDestroyed || empty($data)) { + return false; + } + $options = $this->getOptions(); + $row = $options['db']->fetchOne( + sprintf( + 'SELECT COUNT(*) FROM %s WHERE %s = ?', + $options['db']->escapeIdentifier($options['table']), + $options['db']->escapeIdentifier($options['column_session_id']) + ), + Db::FETCH_NUM, + array($sessionId) + ); + if (!empty($row) && intval($row[0]) > 0) { + return $options['db']->execute( + sprintf( + 'UPDATE %s SET %s = ?, %s = ? WHERE %s = ?', + $options['db']->escapeIdentifier($options['table']), + $options['db']->escapeIdentifier($options['column_data']), + $options['db']->escapeIdentifier($options['column_modified_at']), + $options['db']->escapeIdentifier($options['column_session_id']) + ), + array($data, time(), $sessionId) + ); + } else { + return $options['db']->execute( + sprintf( + 'INSERT INTO %s (%s, %s, %s, %s) VALUES (?, ?, ?, NULL)', + $options['db']->escapeIdentifier($options['table']), + $options['db']->escapeIdentifier($options['column_session_id']), + $options['db']->escapeIdentifier($options['column_data']), + $options['db']->escapeIdentifier($options['column_created_at']), + $options['db']->escapeIdentifier($options['column_modified_at']) + ), + array($sessionId, $data, time()) + ); + } + } + /** + * {@inheritdoc} + * @return boolean + */ + public function destroy($session_id = null) + { + if (!$this->isStarted() || $this->isDestroyed) { + return true; + } + if (is_null($session_id)) { + $session_id = $this->getId(); + } + $this->isDestroyed = true; + $options = $this->getOptions(); + $result = $options['db']->execute( + sprintf( + 'DELETE FROM %s WHERE %s = ?', + $options['db']->escapeIdentifier($options['table']), + $options['db']->escapeIdentifier($options['column_session_id']) + ), + array($session_id) + ); + session_regenerate_id(); + return $result; + } + /** + * {@inheritdoc} + * @param integer $maxlifetime + * + * @return boolean + */ + public function gc($maxlifetime) + { + $options = $this->getOptions(); + return $options['db']->execute( + sprintf( + 'DELETE FROM %s WHERE COALESCE(%s, %s) + %d < ?', + $options['db']->escapeIdentifier($options['table']), + $options['db']->escapeIdentifier($options['column_modified_at']), + $options['db']->escapeIdentifier($options['column_created_at']), + $maxlifetime + ), + array(time()) + ); + } +} \ No newline at end of file diff --git a/src/lib/MyMailer/Event.php b/src/lib/MyMailer/Event.php index 13b90a1..9ef8dc7 100644 --- a/src/lib/MyMailer/Event.php +++ b/src/lib/MyMailer/Event.php @@ -3,45 +3,56 @@ namespace MyMailer; class Event extends Mailer{ - public function SendForSelect($template, $users) - { - foreach($users as $user){ - $this->setToMail($user['email']); - $this->setMailMessage($template->text); - $this->setTitle($template->title); - $this->SendEmail(); - } - } + public function addLettersList($project_id,$customer_id){ + $data = \seriesOfLetters::find("project_id ={$project_id} "); - //send for selected users from list - public function SendDelivery($model,$template, $data, $users =array() ) - { + foreach($data as $row){ + + $letters = explode(',',$row->letters); - if(!$users) { - $users = $this->getUsers($data['users_id']); + $days = count($letters); + for($i=0; $i<$days; $i++){ + $now = date('N'); + $row->first_delivery = $this->getNextDate($row->first_delivery); + $date = $this->getEventDate($row->first_delivery, "+". ($i)*$row->period_val ." days"); + $event = new \eventInfo(); + $event->customer_id = $customer_id; + $event->event_id = $letters[$i]; + $event->next_delivery = $date; + $event->project_id = $project_id; + $event->event_trigger = 'series_of_letter'; + $event->save(); + } } + } + + private function getEventDate($first_delivery,$time){ + $now = date("Y-m-d"); + $EmailDate = new \DateTime($first_delivery); + $EmailDate->modify($time); + return $EmailDate->format('Y-m-d'); + } - $this->setToMail($users,true); + function getNextDate($day) + { + $ret = false; + for ($i=1; $i<=7; $i++) + { + if (date('w',strtotime('+'.$i.' day'))==$day) + { + $ret = date('Y-m-d',strtotime('+'.$i.' day')); + break; + } + } + return $ret; + } - $this->setMailMessage($template['text']); - $this->setTitle($template['title']); - $campaign_id = $this->mailer->createCampaignDelivery($this->to_email, $this->from_email, $this->from_name, $this->title, $this->mailMessage); - $delivery = array( - 'campaign_id' => $campaign_id, - 'campaign' => $data['utm_campaign'], - 'name' => $data['name'], - 'event_id' => $data['id'], - 'status' => '0', - 'project_id' => $data['project_id'] - ); - $model->save($delivery); - } } \ No newline at end of file diff --git a/src/lib/MyMailer/EventAdder.php b/src/lib/MyMailer/EventAdder.php new file mode 100644 index 0000000..f2e8aeb --- /dev/null +++ b/src/lib/MyMailer/EventAdder.php @@ -0,0 +1,135 @@ +host = $_SERVER['HTTP_ORIGIN']; + + $this->post = $post; + + $project = $project_model->getProjectId($this->host); + + $this->post['project_id'] = $project->id; + + $this->post['project_name'] = $project->name; + + if(!$this->post['project_id']){ + throw new \Exception("Project {$this->host} not found"); + } else { + print_r($this->post); + } + + } + + public function callEventFactory(){ + + if(isset($this->post['event_type'])){ + switch ($this->post['event_type']) { + case 'add_subscribe': + + + $event = new EventOnlineSubscribe(); + + + + $customer = $event->subscribeNewCustomer($this->post); + + $event->addLatterListToNewCustomer($this->post,$customer); + + $templateManager = new EventTemplateManager(); + + $data = $templateManager->insertEventData($this->post['event'],$this->host,$this->post['project_id'],'event_online'); + + $item_data = $templateManager->insertItemData($this->post); + + $template = $templateManager->prepareTemplate($data); + + $template = $templateManager->prepareEventData($item_data, $template, $this->post); + + $MyMailer = new EventMailer(); + + $MyMailer->setFromName($this->post['project_name']); + + $event->sendEventDelivery($this->post, $data, $template); + + break; + case 'online_event': + + $templateManager = new EventTemplateManager(); + + $data = $templateManager->insertEventData($this->post['event'],$this->host,$this->post['project_id'],'event_online'); + + $item_data = $templateManager->insertItemData($this->post); + + $template = $templateManager->prepareTemplate($item_data,$data); + + $template = $templateManager->prepareEventData([], $template, $this->post); + + $event = new EventOnline(); + + $event->sendEventDelivery( $this->post, $data, $template); + + break; + + case 'spy_event': + + $spyEvent = new EventSpy(); + + $customer = $spyEvent->getCustomer($this->post); + + + switch ($this->post['action']) { + case 'order_add': + + $spyID = $spyEvent->saveSpyData($this->post,$customer); + $spyEvent->saveSpyOrder($spyID, 'added',$this->post); + + break; + + case 'order_delete': + $spyID = $spyEvent->getSpyData($this->post,$customer); + $spyEvent->saveSpyOrder($spyID, 'deleted',$this->post); + + break; + case 'order_finish': + + + $model = new \spyEvent(); + + $item_data = $model->spyTimeAfter($this->post['project_id'], $customer->id)->toArray(); + + $templateManager = new EventTemplateManager(); + + $data = $templateManager->insertEventData($this->post['event'],$this->host,$this->post['project_id'],'event_online'); + + $template = $templateManager->prepareTemplate($data); + + $template = $templateManager->prepareEventData($item_data, $template, $this->post); + + $spyEvent->sendEventDelivery( $this->post, $data, $template); + + $spyID = $spyEvent->saveSpyData($this->post,$customer); + $spyEvent->finishSpyOrder($this->post,$customer); + + break; + + default: + throw new \Exception("Unknown event action {$this->post['action']}"); + } + + break; + default: + throw new \Exception("Unknown event type"); + } + } else { + throw new \Exception("Unknown event type"); + } + } +} \ No newline at end of file diff --git a/src/lib/MyMailer/EventMailer.php b/src/lib/MyMailer/EventMailer.php new file mode 100644 index 0000000..a01ed80 --- /dev/null +++ b/src/lib/MyMailer/EventMailer.php @@ -0,0 +1,6 @@ +id} AND customer_id = {$customers['id']}"); + + if($info instanceof \eventInfo){ + return $info; + } else { + $info = new \eventInfo(); + $info->customer_id = $customers['id']; + $info->event_id = $event->id; + $info->project_id = $project->id; + $info->event_trigger = $event->event_trigger; + $info->save(); + return $info; + } + } + + /** + * @param $customers + * @param $project + * @param $offline_data_model + * @param $event + * @param $event_data + * @param $post + * @throws \Exception + */ + public function sendEventDelivery($customers,$project,$offline_data_model, $event,$event_data,$post ){ + + if($customers){ + + $event_info = $this->getEventInfo($offline_data_model,$customers,$project); + + $templateManager = new \MyMailer\EventTemplateManager(); + + $data = $templateManager->insertEventData($event['name'],$project->url,$project->id, 'event_offline'); + + $template = $templateManager->prepareTemplate($data); + + $template = $templateManager->prepareEventData($event_data, $template, $post); + + $MyMailer = new EventMailer(); + + $MyMailer->setFromName($project->name); + + $MyMailer->SendDelivery($template->toArray(),$event,[$customers]); + + + $event_info->last_delivery = date("Y-m-d H:i:s"); + $event_info->save(); + + } + } +} \ No newline at end of file diff --git a/src/lib/MyMailer/EventOnline.php b/src/lib/MyMailer/EventOnline.php new file mode 100644 index 0000000..928d3c0 --- /dev/null +++ b/src/lib/MyMailer/EventOnline.php @@ -0,0 +1,57 @@ +findFirst("email = '{$post['email']}'"); + + $event_info = new \eventInfo(); + + + if(isset($post['event']) && !empty($post['event'])) { + + + $event_info->event_id = $data->id; + $event_info->customer_id = $customers->id; + $event_info->project_id = $post['project_id']; + + if($data->unique) { + $unique = $event_info->findFirst("event_id = {$data->id} AND customer_id = {$customers->id} AND project_id = {$post['project_id']}"); + if($unique) { + throw new \Exception(); + } + } + + + $MyMailer = new EventMailer(); + + $MyMailer->setFromName($post['project_name']); + + $MyMailer->SendDelivery($template->toArray(),$data->toArray(),array($customers->toArray())); + + $event_info->save(); + + + } else { + throw new \Exception(); + } + + } else { + throw new \Exception("email missing"); + } + } + + +} \ No newline at end of file diff --git a/src/lib/MyMailer/EventOnlineSubscribe.php b/src/lib/MyMailer/EventOnlineSubscribe.php new file mode 100644 index 0000000..1dc0042 --- /dev/null +++ b/src/lib/MyMailer/EventOnlineSubscribe.php @@ -0,0 +1,45 @@ +checkCustomer($customers_model, $post)){ + $customers_model->save($user); + $this->addLettersList($post['project_id'],$customers_model->id); + return $customers_model; + } + + + } + + public function checkCustomer($customers_model, $post){ + + $this->customer = $customers_model->findFirst("email = '{$post['email']}'"); + + if($this->customer instanceof \customersEmailList){ + return true; + } else { + return false; + } + } + + public function addLatterListToNewCustomer($post,$customer){ + if($this->is_new){ + $this->addLettersList($post['project_id'],$this->customer->id); + } + } +} \ No newline at end of file diff --git a/src/lib/MyMailer/EventSpy.php b/src/lib/MyMailer/EventSpy.php new file mode 100644 index 0000000..b23fa9b --- /dev/null +++ b/src/lib/MyMailer/EventSpy.php @@ -0,0 +1,155 @@ +save( $data ); + } else { + $model = new \spyStore(); + $model->save( $data ); + } + } else if($status == 'deleted'){ + $model = \spyStore::findFirst("item_id='{$data['item_id']}' AND spy_event_id = {$spyID}"); + if($model instanceof \spyStore){ + $model->delete(); + } else { + throw new \Exception("there is no item with id {$data['item_id']}"); + } + } + + + + + + }else{ + throw new \Exception("missing item id"); + } + + } + + public function saveSpyData($post,$customer){ + + if(isset($post['action'])){ + $data['project_id'] = $post['project_id']; + $data['customer_id'] = $customer->id; + $data['action'] = $post['action']; + $data['date'] = date("Y-m-d H:i:s"); + $data['target_id'] = isset($post['item_id']) ? $post['item_id']:null; + if($data['target_id']){ + + $spy_model = \spyEvent::findFirst("customer_id = '{$customer->id}' AND project_id = {$post['project_id']} AND target_id = {$data['target_id']}"); + if( $spy_model instanceof \spyEvent){ + $spy_model->save($data); + }else{ + $spy_model = new \spyEvent(); + $spy_model->save( $data ); + } + }else{ + $spy_model = new \spyEvent(); + $spy_model->save( $data ); + } + + return $spy_model->id; + }else{ + throw new \Exception("action missing"); + } + + } + + public function getSpyData($post,$customer){ + if(isset($post['action'])){ + $data['project_id'] = $post['project_id']; + $data['customer_id'] = $customer->id; + $data['target_id'] = isset($post['item_id']) ? $post['item_id']:null; + + $spy_model = \spyEvent::findFirst("customer_id = '{$customer->id}' AND project_id = {$post['project_id']} AND target_id = {$data['target_id']}"); + + if( $spy_model instanceof \spyEvent){ + $id = $spy_model->id; + $spy_model->delete(); + return $id; + }else{ + throw new \Exception("spy event not found"); + } + + + + }else{ + throw new \Exception("action missing"); + } + + } + + public function finishSpyOrder($post, $customer){ + if(isset($post['action'])){ + $data['project_id'] = $post['project_id']; + $data['customer_id'] = $customer->id; + $data['action'] = $post['action']; + $data['date'] = date("Y-m-d H:i:s"); + $data['target_id'] = isset($post['item_id']) ? $post['item_id']:null; + $spy_model = \spyEvent::query() + ->where("project_id = :project_id:") + ->andWhere("action ='order_add'") + ->andWhere("customer_id =:customer_id:") + ->bind(array("project_id" => $post['project_id'], "customer_id"=>$customer->id)) + ->execute(); + + foreach($spy_model as $model){ + + $model->update(["action" =>'finish']); + } + + $events_info = \eventInfo::query() + ->where("project_id = :project_id:") + ->andWhere("event_trigger ='order_time_after'") + ->andWhere("customer_id =:customer_id:") + ->bind(array("project_id" => $post['project_id'], "customer_id"=>$customer->id)) + ->execute(); + + foreach($events_info as $event_info ){ + $event_info->delete(); + } + + + }else{ + throw new \Exception("action missing"); + } + + } + + + public function getCustomer($post){ + $customers_model = new \customersEmailList(); + $user = $customers_model->findFirst("email = '{$post['email']}' AND project_id = {$post['project_id']} "); + if($user instanceof \customersEmailList){ + return $user; + } else { + $user['email'] = $post['email']; + $user['name'] = isset($post['name']) ? $post['name']:''; + $user['project_id'] = $post['project_id']; + $user['customer_id'] = isset($post['customer_id']) ? $post['customer_id']:''; + $user['gender'] = isset($post['gender']) ? $post['gender']:''; + $user['birthday'] = isset($post['birthday']) ? $post['birthday']:''; + return $customers_model->save($user); + } + } + +} \ No newline at end of file diff --git a/src/lib/MyMailer/EventTemplateManager.php b/src/lib/MyMailer/EventTemplateManager.php new file mode 100644 index 0000000..b3f012f --- /dev/null +++ b/src/lib/MyMailer/EventTemplateManager.php @@ -0,0 +1,135 @@ +emailTemplates; + + $UTMParser = new \UTMParser(); + + $template->text = $UTMParser->parse($data->toArray(), $template->toArray()); + + return $template; + + } + + + public function insertItemData($post){ + if(isset($post['item_data']) && !empty($post['item_data'])){ + return json_decode($post['item_data']); + } else { + return array(); + } + } + + + public function insertEventData($event_name,$host,$projects_id,$type){ + + $model = new \eventEmail(); + $data = $model->findFirst("name = '{$event_name}' AND email_type = '{$type}' AND project_id = {$projects_id} "); + if($data instanceof \eventEmail){ + return $data; + } else { + throw new \Exception("EventData for event {$event_name} in project {$host} not found"); + } + } + + /** + * + * Подготовка данных к отправке. + * $item_data array() + * $template object emailTemplates (this is model) + * $post_data array() data from post + * return obj + ***/ + public function prepareEventData($item_data, \emailTemplates $template, $post_data){ + if($template->text_type =='static' ){ + + + if( $item_data ){ + $template->text = $this->itemSet( $template, $item_data ); + } + $template->text = $this->dataSet( $template->text, $post_data ); + + + + + } else { + + if( $item_data ) { + $template->text = $this->itemDynamicSet($template, $item_data); + } + $template->text = $this->dataSet( $template->text, $post_data ); + + } + return $template; + } + + public function itemSet($template, $data){ + $num = count($data); + + $new_text = $template->text; + + for($i=0; $i<$num; $i++){ + foreach($data[$i] as $k => $v){ + + $target = '{{item_'.$i.'_'.$k.'}}'; + $replacement = $v; + $new_text = $this->replaceData($target, $replacement, $template->text); + + } + } + + return $new_text; + + } + + + public function dataSet($text, $data){ + + foreach($data as $k => $v){ + + $target = '{{'.$k.'}}'; + $replacement = $v; + $text = $this->replaceData($target, $replacement, $text); + + } + + + return $text; + + } + + public function replaceData($target, $replacement, $str) + { + $text = str_replace($target, $replacement, $str); + return $text; + } + + public function itemDynamicSet($template, $data){ + $num = count($data); + $contentText = ''; + for($i=0; $i<$num; $i++){ + $contentTextOneBlock = $template->dynamic_content; + + foreach($data[$i] as $k => $v){ + + $target = '{{'.$k.'}}'; + print "target = '{{'.$k.'}}'" ; + $replacement = $v; + print "replacement = $v" ; + $contentTextOneBlock = $this->replaceData($target, $replacement, $contentTextOneBlock); + + } + $contentText .= $contentTextOneBlock; + } + + $new_text = $template->header. $contentText .$template->footer; + + + return $new_text; + + } +} \ No newline at end of file diff --git a/src/lib/MyMailer/Mailer.php b/src/lib/MyMailer/Mailer.php index 4ab5c88..101edd4 100644 --- a/src/lib/MyMailer/Mailer.php +++ b/src/lib/MyMailer/Mailer.php @@ -3,8 +3,7 @@ namespace MyMailer; class Mailer extends \core{ - private $props = array(); - private static $instance; + public $from_name; public $from_email; @@ -18,16 +17,14 @@ class Mailer extends \core{ public $public_key = '5xaiqb1pnuu8jsun4rwxhow4shj11e55zdhjf5do'; public $list_id = '4940006'; + + + public function __construct(){ $this->from_email = 'andrey.belyy@gmail.com'; $this->mailer = new sender\unisender($this->public_key, $this->list_id); } - - public function test(){ - die("you in ".__DIR__); - } - public function reloadSender(){ $this->mailer = new sender\unisender($this->public_key,$this->list_id); } @@ -151,4 +148,51 @@ class Mailer extends \core{ return $model; } + + public function SendForSelect($template, $users) + { + foreach($users as $user){ + + $this->setToMail($user['email']); + $this->setMailMessage($template->text); + $this->setTitle($template->title); + $this->SendEmail(); + } + } + + /** + * @param $template + * @param $data + * @param array $users + */ + + public function SendDelivery($template, $data, $users =array() ) + { + $model = new \delivery(); + + if(!$users) { + + $users = $this->getUsers($data['users_id']); + + } + + + $this->setToMail($users,true); + + $this->setMailMessage($template['text']); + $this->setTitle($template['title']); + $campaign_id = $this->mailer->createCampaignDelivery($this->to_email, $this->from_email, $this->from_name, $this->title, $this->mailMessage); + + + $delivery = array( + 'campaign_id' => $campaign_id, + 'campaign' => $data['utm_campaign'], + 'name' => $data['name'], + 'event_id' => $data['id'], + 'status' => '0', + 'project_id' => $data['project_id'] + ); + $model->save($delivery); + } + } \ No newline at end of file diff --git a/src/lib/MyMailer/OfflineEvent.php b/src/lib/MyMailer/OfflineEvent.php deleted file mode 100644 index 7651cb3..0000000 --- a/src/lib/MyMailer/OfflineEvent.php +++ /dev/null @@ -1,48 +0,0 @@ - $v){ - - $target = '{{'.$k.'}}'; - print "target = '{{'.$k.'}}'" ; - $replacement = $v; - print "replacement = $v" ; - $contentTextOneBlock = $this->replaceData($target, $replacement, $contentTextOneBlock); - - } - $contentText .= $contentTextOneBlock; - } - - $template = $template['header']. $contentText .$template['footer']; - - - return $template; - - } - - -} \ No newline at end of file diff --git a/src/lib/MyMailer/OnlineEvent.php b/src/lib/MyMailer/OnlineEvent.php deleted file mode 100644 index 4f34d38..0000000 --- a/src/lib/MyMailer/OnlineEvent.php +++ /dev/null @@ -1,80 +0,0 @@ - $v){ - - $target = '{{item_'.$i.'_'.$k.'}}'; - $replacement = $v; - $template['text'] = $this->replaceData($target, $replacement, $template['text']); - - } - } - - return $template['text']; - - } - - public function dataSet($text, $data){ - - foreach($data as $k => $v){ - - $target = '{{'.$k.'}}'; - $replacement = $v; - $text = $this->replaceData($target, $replacement, $text); - - } - - - return $text; - - } - - public function itemDynamicSet($template, $data){ - - $num = count($data); - $contentText = ''; - for($i=0; $i<$num; $i++){ - $contentTextOneBlock = $template['dynamic_content']; - foreach($data[$i] as $k => $v){ - - $target = '{{item_'.$k.'}}'; - print "target = '{{item_'.$k.'}}'" ; - $replacement = $v; - print "replacement = $v" ; - $contentTextOneBlock = $this->replaceData($target, $replacement, $contentTextOneBlock); - - } - $contentText .= $contentTextOneBlock; - } - - $template = $template['header']. $contentText .$template['footer']; - - - return $template; - - } - - -} \ No newline at end of file diff --git a/src/lib/models/emailTemplates.php b/src/lib/models/emailTemplates.php index 6fd6629..a20e70b 100644 --- a/src/lib/models/emailTemplates.php +++ b/src/lib/models/emailTemplates.php @@ -1,6 +1,19 @@ columns(['customer_id', 'st.id, st.item_id', 'st.item_name', 'st.item_image', 'st.quantity', 'st.price', 'st.item_url', 'st.item_image']) ->rightJoin('spyStore', 'st.spy_event_id = SpyEvent.id', 'st') ->where("project_id = :project_id:") ->andWhere("action ='order_add'") ->andWhere("customer_id =$customer_id") - ->bind(array("project_id" => $project->id)) + ->bind(array("project_id" => $project_id)) ->execute(); } - public function getSpyUsers($modelsManager, $project) + public function getSpyUsers($modelsManager, $project, $time) { $now = date("Y-m-d H:i:s"); $date1 = new DateTime($now); - $date1->modify('-3 hours'); + $date1->modify($time); $date1 = $date1->format('Y-m-d H:i:s'); - $date2 = new DateTime($now); - $date2->modify('-11 hours'); - $date2 = $date2->format('Y-m-d H:i:s'); - $phql = "SELECT DISTINCT (customer_id) as id FROM SpyEvent WHERE project_id = {$project->id} AND action = 'order_add' AND date <= '{$date1}' OR date <= '{$date2}'"; - // + $phql = "SELECT DISTINCT (customer_id) as id FROM SpyEvent WHERE project_id = {$project->id} AND action = 'order_add' AND date <= '{$date1}'"; + //�������� ��� ���� ��� �������� ������� // AND action = 'order_add' AND date <= '{$date}' return $modelsManager->executeQuery($phql)->toArray(); diff --git a/src/lib/security.php b/src/lib/security.php index 847988c..8daa69f 100644 --- a/src/lib/security.php +++ b/src/lib/security.php @@ -157,8 +157,10 @@ use Phalcon\Events\Event, $allowed = $acl->isAllowed($status, $controller, $action); if ($allowed) { + return true; } else { + return false; } diff --git a/storage/posuda_price_list/index.html b/storage/posuda_price_list/index.html index e897636..9094baf 100644 --- a/storage/posuda_price_list/index.html +++ b/storage/posuda_price_list/index.html @@ -24,10 +24,6 @@

Алюминиевая посуда

Алюминиевая посуда - Волгоград

- -

Казан ал. 5л с АП (В)

-

-

Кастрюля ал. 'Латка' с кр.с АП (В)

@@ -66,10 +62,6 @@

Казан ал. 10л литой к100 (К)

- -

Казан ал. 40л литой к400 (К)

-

-

Казан ал. 70л литой к700 (К)

@@ -86,10 +78,6 @@

Казан походный ал. 20л с кр. литой кп200 (К)

- -

Крышка д/казана ал. 40л к401 (К)

-

-

Крышка д/казана ал. 70л к701 (К)

@@ -427,7 +415,7 @@

-

Миска малая фаянс детский рисунок (20)

+

Миска малая фаянс детский рисунок (26)

@@ -455,7 +443,7 @@

-

Тарелка 175мм мелкая фаянс детский рисунок (20)

+

Тарелка 175мм мелкая фаянс детский рисунок (36)

@@ -676,10 +664,6 @@

Бак пл. пищевой 65л (15)

- -

Банка д/сып.прод. пластм. с герм. кр 1л С11485 (33)

-

-

Ведро педальное пластм. 20л С428 (2)

@@ -696,6 +680,10 @@

Ведро пл. 5л с крышкой 72-232

+ +

Ведро пл. 7л без кр. С079 (20)

+

+

Ведро пл. 7л с крышкой 72-225 (10)

@@ -805,14 +793,6 @@

-

Корзинка плетеная пластм. 18х12х5.5 кт1911

-

-
- -

Корзинка плетеная пластм. 22х11х6 кт1907

-

-
-

Кружка мерная пластм. 0.5л С146 (48)

@@ -921,11 +901,7 @@

-

Таз пл. 8 л круглый М 2512Б

-

-
- -

Таз пл. 8.5л круглый 15-949 (25)

+

Таз пл. 8 л круглый М 2512Б (20)

@@ -1112,6 +1088,10 @@

Ложка разливательная нерж. 0.150л (П)

+ +

Ложка разливательная нерж. 0.150л 1с344

+

+

Ложка разливательная нерж. 0.25л 1с355

@@ -1213,7 +1193,7 @@

-

Терка четырехсторонняя малая

+

Терка четырехсторонняя Т-3у

@@ -1237,19 +1217,23 @@

Кружки, миски, тарелки нерж.

-

Кружка нерж. 8см ( 0,3 л)

+

Кружка нерж. 8см ( 0,3 л) 6300-01

-

Кружка нерж. 9см ( 0,5 л)

+

Кружка нерж. 9см ( 0,5 л) 6300-01

+

+
+ +

Миска д.22см нерж. 5000-02

-

Миска глуб. д.16см нерж.

+

Миска глуб. д.16см нерж. 5000-19

-

Миска глуб. д.18 см нерж. (0,8л)

+

Миска глуб. д.18 см нерж. (0,8л) 5000-19

@@ -1260,6 +1244,10 @@

Миска нерж. 2руч. 16см 'Татьяна' (кт1078)

+ +

Тарелка мелк. 20 см нерж. 5400-04

+

+

Тарелка мелк. 22 см нерж.

@@ -1482,22 +1470,6 @@

Картофелемялка нерж.20см ручка (кт1090)

- -

Картофелемялка РМ-1018 45см (кт234)

-

-
- -

Картофелемялка РМ-1024 60см (кт235)

-

-
- -

Картофелемялка РМ-1118 45см круг (кт232)

-

-
- -

Картофелемялка РМ-1124 60см круг (кт233)

-

-

Кастрюля 2,7л двойное дно нерж.Pretty

@@ -1578,14 +1550,6 @@

Ложка разливательная нерж. 1 л ручка 43 см (кт1100)

- -

Лопатка L=14 нерж. с дер.руч. (905) (кт25)

-

-
- -

Лопатка L=20 длин. нерж. дер.руч. (908) (кт28)

-

-

Лопатка перф. нерж.24см ручка (проф.) (кт1083)

@@ -1654,6 +1618,10 @@

Лоток мелк. нерж. 600х400х20 (кт382)

+ +

Миска нерж. 20 см глубокая МН-207

+

+

Миска нерж. 24 см глубокая (2,5л) МН-207

@@ -1691,7 +1659,7 @@

-

Миска-таз нерж. 60 см (20 л)

+

Миска-таз нерж. 60 см (20 л) кт1366

@@ -1714,10 +1682,6 @@

Подставка для кухонных принадл. нерж 10х18см

- -

Подставка под стол.приб мет.(1-258)

-

-

Сито нерж.d=220мм с пл.руч (кт1179)

@@ -1742,12 +1706,12 @@

Сковорода нерж. тройное дно D200/40 (кт904)

- -

Сковорода нерж. тройное дно D240/50 (кт116)

+ +

Сковорода нерж. тройное дно D220/45 (кт115)

- -

Сковорода нерж. тройное дно D240/50 (кт426)

+ +

Сковорода нерж. тройное дно D240/50 (кт116)

@@ -1774,10 +1738,6 @@

Сковорода нерж. тройное дно D360/53 (кт759)

- -

Сковорода нерж. тройное дно D400 (кт760)

-

-

Совок д/сып.прод.алюм. 1000г (кт38)

@@ -2018,6 +1978,10 @@

Base line Luxstahl Ножовощной 88мм (кт045)

+ +

Chef Luxstahl Нож овощной 75мм (кт1300)

+

+

Colour Luxstahl Нож д/сыра 2 руч. 350мм (кт1750)

@@ -2078,8 +2042,8 @@

Profi Luxstahl Нож универсальный 145мм (кт1018)

- -

Мусат с пл. руч. кт 933

+ +

Мусат с пл. руч. кт1012

@@ -2110,6 +2074,10 @@

Нож-топорик с дер.руч. кт1483

+ +

Нож-топорик с дер.руч. кт1866

+

+

Нож-топорик с пл.руч. кт1868

@@ -2131,14 +2099,6 @@

30084 MEXICO Нож кованый хлебный 20 см

-
- -

30787 MEXICO Нож кованый филейный 15 см

-

-
- -

50198 IDEAL Нож разделочный 20 см

-

Ножи кухонные - Вача

@@ -2190,10 +2150,6 @@

267 Нож с пл. руч. д/хлеба 300мм

- -

303 Нож-топорик с пл.руч.

-

-

311 Щипцы -ложка нерж.

@@ -2326,14 +2282,6 @@

Сопутствующие товары

Сопутствующие товары

- -

Бумага туалет.(Сф) 54м (24)

-

-
- -

Вафельное полотно отбел. шир. 45см (60)

-

-

Ерш туал. в стакане пл.

@@ -2568,10 +2516,6 @@

3109 Графин 500г. (6)

- -

4249/1 Ваза для торта пресс. (2)

-

-

4249/1 Ваза для фруктов (2)

@@ -2580,14 +2524,6 @@

4249/1 Ваза для фруктов пресс. (плоская) (2)

- -

4249/2 Ваза для торта пресс. (3)

-

-
- -

4249/2 Ваза для фруктов пресс. (2)

-

-

4249/2 Ваза для фруктов пресс. (плоская) (2)

@@ -2740,10 +2676,6 @@

HISAR 42856 Стакан 210мл

- -

HISAR 42857 Стакан 330мл

-

-

KASABLANKA 43614 Кувшин 1.1л

@@ -2930,10 +2862,18 @@

Ложка чайная нерж. 'Базис' (кт870)

+ +

Ложка чайная нерж. EURO

+

+

Ложка чайная нерж. Solo кт1284

+ +

Нож столовый нерж. 'Астра' кт1782/1

+

+

Нож столовый нерж. 'Базис' (кт867)

@@ -3024,10 +2964,6 @@

Дарба Термос нерж. колба 24л

- -

Кольцо резин. к термос. 6, 12л ТВН12

-

-

Термос 6л нерж. колба ТВН6

@@ -3246,7 +3182,7 @@

Чайник завар. 500мл Collage фарфор (фк355/1) (48)

- +

Чайник завар. 600мл Collage с фильтром фарфор фк866

@@ -3315,7 +3251,7 @@

-

Белье' Миска 500мл фарфор

+

Белье' Миска 500мл фарфор (12)

@@ -3323,7 +3259,7 @@

-

Белье' Пара чайная 210г 'ЯНТАРЬ' фарфор

+

Белье' Пара чайная 210г 'ЯНТАРЬ' фарфор (12)

@@ -3363,7 +3299,7 @@

-

Белье' Салатник квадратный 550мл фарфор

+

Белье' Салатник квадратный 550мл фарфор (24)

@@ -3415,7 +3351,7 @@

-

Белье' Чайник 900г фарфор (9)

+

Белье' Чайник 900г фарфор (12)

Фарфоровая посуда - Дулево Деколь

@@ -3454,14 +3390,6 @@

Фарфоровая посуда - Дулево Люстр

- -

Белье' Кружка 210г б/ручки фарфор

-

-
- -

Белье' Кружка 250г б/ручки фарфор

-

-

Блюдо 4х угол. 1вел. фарфор (5)

diff --git a/storage/temp/csv/products_seo.csv b/storage/temp/csv/products_seo.csv index ef08888..db6b88f 100644 --- a/storage/temp/csv/products_seo.csv +++ b/storage/temp/csv/products_seo.csv @@ -1,178 +1,7 @@ -14071;Рюкзаки;74757;Рюкзак Point Wet/Dry;1579.00;http://extremstyle.ua/ryukzaki-2-catalogs/Point_Wet_Dry_13-74757/ -14071;Рюкзаки;86726;Рюкзак DETAIL 27L ;1719.00;http://extremstyle.ua/ryukzaki-2-catalogs/DETAIL_27L_2015-86726/ -14069;Сумки;74650; Passport;549.00;http://extremstyle.ua/sumki-2-catalogs/Passport_13-74650/ -14069;Сумки;74642; Overhead;3429.00;http://extremstyle.ua/sumki-2-catalogs/Overhead_13-74642/ -14071;Рюкзаки;74621;Рюкзак Factor Pack;1039.00;http://extremstyle.ua/ryukzaki-2-catalogs/Factor_Pack_13-74621/ -14071;Рюкзаки;74618;Рюкзак Duel Pack;1869.00;http://extremstyle.ua/ryukzaki-2-catalogs/Duel_Pack_13-74618/ -14071;Рюкзаки;74613;Рюкзак Atlas ;1009.00;http://extremstyle.ua/ryukzaki-2-catalogs/Atlas__13-74613/ -14071;Рюкзаки;74611;Рюкзак Pivot Pack;1009.00;http://extremstyle.ua/ryukzaki-2-catalogs/Pivot_Pack_13-74611/ -14071;Рюкзаки;90688;Рюкзак FACTOR 20L;899.00;http://extremstyle.ua/ryukzaki-2-catalogs/FACTOR_20L_15-90688/ -14072;Кошельки, несессеры, косметички, чехлы;79047;кошелек VERT RAIL Wallet ;249.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/VERT_RAIL_Wallet_2013-79047/ -14072;Кошельки, несессеры, косметички, чехлы;79046;кошелек DIPLOMAT WALLET ;309.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/DIPLOMAT_WALLET_2013-79046/ -14071;Рюкзаки;86723;Рюкзак PIVOT 21L ;1039.00;http://extremstyle.ua/ryukzaki-2-catalogs/PIVOT_21L_2015-86723/ -14072;Кошельки, несессеры, косметички, чехлы;79045;кошелек PINNACLE WALLET ;269.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/PINNACLE_WALLET_2013-79045/ -14071;Рюкзаки;86725;Рюкзак ATLAS 25L ;1059.00;http://extremstyle.ua/ryukzaki-2-catalogs/ATLAS_25L_2015-86725/ -14071;Рюкзаки;74584;Рюкзак VARIAL ;1319.00;http://extremstyle.ua/ryukzaki-2-catalogs/VARIAL_2013-74584/ -14069;Сумки;74834; Women EQ 31L ;1079.00;http://extremstyle.ua/sumki-2-catalogs/Women_EQ_31L_2013-74834/ -14069;Сумки;74833; WOMENS VENTURE DUFFLE 90L ;3039.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_VENTURE_DUFFLE_90L_2015-74833/ -14071;Рюкзаки;86753;Рюкзак COSMO 6.5L ;699.00;http://extremstyle.ua/ryukzaki-2-catalogs/COSMO_65L_2015-86753/ -14069;Сумки;74830; WOMENS CARRY ON VALISE 35L ;2399.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_CARRY_ON_VALISE_35L_2013-74830/ -14071;Рюкзаки;86752;Рюкзак WOMENS CAPITOL PACK 23L ;1079.00;http://extremstyle.ua/ryukzaki-2-catalogs/WOMENS_CAPITOL_PACK_23L_2015-86752/ -14071;Рюкзаки;86751;Рюкзак GARDEN 20L ;1199.00;http://extremstyle.ua/ryukzaki-2-catalogs/GARDEN_20L_2015-86751/ -14071;Рюкзаки;86750;Рюкзак HANA 26L ;969.00;http://extremstyle.ua/ryukzaki-2-catalogs/HANA_26L_2015-86750/ -14071;Рюкзаки;86749;Рюкзак FINLEY 25L ;1059.00;http://extremstyle.ua/ryukzaki-2-catalogs/FINLEY_25L_2015-86749/ -14071;Рюкзаки;86748;Рюкзак PROM 25L ;1499.00;http://extremstyle.ua/ryukzaki-2-catalogs/PROM_25L_2015-86748/ -14071;Рюкзаки;86747;Рюкзак EVE 28L ;1579.00;http://extremstyle.ua/ryukzaki-2-catalogs/EVE_28L_2015-86747/ -14071;Рюкзаки;86746;Рюкзак FRANKIE 26L ;2309.00;http://extremstyle.ua/ryukzaki-2-catalogs/FRANKIE_26L_2015-86746/ -14071;Рюкзаки;86745;Рюкзак GROM 13L ;879.00;http://extremstyle.ua/ryukzaki-2-catalogs/GROM_13L_2015-86745/ -14071;Рюкзаки;86744;Рюкзак APOLLO 30L ;2659.00;http://extremstyle.ua/ryukzaki-2-catalogs/APOLLO_30L_2015-86744/ -14071;Рюкзаки;86743;Рюкзак GEMINI 28L ;3299.00;http://extremstyle.ua/ryukzaki-2-catalogs/GEMINI_28L_2015-86743/ -14071;Рюкзаки;86742;Рюкзак 365 PACK 21L ;1099.00;http://extremstyle.ua/ryukzaki-2-catalogs/365_PACK_21L_2015-86742/ -14071;Рюкзаки;86741;Рюкзак TREK 26L ;1689.00;http://extremstyle.ua/ryukzaki-2-catalogs/TREK_26L_2015-86741/ -14071;Рюкзаки;86739;Рюкзак TRANSIT 18L ;879.00;http://extremstyle.ua/ryukzaki-2-catalogs/TRANSIT_18L_2015-86739/ -14071;Рюкзаки;86738;Рюкзак WONDER 15L ;879.00;http://extremstyle.ua/ryukzaki-2-catalogs/WONDER_15L_2015-86738/ -14071;Рюкзаки;86737;Рюкзак CAPITOL 23L ;1079.00;http://extremstyle.ua/ryukzaki-2-catalogs/CAPITOL_23L_2015-86737/ 14020;Трапеции;63736; PYRO WAIST ;2789.00;http://extremstyle.ua/trapecii-zhilety-catalogs/PYRO_WAIST_2013-63736/ -14069;Сумки;74828; VENTURE DUFFLE 40L ;2399.00;http://extremstyle.ua/sumki-2-catalogs/VENTURE_DUFFLE_40L_2013-74828/ -14069;Сумки;74825; CREW DUFFLE 67L ;2269.00;http://extremstyle.ua/sumki-2-catalogs/CREW_DUFFLE_67L_2013-74825/ -14071;Рюкзаки;86729;Рюкзак 101 29L ;2149.00;http://extremstyle.ua/ryukzaki-2-catalogs/101_29L_2015-86729/ -14071;Рюкзаки;86728;Рюкзак FOUNDATION 26L ;1819.00;http://extremstyle.ua/ryukzaki-2-catalogs/FOUNDATION_26L_2015-86728/ -14071;Рюкзаки;86727;Рюкзак DUEL 26L ;1869.00;http://extremstyle.ua/ryukzaki-2-catalogs/DUEL_26L_2015-86727/ 13995;Трапеции;61696; CHAMELEON ;1919.00;http://extremstyle.ua/trapecii-catalogs/CHAMELEON_2013-61696/ 13995;Трапеции;61695; XT SEAT ;1919.00;http://extremstyle.ua/trapecii-catalogs/XT_SEAT_2013-61695/ 13995;Трапеции;61694; T-6 ;2639.00;http://extremstyle.ua/trapecii-catalogs/T-6_2013-61694/ -14069;Сумки;74824; RIDERS DUFFLE 80L ;2219.00;http://extremstyle.ua/sumki-2-catalogs/RIDERS_DUFFLE_80L_2013-74824/ -14069;Сумки;74823; RIDERS DUFFLE 51L ;1979.00;http://extremstyle.ua/sumki-2-catalogs/RIDERS_DUFFLE_51L_2013-74823/ -14069;Сумки;74821; GEMMA ;769.00;http://extremstyle.ua/sumki-2-catalogs/GEMMA_2013-74821/ -14071;Рюкзаки;86736;Рюкзак CAMPUS 33L ;1399.00;http://extremstyle.ua/ryukzaki-2-catalogs/CAMPUS_33L_2015-86736/ -14071;Рюкзаки;86735;Рюкзак CAMPUS 25L ;1299.00;http://extremstyle.ua/ryukzaki-2-catalogs/CAMPUS_25L_2015-86735/ -14071;Рюкзаки;86734;Рюкзак EXPLORER 26L ;1629.00;http://extremstyle.ua/ryukzaki-2-catalogs/EXPLORER_26L_2015-86734/ -14069;Сумки;86760; HUDSON 20L ;1299.00;http://extremstyle.ua/sumki-2-catalogs/HUDSON_20L_2015-86760/ -14071;Рюкзаки;86733;Рюкзак FACTOR 20L ;1199.00;http://extremstyle.ua/ryukzaki-2-catalogs/FACTOR_20L_2015-86733/ -14071;Рюкзаки;86732;Рюкзак MANUAL 20L ;969.00;http://extremstyle.ua/ryukzaki-2-catalogs/MANUAL_20L_2015-86732/ -14071;Рюкзаки;86731;Рюкзак LID 26L ;1849.00;http://extremstyle.ua/ryukzaki-2-catalogs/LID_26L_2015-86731/ -14071;Рюкзаки;86730;Рюкзак LID INDEPENDENT 26L ;1939.00;http://extremstyle.ua/ryukzaki-2-catalogs/LID_INDEPENDENT_26L_2015-86730/ -14071;Рюкзаки;74528;Рюкзак CENTRAL PACK ;989.00;http://extremstyle.ua/ryukzaki-2-catalogs/CENTRAL_PACK__14-74528/ -14069;Сумки;74820; GIGI ;589.00;http://extremstyle.ua/sumki-2-catalogs/GIGI_2013-74820/ -14069;Сумки;74819; SERENA ;1119.00;http://extremstyle.ua/sumki-2-catalogs/SERENA_2013-74819/ -14071;Рюкзаки;74818;Рюкзак DSLR Camera Case ;2239.00;http://extremstyle.ua/ryukzaki-2-catalogs/DSLR_Camera_Case_2013-74818/ -14069;Сумки;74817; MAINLINE ;819.00;http://extremstyle.ua/sumki-2-catalogs/MAINLINE_2013-74817/ -14069;Сумки;74816; MESSENGER 23L ;2089.00;http://extremstyle.ua/sumki-2-catalogs/MESSENGER_23L_2013-74816/ -14069;Сумки;74815; MESSENGER 15L ;1909.00;http://extremstyle.ua/sumki-2-catalogs/MESSENGER_15L_2013-74815/ -14071;Рюкзаки;86740;Рюкзак MOD 23L ;2019.00;http://extremstyle.ua/ryukzaki-2-catalogs/MOD_23L_2015-86740/ -14069;Сумки;86756; 2 FOR 1 HIP PACK 8L ;1149.00;http://extremstyle.ua/sumki-2-catalogs/2_FOR_1_HIP_PACK_8L_2015-86756/ -14069;Сумки;86757; OUTLET 8L ;769.00;http://extremstyle.ua/sumki-2-catalogs/OUTLET_8L_2015-86757/ -14071;Рюкзаки;86755;Рюкзак GIRLS GROM 13L ;879.00;http://extremstyle.ua/ryukzaki-2-catalogs/GIRLS_GROM_13L_2015-86755/ -14071;Рюкзаки;86754;Рюкзак WOMENS TRANSIT 18L ;879.00;http://extremstyle.ua/ryukzaki-2-catalogs/WOMENS_TRANSIT_18L_2015-86754/ -14069;Сумки;86758; HIP PACK ;529.00;http://extremstyle.ua/sumki-2-catalogs/HIP_PACK_2015-86758/ -14069;Сумки;86759; MAINLINE 20L ;819.00;http://extremstyle.ua/sumki-2-catalogs/MAINLINE_20L_2015-86759/ -14071;Рюкзаки;74805;Рюкзак OPTION ;1299.00;http://extremstyle.ua/ryukzaki-2-catalogs/OPTION_2013-74805/ -14071;Рюкзаки;74804;Рюкзак DAYTRIPPER ;1539.00;http://extremstyle.ua/ryukzaki-2-catalogs/DAYTRIPPER_2013-74804/ -14069;Сумки;86762; WHEELED DUFFLE 90L ;4089.00;http://extremstyle.ua/sumki-2-catalogs/WHEELED_DUFFLE_90L_2015-86762/ -14071;Рюкзаки;86722;Рюкзак MISSION 25L ;1909.00;http://extremstyle.ua/ryukzaki-2-catalogs/MISSION_25L_2015-86722/ -14071;Рюкзаки;86724;Рюкзак CENTRAL 26L ;1009.00;http://extremstyle.ua/ryukzaki-2-catalogs/CENTRAL_26L_2015-86724/ -14071;Рюкзаки;90689;Рюкзак GARDEN 20L;899.00;http://extremstyle.ua/ryukzaki-2-catalogs/GARDEN_20L_15-90689/ -14071;Рюкзаки;88988;Рюкзак PIVOT 21 L ;1039.00;http://extremstyle.ua/ryukzaki-2-catalogs/PIVOT_21_L_2015-88988/ -14072;Кошельки, несессеры, косметички, чехлы;74654;несессер Travel Kit ;659.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/Travel_Kit_2014-74654/ -14071;Рюкзаки;88981;Рюкзак APEX 26L WITH RESERVOIR ;3799.00;http://extremstyle.ua/ryukzaki-2-catalogs/APEX_26L_WITH_RESERVOIR_2015-88981/ -14071;Рюкзаки;88984;Рюкзак WOMENS DRAFTER 12L WITH RESERVOIR ;3119.00;http://extremstyle.ua/ryukzaki-2-catalogs/WOMENS_DRAFTER_12L_WITH_RESERVOIR_2015-88984/ -14071;Рюкзаки;88986;Рюкзак SESSION 8 L ;1889.00;http://extremstyle.ua/ryukzaki-2-catalogs/SESSION_8_L_2015-88986/ -14071;Рюкзаки;88979;Рюкзак HELI PRO 20 L ;2289.00;http://extremstyle.ua/ryukzaki-2-catalogs/HELI_PRO_20_L_2015-88979/ -14071;Рюкзаки;88982;Рюкзак NOMAD 18L WITH RESERVOIR ;3759.00;http://extremstyle.ua/ryukzaki-2-catalogs/NOMAD_18L_WITH_RESERVOIR_2015-88982/ -14071;Рюкзаки;88983;Рюкзак DRAFTER 12L WITH RESERVOIR ;3119.00;http://extremstyle.ua/ryukzaki-2-catalogs/DRAFTER_12L_WITH_RESERVOIR_2015-88983/ -14071;Рюкзаки;88985;Рюкзак SHUTTLE 6 L ;1799.00;http://extremstyle.ua/ryukzaki-2-catalogs/SHUTTLE_6_L_2015-88985/ -14071;Рюкзаки;88987;Рюкзак WOMENS SESSION 8L WITH RESERVOIR ;1959.00;http://extremstyle.ua/ryukzaki-2-catalogs/WOMENS_SESSION_8L_WITH_RESERVOIR_2015-88987/ -14071;Рюкзаки;88980;Рюкзак MISSION 25 L ;1869.00;http://extremstyle.ua/ryukzaki-2-catalogs/MISSION_25_L_2015-88980/ -14071;Рюкзаки;88950;Рюкзак CENTRAL 26 L;989.00;http://extremstyle.ua/ryukzaki-2-catalogs/CENTRAL_26_L_14-88950/ -14071;Рюкзаки;82803;Рюкзак Baker 16L ;2239.00;http://extremstyle.ua/ryukzaki-2-catalogs/Baker_16L_2015-82803/ -14070;Чехлы;88758;Чехол WOMENS PIPE 148 ;1189.00;http://extremstyle.ua/chehly-catalogs/WOMENS_PIPE_148_2015-88758/ -14072;Кошельки, несессеры, косметички, чехлы;88956;несессер Travel Kit;659.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/Travel_Kit_14-88956/ -14071;Рюкзаки;84516;Рюкзак AMP 18L ;3519.00;http://extremstyle.ua/ryukzaki-2-catalogs/AMP_18L_2014-84516/ -14071;Рюкзаки;84517;Рюкзак AMP 12L ;3319.00;http://extremstyle.ua/ryukzaki-2-catalogs/AMP_12L_2014-84517/ -14071;Рюкзаки;84520;Рюкзак NOMAD 18L ;3279.00;http://extremstyle.ua/ryukzaki-2-catalogs/NOMAD_18L_2014-84520/ -14071;Рюкзаки;84521;Рюкзак DRAFTER 12L ;2949.00;http://extremstyle.ua/ryukzaki-2-catalogs/DRAFTER_12L_2014-84521/ -14071;Рюкзаки;84522;Рюкзак WOMENS DRAFTER 12L ;2859.00;http://extremstyle.ua/ryukzaki-2-catalogs/WOMENS_DRAFTER_12L_2014-84522/ -14071;Рюкзаки;84523;Рюкзак SHUTTLE 6L ;1649.00;http://extremstyle.ua/ryukzaki-2-catalogs/SHUTTLE_6L_2014-84523/ -14071;Рюкзаки;84524;Рюкзак SESSION 8L ;1889.00;http://extremstyle.ua/ryukzaki-2-catalogs/SESSION_8L_2014-84524/ -14071;Рюкзаки;84525;Рюкзак WOMENS SESSION 8L ;1889.00;http://extremstyle.ua/ryukzaki-2-catalogs/WOMENS_SESSION_8L_2014-84525/ -14071;Рюкзаки;84526;Рюкзак FACTOR 20 L ;1189.00;http://extremstyle.ua/ryukzaki-2-catalogs/FACTOR_20_L_2014-84526/ -14071;Рюкзаки;84527;Рюкзак CAMPUS 25 L ;1249.00;http://extremstyle.ua/ryukzaki-2-catalogs/CAMPUS_25_L_2014-84527/ -14071;Рюкзаки;84528;Рюкзак CAMPUS 33 L ;1359.00;http://extremstyle.ua/ryukzaki-2-catalogs/CAMPUS_33_L_2014-84528/ -14071;Рюкзаки;84529;Рюкзак HELI PRO 20 L ;2289.00;http://extremstyle.ua/ryukzaki-2-catalogs/HELI_PRO_20_L_2014-84529/ -14071;Рюкзаки;84530;Рюкзак MISSION 25 L ;1869.00;http://extremstyle.ua/ryukzaki-2-catalogs/MISSION_25_L_2014-84530/ -14071;Рюкзаки;84531;Рюкзак PIVOT 21 L ;1009.00;http://extremstyle.ua/ryukzaki-2-catalogs/PIVOT_21_L_2014-84531/ -14071;Рюкзаки;84532;Рюкзак NETWORK 31 L ;2699.00;http://extremstyle.ua/ryukzaki-2-catalogs/NETWORK_31_L_2014-84532/ -14071;Рюкзаки;84533;Рюкзак VAULT 25 L ;2489.00;http://extremstyle.ua/ryukzaki-2-catalogs/VAULT_25_L_2014-84533/ -14071;Рюкзаки;84534;Рюкзак TERMINAL 31 L ;2529.00;http://extremstyle.ua/ryukzaki-2-catalogs/TERMINAL_31_L_2014-84534/ -14071;Рюкзаки;84535;Рюкзак OUTPOST 21 L ;1889.00;http://extremstyle.ua/ryukzaki-2-catalogs/OUTPOST_21_L_2014-84535/ -14071;Рюкзаки;84536;Рюкзак DAYTRIPPER 30 L ;1539.00;http://extremstyle.ua/ryukzaki-2-catalogs/DAYTRIPPER_30_L_2014-84536/ -14071;Рюкзаки;84537;Рюкзак EXIT 20 L ;969.00;http://extremstyle.ua/ryukzaki-2-catalogs/EXIT_20_L_2014-84537/ -14071;Рюкзаки;84538;Рюкзак DUEL 26 L ;1819.00;http://extremstyle.ua/ryukzaki-2-catalogs/DUEL_26_L_2014-84538/ -14071;Рюкзаки;84540;Рюкзак 101 29 L ;2089.00;http://extremstyle.ua/ryukzaki-2-catalogs/101_29_L_2014-84540/ -14071;Рюкзаки;84542;Рюкзак POINT WET-DRY 29 L ;1579.00;http://extremstyle.ua/ryukzaki-2-catalogs/POINT_WET-DRY_29_L_2014-84542/ -14071;Рюкзаки;84543;Рюкзак PORTAL PACK 32 L ;1449.00;http://extremstyle.ua/ryukzaki-2-catalogs/PORTAL_PACK_32_L_2014-84543/ -14071;Рюкзаки;84545;Рюкзак TRAIL PHOTO 16 L ;2399.00;http://extremstyle.ua/ryukzaki-2-catalogs/TRAIL_PHOTO_16_L_2014-84545/ -14071;Рюкзаки;84547;Рюкзак FRANKIE 26 L ;2269.00;http://extremstyle.ua/ryukzaki-2-catalogs/FRANKIE_26_L_2014-84547/ -14071;Рюкзаки;84548;Рюкзак FINLEY 25 L ;1009.00;http://extremstyle.ua/ryukzaki-2-catalogs/FINLEY_25_L_2014-84548/ -14071;Рюкзаки;84549;Рюкзак FINLEY OLIVETTE 25 L ;1599.00;http://extremstyle.ua/ryukzaki-2-catalogs/FINLEY_OLIVETTE_25_L_2014-84549/ -14071;Рюкзаки;84551;Рюкзак GARDEN OLIVETTE 20 L ;1189.00;http://extremstyle.ua/ryukzaki-2-catalogs/GARDEN_OLIVETTE_20_L_2014-84551/ -14071;Рюкзаки;84554;Рюкзак LEDGE 25 L ;1359.00;http://extremstyle.ua/ryukzaki-2-catalogs/LEDGE_25_L_2014-84554/ -14071;Рюкзаки;84556;Рюкзак CENTRAL 26 L ;989.00;http://extremstyle.ua/ryukzaki-2-catalogs/CENTRAL_26_L_2014-84556/ -14071;Рюкзаки;84557;Рюкзак ATLAS 25 L ;1009.00;http://extremstyle.ua/ryukzaki-2-catalogs/ATLAS_25_L_2014-84557/ -14071;Рюкзаки;84558;Рюкзак DETAIL 27 L ;1719.00;http://extremstyle.ua/ryukzaki-2-catalogs/DETAIL_27_L_2014-84558/ -14071;Рюкзаки;84559;Рюкзак CONTOUR 21 L ;1999.00;http://extremstyle.ua/ryukzaki-2-catalogs/CONTOUR_21_L_2014-84559/ -14071;Рюкзаки;84560;Рюкзак OPTION 27 L ;1299.00;http://extremstyle.ua/ryukzaki-2-catalogs/OPTION_27_L_2014-84560/ -14071;Рюкзаки;84561;Рюкзак FOUNDATION 26 L ;1819.00;http://extremstyle.ua/ryukzaki-2-catalogs/FOUNDATION_26_L_2014-84561/ -14071;Рюкзаки;84562;Рюкзак EXPLORER 26 L ;1559.00;http://extremstyle.ua/ryukzaki-2-catalogs/EXPLORER_26_L_2014-84562/ -14071;Рюкзаки;84563;Рюкзак CAPITOL 23 L ;1079.00;http://extremstyle.ua/ryukzaki-2-catalogs/CAPITOL_23_L_2014-84563/ -14071;Рюкзаки;84564;Рюкзак WONDER 15 L ;859.00;http://extremstyle.ua/ryukzaki-2-catalogs/WONDER_15_L_2014-84564/ -14071;Рюкзаки;84565;Рюкзак TRANSIT 18 L ;839.00;http://extremstyle.ua/ryukzaki-2-catalogs/TRANSIT_18_L_2014-84565/ -14071;Рюкзаки;84566;Рюкзак GROM 13 L ;879.00;http://extremstyle.ua/ryukzaki-2-catalogs/GROM_13_L_2014-84566/ -14071;Рюкзаки;84567;Рюкзак GIRLS GROM 13 L ;879.00;http://extremstyle.ua/ryukzaki-2-catalogs/GIRLS_GROM_13_L_2014-84567/ -14071;Рюкзаки;84568;Рюкзак JEWEL 26 L ;1689.00;http://extremstyle.ua/ryukzaki-2-catalogs/JEWEL_26_L_2014-84568/ -14071;Рюкзаки;84570;Рюкзак EVE 28 L ;1559.00;http://extremstyle.ua/ryukzaki-2-catalogs/EVE_28_L_2014-84570/ -14071;Рюкзаки;84571;Рюкзак PROM 25 L ;1479.00;http://extremstyle.ua/ryukzaki-2-catalogs/PROM_25_L_2014-84571/ -14071;Рюкзаки;84572;Рюкзак HANA 26 L ;989.00;http://extremstyle.ua/ryukzaki-2-catalogs/HANA_26_L_2014-84572/ -14071;Рюкзаки;84573;Рюкзак GARDEN 20 L ;1189.00;http://extremstyle.ua/ryukzaki-2-catalogs/GARDEN_20_L_2014-84573/ -14071;Рюкзаки;84574;Рюкзак COSMO 6.5 L ;699.00;http://extremstyle.ua/ryukzaki-2-catalogs/COSMO_65_L_2014-84574/ -14069;Сумки;84577; CRESCENT HIP PACK 10 L ;549.00;http://extremstyle.ua/sumki-2-catalogs/CRESCENT_HIP_PACK_10_L_2014-84577/ -14069;Сумки;84579; PARTY DUFFLE 22 L ;1519.00;http://extremstyle.ua/sumki-2-catalogs/PARTY_DUFFLE_22_L_2014-84579/ -14069;Сумки;84580; BROOKE 17 L ;1399.00;http://extremstyle.ua/sumki-2-catalogs/BROOKE_17_L_2014-84580/ -14069;Сумки;84581; DAFFODIL 16 L ;1079.00;http://extremstyle.ua/sumki-2-catalogs/DAFFODIL_16_L_2014-84581/ -14069;Сумки;84586; LOLA 2 L ;1079.00;http://extremstyle.ua/sumki-2-catalogs/LOLA_2_L_2014-84586/ -14069;Сумки;84587; GEMMA 20 L ;769.00;http://extremstyle.ua/sumki-2-catalogs/GEMMA_20_L_2014-84587/ -14069;Сумки;84588; CREW DUFFLE 50 L ;1909.00;http://extremstyle.ua/sumki-2-catalogs/CREW_DUFFLE_50_L_2014-84588/ -14069;Сумки;84589; WOMENS EQ BAG 51 L ;1169.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_EQ_BAG_51_L_2014-84589/ -14069;Сумки;84590; JIVE ;389.00;http://extremstyle.ua/sumki-2-catalogs/JIVE__2014-84590/ -14069;Сумки;84591; EQ BAG 23 L ;969.00;http://extremstyle.ua/sumki-2-catalogs/EQ_BAG_23_L_2014-84591/ -14069;Сумки;84592; EQ BAG 31 L ;1039.00;http://extremstyle.ua/sumki-2-catalogs/EQ_BAG_31_L_2014-84592/ -14069;Сумки;84594; EQ BAG 74 L ;1249.00;http://extremstyle.ua/sumki-2-catalogs/EQ_BAG_74_L_2014-84594/ -14069;Сумки;84595; WOMENS EQ BAG 31 L ;1039.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_EQ_BAG_31_L_2014-84595/ -14069;Сумки;84597; WHEELED DUFFLE 90 L ;3919.00;http://extremstyle.ua/sumki-2-catalogs/WHEELED_DUFFLE_90_L_2014-84597/ -14069;Сумки;84598; VENTURE DUFFLE 60 L ;2769.00;http://extremstyle.ua/sumki-2-catalogs/VENTURE_DUFFLE_60_L_2014-84598/ -14069;Сумки;84599; VENTURE DUFFLE 40 L ;2419.00;http://extremstyle.ua/sumki-2-catalogs/VENTURE_DUFFLE_40_L_2014-84599/ -14069;Сумки;84601; SPLIT ROLLER 65 L ;4449.00;http://extremstyle.ua/sumki-2-catalogs/SPLIT_ROLLER_65_L_2014-84601/ -14069;Сумки;84602; OVER UNDER 49 L ;3939.00;http://extremstyle.ua/sumki-2-catalogs/OVER_UNDER_49_L_2014-84602/ -14069;Сумки;84603; CARRY ON ROLLER 36 L ;3019.00;http://extremstyle.ua/sumki-2-catalogs/CARRY_ON_ROLLER_36_L_2014-84603/ -14069;Сумки;84604; WOMENS CARRY-ON ROLLER 36 L ;3019.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_CARRY-ON_ROLLER_36_L_2014-84604/ -14069;Сумки;84606; WOMENS VENTURE DUFFLE 40 L ;2419.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_VENTURE_DUFFLE_40_L_2014-84606/ -14069;Сумки;84609; WOMENS SPLIT ROLLER 65 L ;4449.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_SPLIT_ROLLER_65_L_2014-84609/ -14069;Сумки;84610; WOMENS OVER/UNDER 49 L ;3939.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_OVER_UNDER_49_L_2014-84610/ -14069;Сумки;84612; HIP PACK ;509.00;http://extremstyle.ua/sumki-2-catalogs/HIP_PACK__2014-84612/ -14069;Сумки;84613; CLASSIC HIP PACK ;509.00;http://extremstyle.ua/sumki-2-catalogs/CLASSIC_HIP_PACK__2014-84613/ -14069;Сумки;84614; WOMENS HIP PACK ;509.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_HIP_PACK__2014-84614/ -14069;Сумки;84615; GIGI ;589.00;http://extremstyle.ua/sumki-2-catalogs/GIGI__2014-84615/ -14069;Сумки;84616; HUDSON 20 L ;1299.00;http://extremstyle.ua/sumki-2-catalogs/HUDSON_20_L_2014-84616/ -14069;Сумки;84617; OUTLET 8 L ;769.00;http://extremstyle.ua/sumki-2-catalogs/OUTLET_8_L_2014-84617/ -14069;Сумки;84618; PASSPORT ;509.00;http://extremstyle.ua/sumki-2-catalogs/PASSPORT__2014-84618/ -14072;Кошельки, несессеры, косметички, чехлы;84619;несессер TRAVEL KIT ;659.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/TRAVEL_KIT__2014-84619/ -14072;Кошельки, несессеры, косметички, чехлы;84620;несессер DIVA 4 L ;859.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/DIVA_4_L_2014-84620/ -14072;Кошельки, несессеры, косметички, чехлы;84622;несессер ALINA 3 L ;619.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/ALINA_3_L_2014-84622/ -14072;Кошельки, несессеры, косметички, чехлы;84623;кошелек SOHO ;329.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/SOHO__2014-84623/ -14072;Кошельки, несессеры, косметички, чехлы;84624;кошелек ABIGAIL ;479.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/ABIGAIL__2014-84624/ -14072;Кошельки, несессеры, косметички, чехлы;84625;кошелек PAYBACK WALLET ;439.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/PAYBACK_WALLET__2014-84625/ -14072;Кошельки, несессеры, косметички, чехлы;84626;кошелек VERT RAIL WALLET ;239.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/VERT_RAIL_WALLET__2014-84626/ -14070;Чехлы;84627; BIKE BAG ;8999.00;http://extremstyle.ua/chehly-catalogs/BIKE_BAG__2014-84627/ 14019;Аксессуары;84628; RACK PAD ;599.00;http://extremstyle.ua/aksessuary-kait-catalogs/RACK_PAD_2014-84628/ 13993;Аксессуары;84629; TIE DOWN STRAPS 20 ;449.00;http://extremstyle.ua/wind-aksessuaryi-catalogs/TIE_DOWN_STRAPS_20_2014-84629/ 13977;Перчатки;85532; EXODUS GLOVE ;589.00;http://extremstyle.ua/bike-gloves-catalogs/EXODUS_GLOVE_2014-85532/ @@ -188,13 +17,7 @@ 13980;Одежда;85552; DESCENT SHORT ;2899.00;http://extremstyle.ua/clothing-catalogs/DESCENT_SHORT_2014-85552/ 13980;Одежда;85553; PACE SHORT ;1739.00;http://extremstyle.ua/clothing-catalogs/PACE_SHORT_2014-85553/ 13980;Одежда;85554; RIDGE W LINER SHORT ;2329.00;http://extremstyle.ua/clothing-catalogs/RIDGE_W_LINER_SHORT_2014-85554/ -14072;Кошельки, несессеры, косметички, чехлы;87461; UPLOAD ;2529.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/UPLOAD_2013-87461/ -14071;Рюкзаки;87294;Рюкзак LEDGE 25 L ;2049.00;http://extremstyle.ua/ryukzaki-2-catalogs/LEDGE_25_L_2015-87294/ 14401;Жилеты;86698; SURFACE VEST ;1589.00;http://extremstyle.ua/jiletyi-catalogs/SURFACE_VEST_2013-86698/ -14069;Сумки;86764; SPLIT ROLLER 65L ;4449.00;http://extremstyle.ua/sumki-2-catalogs/SPLIT_ROLLER_65L_2015-86764/ -14069;Сумки;86767; WOMENS SPLIT ROLLER 65L ;4549.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_SPLIT_ROLLER_65L_2015-86767/ -14072;Кошельки, несессеры, косметички, чехлы;86768;несессер SCHOOL CASE ;349.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/SCHOOL_CASE_2015-86768/ -14072;Кошельки, несессеры, косметички, чехлы;86769;несессер DIVA 4L ;879.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/DIVA_4L_2015-86769/ 13995;Трапеции;86771; REFLEX ;2079.00;http://extremstyle.ua/trapecii-catalogs/REFLEX_2014-86771/ 14020;Трапеции;86772; PYRO MANIAC ;3039.00;http://extremstyle.ua/trapecii-zhilety-catalogs/PYRO_MANIAC_2014-86772/ 14020;Трапеции;86773; WAHINE ;2839.00;http://extremstyle.ua/trapecii-zhilety-catalogs/WAHINE_2014-86773/ @@ -202,148 +25,4 @@ 14020;Трапеции;86775; VEGA ;2559.00;http://extremstyle.ua/trapecii-zhilety-catalogs/VEGA_2014-86775/ 14020;Трапеции;86776; VISION ;2519.00;http://extremstyle.ua/trapecii-zhilety-catalogs/VISION_2014-86776/ 14401;Жилеты;86777; SURFACE VEST ;2239.00;http://extremstyle.ua/jiletyi-catalogs/SURFACE_VEST_2014-86777/ -14070;Чехлы;87085;Чехол LOW ROLLER 165 ;2819.00;http://extremstyle.ua/chehly-catalogs/LOW_ROLLER_165_2015-87085/ -14070;Чехлы;87086;Чехол LOW ROLLER 175 ;2969.00;http://extremstyle.ua/chehly-catalogs/LOW_ROLLER_175_2015-87086/ -14070;Чехлы;87087;Чехол TOUR BAG 157 ;1959.00;http://extremstyle.ua/chehly-catalogs/TOUR_BAG_157_2015-87087/ -14070;Чехлы;87088;Чехол TOUR BAG 165 ;2089.00;http://extremstyle.ua/chehly-catalogs/TOUR_BAG_165_2015-87088/ -14070;Чехлы;87089;Чехол TOUR BAG 175 ;2219.00;http://extremstyle.ua/chehly-catalogs/TOUR_BAG_175_2015-87089/ -14070;Чехлы;87090;Чехол FALL LINE DOUBLE 175 ;3119.00;http://extremstyle.ua/chehly-catalogs/FALL_LINE_DOUBLE_175_2015-87090/ -14070;Чехлы;87093;Чехол SKI SLEEVE SINGLE 175 ;989.00;http://extremstyle.ua/chehly-catalogs/SKI_SLEEVE_SINGLE_175_2015-87093/ -14070;Чехлы;87094;Чехол FREESTYLE 157 ;1519.00;http://extremstyle.ua/chehly-catalogs/FREESTYLE_157_2015-87094/ -14070;Чехлы;87095;Чехол FREESTYLE 165 ;1559.00;http://extremstyle.ua/chehly-catalogs/FREESTYLE_165_2015-87095/ -14070;Чехлы;87096;Чехол PIPE 157 ;1189.00;http://extremstyle.ua/chehly-catalogs/PIPE_157_2015-87096/ -14070;Чехлы;87097;Чехол PIPE 165 ;1189.00;http://extremstyle.ua/chehly-catalogs/PIPE_165_2015-87097/ -14070;Чехлы;87099;Чехол WOMENS TOUR 157 ;1959.00;http://extremstyle.ua/chehly-catalogs/WOMENS_TOUR_157_2015-87099/ -14070;Чехлы;87100;Чехол WOMENS FREESTYLE 157 ;1519.00;http://extremstyle.ua/chehly-catalogs/WOMENS_FREESTYLE_157_2015-87100/ -14070;Чехлы;87101;Чехол WOMENS PADDED SINGLE 175 ;1739.00;http://extremstyle.ua/chehly-catalogs/WOMENS_PADDED_SINGLE_175_2015-87101/ -14070;Чехлы;87102;Чехол WOMENS SKI SLEEVE 175 ;989.00;http://extremstyle.ua/chehly-catalogs/WOMENS_SKI_SLEEVE_175_2015-87102/ -14071;Рюкзаки;87103;Рюкзак ABS VARIO COVER 25L ;2679.00;http://extremstyle.ua/ryukzaki-2-catalogs/ABS_VARIO_COVER_25L_2015-87103/ -14071;Рюкзаки;87104;Рюкзак HELI PRO 20L ;2309.00;http://extremstyle.ua/ryukzaki-2-catalogs/HELI_PRO_20L_2015-87104/ -14071;Рюкзаки;87105;Рюкзак PRO II 26L ;3599.00;http://extremstyle.ua/ryukzaki-2-catalogs/PRO_II_26L_2015-87105/ -14071;Рюкзаки;87106;Рюкзак Sean Pettit Team Heli Pro 20L ;2659.00;http://extremstyle.ua/ryukzaki-2-catalogs/Sean_Pettit_Team_Heli_Pro_20L_2015-87106/ -14071;Рюкзаки;87108;Рюкзак HELI PRO DLX 20L ;2769.00;http://extremstyle.ua/ryukzaki-2-catalogs/HELI_PRO_DLX_20L_2015-87108/ -14071;Рюкзаки;87112;Рюкзак HELI PACK 11L ;1819.00;http://extremstyle.ua/ryukzaki-2-catalogs/HELI_PACK_11L_2015-87112/ -14071;Рюкзаки;87113;Рюкзак HUB SLING PACK 15L ;2049.00;http://extremstyle.ua/ryukzaki-2-catalogs/HUB_SLING_PACK_15L_2015-87113/ -14071;Рюкзаки;87115;Рюкзак WOMENS WONDER 15L ;879.00;http://extremstyle.ua/ryukzaki-2-catalogs/WOMENS_WONDER_15L_2015-87115/ -14071;Рюкзаки;87116;Рюкзак WOMENS MISSION 25L ;1909.00;http://extremstyle.ua/ryukzaki-2-catalogs/WOMENS_MISSION_25L_2015-87116/ -14071;Рюкзаки;87117;Рюкзак JEWEL 26L ;1759.00;http://extremstyle.ua/ryukzaki-2-catalogs/JEWEL_26L_2015-87117/ -14071;Рюкзаки;87118;Рюкзак MILO 13L ;929.00;http://extremstyle.ua/ryukzaki-2-catalogs/MILO_13L_2015-87118/ -14069;Сумки;87119; CLASSIC HIP PACK ;509.00;http://extremstyle.ua/sumki-2-catalogs/CLASSIC_HIP_PACK_2015-87119/ -14069;Сумки;87120; PARK DUFFLE INDEPENDENT COLLAB 52L ;1449.00;http://extremstyle.ua/sumki-2-catalogs/PARK_DUFFLE_INDEPENDENT_COLLAB_52L_2015-87120/ -14069;Сумки;87121; PEDDLER BAG 40L ;1959.00;http://extremstyle.ua/sumki-2-catalogs/PEDDLER_BAG_40L_2015-87121/ -14069;Сумки;87122; JIVE ;439.00;http://extremstyle.ua/sumki-2-catalogs/JIVE_2015-87122/ -14069;Сумки;87123; VENTURE DUFFLE 90L ;3039.00;http://extremstyle.ua/sumki-2-catalogs/VENTURE_DUFFLE_90L_2015-87123/ -14069;Сумки;87126; BOOT PACK 50L ;1689.00;http://extremstyle.ua/sumki-2-catalogs/BOOT_PACK_50L_2015-87126/ -14069;Сумки;87128; EQ BAG 31L ;1039.00;http://extremstyle.ua/sumki-2-catalogs/EQ_BAG_31L_2015-87128/ -14069;Сумки;87129; EQ BAG 51L ;1149.00;http://extremstyle.ua/sumki-2-catalogs/EQ_BAG_51L_2015-87129/ -14069;Сумки;87130; EQ BAG 74L ;1249.00;http://extremstyle.ua/sumki-2-catalogs/EQ_BAG_74L_2015-87130/ -14069;Сумки;87133; WOMENS BOOT PACK 50L ;1689.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_BOOT_PACK_50L_2015-87133/ -14069;Сумки;87134; WOMENS BOOT BAG 30L ;969.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_BOOT_BAG_30L_2015-87134/ -14069;Сумки;87135; WOMENS EQ BAG 31L ;1039.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_EQ_BAG_31L_2015-87135/ -14072;Кошельки, несессеры, косметички, чехлы;87136;несессер PRIMA 5L ;699.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/PRIMA_5L_2015-87136/ -14072;Кошельки, несессеры, косметички, чехлы;87137;кошелек SOHO ;349.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/SOHO_2015-87137/ -14072;Кошельки, несессеры, косметички, чехлы;87138;кошелек DIPLOMAT WALLET ;309.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/DIPLOMAT_WALLET_2015-87138/ -14072;Кошельки, несессеры, косметички, чехлы;87139;кошелек VERT RAIL WALLET ;239.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/VERT_RAIL_WALLET_2015-87139/ -14070;Чехлы;88759;Чехол WOMENS PIPE 157 ;1189.00;http://extremstyle.ua/chehly-catalogs/WOMENS_PIPE_157_2015-88759/ -14070;Чехлы;88760;Чехол WOMENS SKI SLEEVE SINGLE 175 ;989.00;http://extremstyle.ua/chehly-catalogs/WOMENS_SKI_SLEEVE_SINGLE_175_2015-88760/ -14071;Рюкзаки;88761;Рюкзак WOMENS HELI PRO 18L ;2329.00;http://extremstyle.ua/ryukzaki-2-catalogs/WOMENS_HELI_PRO_18L_2015-88761/ -14071;Рюкзаки;88869;Рюкзак APEX 26L;3799.00;http://extremstyle.ua/ryukzaki-2-catalogs/APEX_26L_15-88869/ -14071;Рюкзаки;88870;Рюкзак DAYTRIPPER 30L;1539.00;http://extremstyle.ua/ryukzaki-2-catalogs/DAYTRIPPER_30L_15-88870/ -14071;Рюкзаки;88871;Рюкзак EXIT 20L;969.00;http://extremstyle.ua/ryukzaki-2-catalogs/EXIT_20L_15-88871/ -14071;Рюкзаки;88872;Рюкзак CAPITOL 23L;1079.00;http://extremstyle.ua/ryukzaki-2-catalogs/CAPITOL_23L_15-88872/ -14071;Рюкзаки;88873;Рюкзак PORTAL 32L;1449.00;http://extremstyle.ua/ryukzaki-2-catalogs/PORTAL_32L_15-88873/ -14071;Рюкзаки;88874;Рюкзак COSMO 6.5L;699.00;http://extremstyle.ua/ryukzaki-2-catalogs/COSMO_65L_15-88874/ -14071;Рюкзаки;88875;Рюкзак EVE 28L;1539.00;http://extremstyle.ua/ryukzaki-2-catalogs/EVE_28L_15-88875/ -14071;Рюкзаки;88876;Рюкзак HELI PRO DLX 20L;2769.00;http://extremstyle.ua/ryukzaki-2-catalogs/HELI_PRO_DLX_20L_15-88876/ -14071;Рюкзаки;88877;Рюкзак WOMENS WONDER 15L;879.00;http://extremstyle.ua/ryukzaki-2-catalogs/WOMENS_WONDER_15L_15-88877/ -14069;Сумки;88878; GEMMA 20L;769.00;http://extremstyle.ua/sumki-2-catalogs/GEMMA_20L_15-88878/ -14069;Сумки;88879; UTILITY DUFFLE 90L;2619.00;http://extremstyle.ua/sumki-2-catalogs/UTILITY_DUFFLE_90L_15-88879/ -14069;Сумки;88880; EQ BAG 74L;1249.00;http://extremstyle.ua/sumki-2-catalogs/EQ_BAG_74L_15-88880/ -14069;Сумки;88881; WOMENS EQ BAG 31L;1039.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_EQ_BAG_31L_15-88881/ -14069;Сумки;88882; WHEELED DUFFLE 58L;3669.00;http://extremstyle.ua/sumki-2-catalogs/WHEELED_DUFFLE_58L_15-88882/ -14072;Кошельки, несессеры, косметички, чехлы;88883;несессер PRIMA 5L;699.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/PRIMA_5L_15-88883/ -14071;Рюкзаки;88989;Рюкзак CENTRAL 26 L ;1009.00;http://extremstyle.ua/ryukzaki-2-catalogs/CENTRAL_26_L_2015-88989/ -14071;Рюкзаки;88990;Рюкзак ATLAS 25 L ;1059.00;http://extremstyle.ua/ryukzaki-2-catalogs/ATLAS_25_L_2015-88990/ -14071;Рюкзаки;88991;Рюкзак DETAIL 27 L ;1779.00;http://extremstyle.ua/ryukzaki-2-catalogs/DETAIL_27_L_2015-88991/ -14071;Рюкзаки;88992;Рюкзак OPTION 27 L ;1339.00;http://extremstyle.ua/ryukzaki-2-catalogs/OPTION_27_L_2015-88992/ -14071;Рюкзаки;88993;Рюкзак DUEL 26 L ;1869.00;http://extremstyle.ua/ryukzaki-2-catalogs/DUEL_26_L_2015-88993/ -14071;Рюкзаки;88994;Рюкзак FOUNDATION 26 L ;1909.00;http://extremstyle.ua/ryukzaki-2-catalogs/FOUNDATION_26_L_2015-88994/ -14071;Рюкзаки;88995;Рюкзак 101 29 L ;2149.00;http://extremstyle.ua/ryukzaki-2-catalogs/101_29_L_2015-88995/ -14071;Рюкзаки;88996;Рюкзак LID 26 L ;1849.00;http://extremstyle.ua/ryukzaki-2-catalogs/LID_26_L_2015-88996/ -14071;Рюкзаки;88997;Рюкзак MANUAL 20 L ;969.00;http://extremstyle.ua/ryukzaki-2-catalogs/MANUAL_20_L_2015-88997/ -14071;Рюкзаки;88998;Рюкзак FACTOR 20 L ;1199.00;http://extremstyle.ua/ryukzaki-2-catalogs/FACTOR_20_L_2015-88998/ -14071;Рюкзаки;88999;Рюкзак EXPLORER 26 L ;1629.00;http://extremstyle.ua/ryukzaki-2-catalogs/EXPLORER_26_L_2015-88999/ -14071;Рюкзаки;89000;Рюкзак CAMPUS 25 L ;1299.00;http://extremstyle.ua/ryukzaki-2-catalogs/CAMPUS_25_L_2015-89000/ -14071;Рюкзаки;89001;Рюкзак CAMPUS 33 L ;1399.00;http://extremstyle.ua/ryukzaki-2-catalogs/CAMPUS_33_L_2015-89001/ -14071;Рюкзаки;89002;Рюкзак CAPITOL 23 L ;1079.00;http://extremstyle.ua/ryukzaki-2-catalogs/CAPITOL_23_L_2015-89002/ -14071;Рюкзаки;89003;Рюкзак WONDER 15 L ;879.00;http://extremstyle.ua/ryukzaki-2-catalogs/WONDER_15_L_2015-89003/ -14071;Рюкзаки;89004;Рюкзак TRANSIT 18 L ;879.00;http://extremstyle.ua/ryukzaki-2-catalogs/TRANSIT_18_L_2015-89004/ -14071;Рюкзаки;89006;Рюкзак TREK 26 L ;1689.00;http://extremstyle.ua/ryukzaki-2-catalogs/TREK_26_L_2015-89006/ -14071;Рюкзаки;89007;Рюкзак 365 PACK 21 L ;1099.00;http://extremstyle.ua/ryukzaki-2-catalogs/365_PACK_21_L_2015-89007/ -14071;Рюкзаки;89008;Рюкзак STASHABLE CINCHPACK 19 L ;439.00;http://extremstyle.ua/ryukzaki-2-catalogs/STASHABLE_CINCHPACK_19_L_2015-89008/ -14071;Рюкзаки;89009;Рюкзак APOLLO 30 L ;2659.00;http://extremstyle.ua/ryukzaki-2-catalogs/APOLLO_30_L_2015-89009/ -14071;Рюкзаки;89010;Рюкзак STASHABLE BACKPACK 20 L ;769.00;http://extremstyle.ua/ryukzaki-2-catalogs/STASHABLE_BACKPACK_20_L_2015-89010/ -14071;Рюкзаки;89011;Рюкзак GROM 13 L ;879.00;http://extremstyle.ua/ryukzaki-2-catalogs/GROM_13_L_2015-89011/ -14071;Рюкзаки;89012;Рюкзак STOWAWAY RUCKSACK 21 L ;1099.00;http://extremstyle.ua/ryukzaki-2-catalogs/STOWAWAY_RUCKSACK_21_L_2015-89012/ -14071;Рюкзаки;89013;Рюкзак BEACH BUM ;839.00;http://extremstyle.ua/ryukzaki-2-catalogs/BEACH_BUM_2015-89013/ -14071;Рюкзаки;89014;Рюкзак POINT WET DRY 29 L ;1599.00;http://extremstyle.ua/ryukzaki-2-catalogs/POINT_WET_DRY_29_L_2015-89014/ -14071;Рюкзаки;89015;Рюкзак RELOAD 30 L ;6319.00;http://extremstyle.ua/ryukzaki-2-catalogs/RELOAD_30_L_2015-89015/ -14071;Рюкзаки;89016;Рюкзак FRANKIE 26 L ;2309.00;http://extremstyle.ua/ryukzaki-2-catalogs/FRANKIE_26_L_2015-89016/ -14071;Рюкзаки;89017;Рюкзак JEWEL 26 L ;1759.00;http://extremstyle.ua/ryukzaki-2-catalogs/JEWEL_26_L_2015-89017/ -14071;Рюкзаки;89018;Рюкзак MILO 13 L ;929.00;http://extremstyle.ua/ryukzaki-2-catalogs/MILO_13_L_2015-89018/ -14071;Рюкзаки;89019;Рюкзак EVE 28 L ;1579.00;http://extremstyle.ua/ryukzaki-2-catalogs/EVE_28_L_2015-89019/ -14071;Рюкзаки;89020;Рюкзак HADLEY 26 L ;1519.00;http://extremstyle.ua/ryukzaki-2-catalogs/HADLEY_26_L_2015-89020/ -14071;Рюкзаки;89022;Рюкзак PROM 25 L ;1499.00;http://extremstyle.ua/ryukzaki-2-catalogs/PROM_25_L_2015-89022/ -14071;Рюкзаки;89023;Рюкзак HANA 26 L ;969.00;http://extremstyle.ua/ryukzaki-2-catalogs/HANA_26_L_2015-89023/ -14071;Рюкзаки;89024;Рюкзак WOMENS WONDER 15 L ;879.00;http://extremstyle.ua/ryukzaki-2-catalogs/WOMENS_WONDER_15_L_2015-89024/ -14071;Рюкзаки;89025;Рюкзак GARDEN 20 L ;1199.00;http://extremstyle.ua/ryukzaki-2-catalogs/GARDEN_20_L_2015-89025/ -14071;Рюкзаки;89026;Рюкзак WOMENS CAPITOL PACK 23 L ;1079.00;http://extremstyle.ua/ryukzaki-2-catalogs/WOMENS_CAPITOL_PACK_23_L_2015-89026/ -14071;Рюкзаки;89027;Рюкзак COSMO 6.5 L ;729.00;http://extremstyle.ua/ryukzaki-2-catalogs/COSMO_65_L_2015-89027/ -14071;Рюкзаки;89028;Рюкзак WOMENS TRANSIT 18 L ;879.00;http://extremstyle.ua/ryukzaki-2-catalogs/WOMENS_TRANSIT_18_L_2015-89028/ -14071;Рюкзаки;89029;Рюкзак GIRLS GROM 13 L ;879.00;http://extremstyle.ua/ryukzaki-2-catalogs/GIRLS_GROM_13_L_2015-89029/ -14071;Рюкзаки;89030;Рюкзак WOMENS STASHABLE BACKPACK 20 L ;769.00;http://extremstyle.ua/ryukzaki-2-catalogs/WOMENS_STASHABLE_BACKPACK_20_L_2015-89030/ -14069;Сумки;89031; HUDSON 20 L ;1299.00;http://extremstyle.ua/sumki-2-catalogs/HUDSON_20_L_2015-89031/ -14069;Сумки;89032; PARK DUFFLE 52 L ;1449.00;http://extremstyle.ua/sumki-2-catalogs/PARK_DUFFLE_52_L_2015-89032/ -14069;Сумки;89033; OUTLET 8 L ;769.00;http://extremstyle.ua/sumki-2-catalogs/OUTLET_8_L_2015-89033/ -14069;Сумки;89034; PASSPORT 1 L ;529.00;http://extremstyle.ua/sumki-2-catalogs/PASSPORT_1_L_2015-89034/ -14069;Сумки;89035; JIVE;439.00;http://extremstyle.ua/sumki-2-catalogs/JIVE_15-89035/ -14069;Сумки;89036; JO JO ;589.00;http://extremstyle.ua/sumki-2-catalogs/JO_JO_2015-89036/ -14069;Сумки;89037; EQ BAG 23 L ;969.00;http://extremstyle.ua/sumki-2-catalogs/EQ_BAG_23_L_2015-89037/ -14069;Сумки;89038; EQ BAG 31 L ;1039.00;http://extremstyle.ua/sumki-2-catalogs/EQ_BAG_31_L_2015-89038/ -14069;Сумки;89039; EQ BAG 51 L ;1149.00;http://extremstyle.ua/sumki-2-catalogs/EQ_BAG_51_L_2015-89039/ -14069;Сумки;89041; WOMENS DUFFLE PACK 40 L ;1249.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_DUFFLE_PACK_40_L_2015-89041/ -14069;Сумки;89042; WOMENS EQ BAG 23 L ;969.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_EQ_BAG_23_L_2015-89042/ -14069;Сумки;89043; WOMENS EQ BAG 31 L ;1039.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_EQ_BAG_31_L_2015-89043/ -14069;Сумки;89044; WOMENS EQ BAG 51 L ;1149.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_EQ_BAG_51_L_2015-89044/ -14069;Сумки;89046; VENTURE DUFFLE 90 L ;3039.00;http://extremstyle.ua/sumki-2-catalogs/VENTURE_DUFFLE_90_L_2015-89046/ -14069;Сумки;89047; VENTURE DUFFLE 60 L ;2769.00;http://extremstyle.ua/sumki-2-catalogs/VENTURE_DUFFLE_60_L_2015-89047/ -14069;Сумки;89048; SPLIT ROLLER 100 L ;4799.00;http://extremstyle.ua/sumki-2-catalogs/SPLIT_ROLLER_100_L_2015-89048/ -14069;Сумки;89049; SPLIT ROLLER 65 L ;4549.00;http://extremstyle.ua/sumki-2-catalogs/SPLIT_ROLLER_65_L_2015-89049/ -14069;Сумки;89052; DUFFLE ROLLER 90 L ;3939.00;http://extremstyle.ua/sumki-2-catalogs/DUFFLE_ROLLER_90_L_2015-89052/ -14069;Сумки;89053; DUFFLE ROLLER 58 L ;3619.00;http://extremstyle.ua/sumki-2-catalogs/DUFFLE_ROLLER_58_L_2015-89053/ -14069;Сумки;89056; WOMENS CRUISER ROLLER 37 L ;4159.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_CRUISER_ROLLER_37_L_2015-89056/ -14069;Сумки;89057; WOMENS DUFFLE ROLLER 90 L ;3939.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_DUFFLE_ROLLER_90_L_2015-89057/ -14069;Сумки;89058; WOMENS DUFFLE ROLLER 58 L ;3619.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_DUFFLE_ROLLER_58_L_2015-89058/ -14069;Сумки;89059; WOMENS AVENUE ROLLER 39 L ;3019.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_AVENUE_ROLLER_39_L_2015-89059/ -14069;Сумки;89060; WOMENS CARRY-ON ROLLER 36 L ;3079.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_CARRY-ON_ROLLER_36_L_2015-89060/ -14069;Сумки;89061; WOMENS CARRY ON VALISE 35 L ;2419.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_CARRY_ON_VALISE_35_L_2015-89061/ -14069;Сумки;89062; WOMENS VENTURE DUFFLE 60 L ;2769.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_VENTURE_DUFFLE_60_L_2015-89062/ -14069;Сумки;89064; WOMENS SPLIT ROLLER 100 L ;4799.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_SPLIT_ROLLER_100_L_2015-89064/ -14069;Сумки;89065; WOMENS SPLIT ROLLER 65 L ;4549.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_SPLIT_ROLLER_65_L_2015-89065/ -14069;Сумки;89066; WOMENS OVER UNDER 49 L ;4069.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_OVER_UNDER_49_L_2015-89066/ -14069;Сумки;89067; HOT LAPS PACK 1.5 L ;769.00;http://extremstyle.ua/sumki-2-catalogs/HOT_LAPS_PACK_15_L_2015-89067/ -14069;Сумки;89068; 2 FOR 1 HIP PACK 8 L ;1149.00;http://extremstyle.ua/sumki-2-catalogs/2_FOR_1_HIP_PACK_8_L_2015-89068/ -14069;Сумки;89069; HIP PACK ;529.00;http://extremstyle.ua/sumki-2-catalogs/HIP_PACK__2015-89069/ -14069;Сумки;89070; CLASSIC HIP PACK ;509.00;http://extremstyle.ua/sumki-2-catalogs/CLASSIC_HIP_PACK__2015-89070/ -14069;Сумки;89071; WOMENS HIP PACK ;529.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_HIP_PACK__2015-89071/ -14069;Сумки;89072; WOMENS CLASSIC HIP PACK ;509.00;http://extremstyle.ua/sumki-2-catalogs/WOMENS_CLASSIC_HIP_PACK__2015-89072/ 14143;Экстремальные видеокамеры;89073; DELUXE POV CASE ;929.00;http://extremstyle.ua/ekstremalnyie_videokameryi-catalogs/DELUXE_POV_CASE__2015-89073/ -14070;Чехлы;89164; BIKE BAG ;8999.00;http://extremstyle.ua/chehly-catalogs/BIKE_BAG__2015-89164/ -14072;Кошельки, несессеры, косметички, чехлы;89387;кошелек VERT RAIL WALLET ;239.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/VERT_RAIL_WALLET__2015-89387/ -14072;Кошельки, несессеры, косметички, чехлы;89386;кошелек DIPLOMAT WALLET ;309.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/DIPLOMAT_WALLET__2015-89386/ -14072;Кошельки, несессеры, косметички, чехлы;89385;кошелек PAYBACK WALLET ;439.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/PAYBACK_WALLET_2015-89385/ -14072;Кошельки, несессеры, косметички, чехлы;89384;несессер ALINA 3 L ;639.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/ALINA_3_L_2015-89384/ -14072;Кошельки, несессеры, косметички, чехлы;89383;несессер PRIMA 5 L ;699.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/PRIMA_5_L_2015-89383/ -14072;Кошельки, несессеры, косметички, чехлы;89382;несессер DIVA 4 L ;879.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/DIVA_4_L_2015-89382/ -14072;Кошельки, несессеры, косметички, чехлы;89381;несессер TRAVEL KIT ;659.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/TRAVEL_KIT__2015-89381/ -14072;Кошельки, несессеры, косметички, чехлы;89380;кошелек WOMENS TRAVEL SLEEVE ;589.00;http://extremstyle.ua/koshelki_nesesseryi_kosmetichki_chehlyi-catalogs/WOMENS_TRAVEL_SLEEVE__2015-89380/ diff --git a/tests/_testStuff/StuffForEventTemplateManager/dynamicBody.php b/tests/_testStuff/StuffForEventTemplateManager/dynamicBody.php new file mode 100644 index 0000000..4a70009 --- /dev/null +++ b/tests/_testStuff/StuffForEventTemplateManager/dynamicBody.php @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + +
{{item_name}}
{{quantity}}шт по цене {{price}} грн
+ + + + + \ No newline at end of file diff --git a/tests/_testStuff/StuffForEventTemplateManager/dynamicFooter.php b/tests/_testStuff/StuffForEventTemplateManager/dynamicFooter.php new file mode 100644 index 0000000..115ee55 --- /dev/null +++ b/tests/_testStuff/StuffForEventTemplateManager/dynamicFooter.php @@ -0,0 +1,476 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Итого: {{sum}} грн
Телефон: {{phone}}
Адрес доставки: {{address}}
Email: {{email}}
+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Мы работаем:
+
    +
  • понедельник-пятница: с 9:00 до 18:00
  • +
  • суббота: с 10:00 до 16:00
  • +
  • воскресенье: выходной
  • +
+
С уважением, служба поддержки semena.in.ua
+ + + + +
+ Не забудьте заказать +
+
+ + + + + + + + + Удобрения для отличного урожая + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + + +
Чорнобривці розлогі...
+
+ + + + +
ціна від 2.8 грн
+
+ + + + +
+ + + + +
подробнее
+
+
+
+ + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + + +
Чорнобривці розлогі...
+
+ + + + +
ціна від 2.8 грн
+
+ + + + +
+ + + + +
подробнее
+
+
+
+ + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + + +
Чорнобривці розлогі...
+
+ + + + +
ціна від 2.8 грн
+
+ + + + +
+ + + + +
подробнее
+
+
+
+ + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + + +
Чорнобривці розлогі...
+
+ + + + +
ціна від 2.8 грн
+
+ + + + +
+ + + + +
подробнее
+
+
+
+ + + + + + + + + + + + + + + + +
+ + + + +
+
+ + + + +
Чорнобривці розлогі...
+
+ + + + +
ціна від 2.8 грн
+
+ + + + +
+ + + + +
подробнее
+
+
+
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + + + +
semena.in.ua
Адрес центрального офиса:
+ Киев, ул. Садовая, 95
+
+ + + + + + +
(044) 581-67-15
(044) 451-48-59
(050) 464-48-59
(067) 464-48-59
(093) 026-86-64
+
+ + + + + + + + + + + + + + + + +
+ + + + + +
+
+ + + + +
+ отписаться от рассылки
+
+ + + + +
+ Настроить рассылку
+
+
+
+ + + + + + + + + +
Вы получили это письмо, потому что зарегистрированы на сайте + semena.in.ua
+ + + + + + + \ No newline at end of file diff --git a/tests/_testStuff/StuffForEventTemplateManager/dynamicHead.php b/tests/_testStuff/StuffForEventTemplateManager/dynamicHead.php new file mode 100644 index 0000000..7662414 --- /dev/null +++ b/tests/_testStuff/StuffForEventTemplateManager/dynamicHead.php @@ -0,0 +1,318 @@ + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + +
Заманчивые предложенияЗагрузить картинки
+
+
+ + + + + + + +
+
+
+ + + + +
+ + + + + + +
+ + + + +
+
+ + + + + + + +
+ + + + + + + + + +
(044) 581-67-15(044) 451-48-59
(050) 464-48-59(067) 464-48-59
+
+ + + + +
(093) 026-86-64
+
+
+ + + + + + + + + + +
Личный кабинет
Обратная связь
Видеообзоры
+
+
+
+
+ + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + + + + + + +
О компанииДоставка и оплатаАкцииСоветы профессионалов
+
+
+ + + + + + + + + +
+ + + + + + + +
+ СЕМЕНА
ОВОЩЕЙ
+
+
+ + + + + + + +
+ СЕМЕНА
ЦВЕТОВ
+
+
+ + + + + + + +
+ Удобрения и
средства
защиты
+
+
+ + + + + + + +
+ Газонные
травы
+
+
+ + + + + + + +
+ Биопрепараты +
+
+ + + + + + + +
+ Товары
для сада
и огорода
+
+
+
+ + + + + +
+ + + + +
+ + + + + + + + + + + + + +
Здравствуйте, {{name}}
+ + + + +
+ Ваша заявка принята.
+Для подтверждения заказа наш менеджер + свяжется с вами в ближайшее время. +
+
+
+
+ + +
+ + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
Заявке присвоен номер: {{order_num}}
Будем рады ответить на ваши вопросы по телефонам:
+ + + + + + + +
(044) 581-67-15 (044) 451-48-59(050) 464-48-59(067) 464-48-59
+
+
+
+
+ + + + + +
+ + + +
+ \ No newline at end of file diff --git a/tests/_testStuff/StuffForEventTemplateManager/staticTemplate.php b/tests/_testStuff/StuffForEventTemplateManager/staticTemplate.php new file mode 100644 index 0000000..d7fb8a6 --- /dev/null +++ b/tests/_testStuff/StuffForEventTemplateManager/staticTemplate.php @@ -0,0 +1,902 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + + + +
Заманчивые предложенияЗагрузить картинки
+
+
+ + + + + + + + + +
+ +
+
+ + + + + + +
+ + + + + + + + +
+ + + + + + +
+
+ + + + + + + + + +
+ + + + + + + + + + + +
(044) 581-67-15(044) 451-48-59
(050) 464-48-59(067) 464-48-59
+
+ + + + + + +
(093) 026-86-64
+
+
+ + + + + + + + + + + + +
Личный кабинет
Обратная связь
Видеообзоры
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + + + + + +
О компанииДоставка и оплатаАкцииСоветы профессионалов
+
+
 
+ +
+
 
+ + + + + + + + + + + +
+ + + + + + + + + +
СЕМЕНА
+ ОВОЩЕЙ
+
+ + + + + + + + + +
СЕМЕНА
+ ЦВЕТОВ
+
+ + + + + + + + + +
Удобрения и
+ средства
+ защиты
+
+ + + + + + + + + +
Газонные
+ травы
+
+ + + + + + + + + +
Биопрепараты
+
+ + + + + + + + + +
Товары
+ для сада
+ и огорода
+
+
+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 
Здравствуйте, Vitaliy.
+ Вы прошли регистрацию на сайте
+ «Професійне насіння».
 
+ + + + + + + +
Ваш логин:test@test.com
+
 
Будем рады ответить
на ваши вопросы по телефонам:
 
(044) 581-67-15
(044) 451-48-59
(050) 464-48-59
(067) 464-48-59
 
Уточнить информацию и внести изменения можно на сайте в личном кабинете.
Если вы забудете пароль, мы его сразу вам вышлем.
Хорошего вам дня!
 
С уважением, команда службы поддержки semena.in.ua.
+
+
+ + + + + + +
Мы приготовили для вас интересные предложения!
+
+ + + + + + + + + + + + + +
 
+ + + + + + + + + + + + + + + + + + +
+ + + + + + +
+
+ + + + + + +
Чорнобривці розлогі...
+
+ + + + + + +
ціна від 2.8 грн
+
 
+ + + + + + +
+ + + + + + +
подробнее
+
+
+
+ + + + + + + + + + + + + + + + + + +
+ + + + + + +
+
+ + + + + + +
Чорнобривці розлогі...
+
+ + + + + + +
ціна від 2.8 грн
+
 
+ + + + + + +
+ + + + + + +
подробнее
+
+
+
+ + + + + + + + + + + + + + + + + + +
+ + + + + + +
+
+ + + + + + +
Чорнобривці розлогі...
+
+ + + + + + +
ціна від 2.8 грн
+
 
+ + + + + + +
+ + + + + + +
подробнее
+
+
+
+ + + + + + + + + + + + + + + + + + +
+ + + + + + +
+
+ + + + + + +
Чорнобривці розлогі...
+
+ + + + + + +
ціна від 2.8 грн
+
 
+ + + + + + +
+ + + + + + +
подробнее
+
+
+
+ + + + + + + + + + + + + + + + + + +
+ + + + + + +
+
+ + + + + + +
Чорнобривці розлогі...
+
+ + + + + + +
ціна від 2.8 грн
+
 
+ + + + + + +
+ + + + + + +
подробнее
+
+
+
+
+ +
+
+ +
+
+
+ + + + + + +
+ + + + + + + + + +
+ + + + + + +
Наши преимущества
+
+ + + + + + + + + + +
+ + + + + + + + + +
Сертифицированный
+ товар
+
+ + + + + + + + + +
Европейские
+ бренды
+
+ + + + + + + + + +
100%
+ всхожести
+
+ + + + + + + + + +
Доставка курьером
+ на следующий
+ день
+
+ + + + + + + + + +
Консультации
+ профессионалов
+
+
+
+
+ + + + + + +
+ + + + + + + + +
+ + + + + + + + + +
semena.in.ua
Адрес центрального офиса:
+ Киев, ул. Садовая, 95
+
+ + + + + + + + + + + + + + + + + + +
(044) 581-67-15
(044) 451-48-59
(050) 464-48-59
(067) 464-48-59
(093) 026-86-64
+
+ + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+
 
+ + + + + + +
отписаться от рассылки
+
 
+ + + + + + +
Настроить рассылку
+
+
+
+
+ + + + + + +
Вы получили это письмо, потому что зарегистрированы на сайте semena.in.ua
+
diff --git a/tests/unit/EventAdderTest.php b/tests/unit/EventAdderTest.php new file mode 100644 index 0000000..97550ea --- /dev/null +++ b/tests/unit/EventAdderTest.php @@ -0,0 +1,44 @@ + 'mywork1@bigmir.net', + "name" => 'fdgfg', + "params" =>'email=mywork1@bigmir.net', + "expires" => 30, + "event_type" => 'add_subscribe', + "time" => 0, + "timer_start" => true, + "active_item_id" => 'undefined', + "old_quantity" => 'undefined', + "error" => false, + "interval" => 28593, + "project_id" => 38, + "project_name" => 'Семена', + ); + + $EventAdder = new \MyMailer\EventAdder(); + + $EventAdder->insertPost($post); + + $EventAdder->callEventFactory(); + } + +} diff --git a/www-backend/index.php b/www-backend/index.php index ee23881..f264c79 100644 --- a/www-backend/index.php +++ b/www-backend/index.php @@ -817,9 +817,17 @@ try // session - $di->set('session', function() { - $session = new Phalcon\Session\Adapter\Files(); + $di->set('session', function() use ($di){ + // Create a connection + $connection = $di->get('db'); + + $session = new \Database(array( + 'db' => $connection, + 'table' => 'session_data' + )); + $session->start(); + return $session; }, true ); diff --git a/www-tasks/index.php b/www-tasks/index.php index a01d8a1..4771da4 100644 --- a/www-tasks/index.php +++ b/www-tasks/index.php @@ -164,11 +164,20 @@ try { return new \rds(); }, true ); + // session - $di->set('session', function() { - $session = new Phalcon\Session\Adapter\Files(); + $di->set('session', function() use ($di){ + // Create a connection + $connection = $di->get('db'); + + $session = new \Database(array( + 'db' => $connection, + 'table' => 'session_data' + )); + $session->start(); + return $session; }, true ); //exelphp diff --git a/www/index.php b/www/index.php index 9b675a3..a8482ae 100644 --- a/www/index.php +++ b/www/index.php @@ -983,11 +983,20 @@ try return new \rds(); }, true ); + // session - $di->set('session', function() { - $session = new Phalcon\Session\Adapter\Files(); + $di->set('session', function() use ($di){ + // Create a connection + $connection = $di->get('db'); + + $session = new \Database(array( + 'db' => $connection, + 'table' => 'session_data' + )); + $session->start(); + return $session; }, true ); -- libgit2 0.21.4