コード例 #1
0
 public function indexAction($maker_id = null, $product_id = null)
 {
     if ($this->request->isPost()) {
         $redirect = "revaluation/index";
         $input_maker = $this->request->getPost('maker_id');
         if (!empty($input_maker)) {
             if (preg_match('/^\\d+$/', $input_maker)) {
                 $maker_id = $input_maker;
             } else {
                 $maker_id = PMaker::findFirst("name='{$input_maker}'")->id;
             }
             //                $maker_id = $this->request->getPost('maker_id', 'int');
             $redirect = "revaluation/index/{$maker_id}";
             //                return $this->response->redirect("revaluation/index/$maker_id");
         }
         if (!empty($this->request->getPost('product_id', 'int'))) {
             $product_id = $this->request->getPost('product_id', 'int');
             if ($find_product = PProductMain::findFirst($product_id)) {
                 $maker_id = $find_product->maker_id;
                 $redirect = "revaluation/index/{$maker_id}/{$product_id}";
             } else {
                 $redirect = "revaluation/index";
             }
             //                return $this->response->redirect("revaluation/index/$maker_id/$product_id");
         }
         return $this->response->redirect($redirect);
     }
     if ($maker_id != null) {
         // Find maker
         $and_prod_id = $product_id != null ? " AND id={$product_id}" : null;
         $maker = PMaker::findFirst($maker_id);
         if (!$maker) {
             $this->flash->error("Мастер с id {$maker_id} не найден!");
             return $this->response->redirect("revaluation/index");
         }
         $maker_products = PProductMain::find("parent=0 AND maker_id={$maker_id}" . $and_prod_id);
         $maker_count = PProductMain::count("parent=0 AND maker_id={$maker_id}" . $and_prod_id);
         $this->view->maker = $maker->name;
         $this->view->maker_count = $maker_count;
         $this->view->maker_curr = $maker->currencystr;
         // Currency rate
         //            $this->view->crosscurr = PCrosscurrency::findFirst("title='{$maker->currencystr}'")->currencyrate;
         // Paginator
         $perpage = $this->request->getQuery('perpage', 'int') ? $this->request->getQuery('perpage', 'int') : 50;
         $page = $this->request->getQuery('page', 'int') ? $this->request->getQuery('page', 'int') : 1;
         $paginator = new Paginator(["data" => $maker_products, "limit" => $perpage, "page" => $page]);
         $this->view->page = $paginator->getPaginate();
     }
     // All makers
     //        $this->view->makers_list = array_column(PMaker::find(["name IS NOT NULL AND isseller=1 AND approved=1 AND (banned=0 OR banned IS NULL)", 'order' => 'name ASC'])->toArray(), 'name', 'id');
     $this->view->maker_id = $maker_id;
     $this->view->requests = PRevaluation::find(['active=1', 'order' => 'created DESC']);
 }
コード例 #2
0
 public function index2Action($maker_id = null)
 {
     if ($maker_id != null) {
         $maker_id = $this->filter->sanitize($maker_id, 'int');
         if ($maker = PMaker::findFirst($maker_id)) {
             $this->view->products = $products = PProductMain::find("maker_id={$maker_id}");
             $this->view->maker = $maker;
             $this->view->count = PProductMain::count("maker_id={$maker_id}");
             if ($this->request->isPost()) {
                 $args = ['main_comment' => ['filter' => FILTER_SANITIZE_STRING], 'title' => ['filter' => FILTER_SANITIZE_STRING, 'flags' => FILTER_REQUIRE_ARRAY], 'oldprice' => ['filter' => FILTER_SANITIZE_NUMBER_FLOAT, 'flags' => FILTER_REQUIRE_ARRAY], 'comment' => ['filter' => FILTER_SANITIZE_STRING, 'flags' => FILTER_REQUIRE_ARRAY]];
                 $inpData = filter_input_array(INPUT_POST, $args);
                 $main_comment = $inpData['main_comment'];
                 $title = $inpData['title'];
                 $oldprice = $inpData['oldprice'];
                 $comment = $inpData['comment'];
                 $body = "";
                 if (!empty($main_comment)) {
                     $body = "Комментарий: {$main_comment}<br><br>";
                 }
                 $body .= "<table width='100%' border='1' cellpadding='2' cellspacing='1'>";
                 $body .= "<tr><td>ID</td><td>Название</td><td>Старая цена</td><td>Комментарий</td></tr>";
                 foreach ($comment as $product_id => $value) {
                     if (!$value) {
                         continue;
                     }
                     $body .= "<tr>\n                        <td>{$product_id}</td>\n                        <td>{$title[$product_id]}</td>\n                        <td>{$oldprice[$product_id]} {$maker->currencystr}</td>\n                        <td>{$value}</td>\n                      </tr>";
                 }
                 $body .= "</table>";
                 // Compose a message
                 $msg = ['To' => $this->config->emails->usercab2, 'From' => $this->config->POSTMARK->POSTMARK_FROM, 'Subject' => "Комментарии от мастера - {$maker->name}", 'HtmlBody' => "<html><body>{$body}</body></html>"];
                 try {
                     $client = new PostmarkClient($this->config->POSTMARK->POSTMARK_API);
                     $send = $client->sendEmailBatch([$msg]);
                     $this->flash->success('Сохранено!');
                 } catch (PostmarkException $ex) {
                     if ($ex) {
                         $this->flash->error('Произошла ошибка!');
                     }
                 }
             }
         } else {
             $this->flash->error('Мастер с таким ID не найден!');
             $this->response->redirect('usercab/index2');
         }
     }
 }
コード例 #3
0
 public function productsAction()
 {
     $request = $this->request;
     $persistent = $this->persistent;
     // Reset
     $reset = $this->request->getQuery('reset', 'int');
     if (isset($reset)) {
         $persistent->productsParams = null;
     }
     // Persistent parameters
     if (!is_array($persistent->productsParams)) {
         $persistent->productsParams = ['qry' => ['conditions' => "id IS NOT NULL", 'order' => 'id ASC'], 'sort' => ['page' => 1, 'perpage' => 50]];
     }
     $parameters = $persistent->productsParams;
     $parameters['sort']['perpage'] = 50;
     $parameters['sort']['page'] = 1;
     if ($request->getQuery('page', 'int')) {
         $parameters['sort']['page'] = $request->getQuery('page', 'int');
     }
     if ($request->getQuery('perpage', 'int')) {
         $parameters['sort']['perpage'] = $request->getQuery('perpage', 'int');
     }
     // ----------------------------------------
     // Search
     if ($request->isPost()) {
         $parameters['search_cat'] = null;
         $parameters['search_virtcat'] = null;
         $parameters['search_maker'] = null;
         $parameters['search_material'] = null;
         $parameters['search_hold'] = null;
         $parameters['search_id'] = null;
         // Category
         if (!empty($_POST['search_cat'])) {
             $search_cat_get = $request->getPost('search_cat', 'int');
             $parameters['search_cat'] = $search_cat_get;
             $search_cats = PCategory::getCatTree($search_cat_get);
             $search_cat = " AND category_id IN ({$search_cats})";
         } else {
             $search_cat = null;
         }
         // Virtual category
         if (!empty($_POST['search_virtcat'])) {
             $search_virtcat_get = $request->getPost('search_virtcat', 'int');
             $parameters['search_virtcat'] = $search_virtcat_get;
             $search_virtcat = " AND tmaterial_id = {$search_virtcat_get}";
         } else {
             $search_virtcat = null;
         }
         // Maker
         if (!empty($_POST['search_maker'])) {
             $search_maker_get = $request->getPost('search_maker', 'int');
             $parameters['search_maker'] = $search_maker_get;
             $search_maker = " AND maker_id = {$search_maker_get}";
         } else {
             $search_maker = null;
         }
         // Material
         if (!empty($_POST['search_material'])) {
             $search_material_get = $request->getPost('search_material', 'int');
             $parameters['search_material'] = $search_material_get;
             $search_material = " AND cmaterial_id = {$search_material_get}";
         } else {
             $search_material = null;
         }
         // Hold
         if (!empty($_POST['search_hold'])) {
             $search_hold_get = $request->getPost('search_hold', 'int');
             $parameters['search_hold'] = $search_hold_get;
             $search_hold = $search_hold_get == 1 ? " AND hold = 1" : " AND hold = 0";
         } else {
             $search_hold = null;
         }
         // ID
         if (!empty($_POST['search_id'])) {
             $parameters['search_id'] = $request->getPost('search_id', 'string');
             $search_id_get = preg_split('/[,\\s]/', $request->getPost('search_id', 'string'), null, PREG_SPLIT_NO_EMPTY);
             $search_id = join(', ', $search_id_get);
             $search_id = " AND id IN ({$search_id})";
         } else {
             $search_id = null;
         }
         // Search parameters
         $parameters['qry'] = ['conditions' => "id IS NOT NULL\n                    {$search_cat}\n                    {$search_virtcat}\n                    {$search_maker}\n                    {$search_material}\n                    {$search_hold}\n                    {$search_id}"];
     }
     // Other parameters
     $parameters['query_count'] = PProductMain::count($parameters['qry']);
     $parameters['qry']['order'] = "id ASC";
     $parameters['qry']['limit'] = 10000;
     $persistent->productsParams = $parameters;
     //        var_dump($parameters);
     // Find all placements that correspond to set parameters
     $products = PProductMain::find($parameters['qry']);
     // Paginator
     $paginator = new Paginator(["data" => $products, "limit" => $parameters['sort']['perpage'], "page" => $parameters['sort']['page']]);
     $this->view->page = $paginator->getPaginate();
     // Set selected search values
     $this->view->selected_cat = isset($parameters['search_cat']) && !empty($parameters['search_cat']) ? $parameters['search_cat'] : null;
     $this->view->selected_virtcat = isset($parameters['search_virtcat']) && !empty($parameters['search_virtcat']) ? $parameters['search_virtcat'] : null;
     $this->view->selected_maker = isset($parameters['search_maker']) && !empty($parameters['search_maker']) ? $parameters['search_maker'] : null;
     $this->view->selected_material = isset($parameters['search_material']) && !empty($parameters['search_material']) ? $parameters['search_material'] : null;
     $this->view->selected_hold = isset($parameters['search_hold']) && !empty($parameters['search_hold']) ? $parameters['search_hold'] : null;
     $this->view->selected_id = isset($parameters['search_id']) && !empty($parameters['search_id']) ? $parameters['search_id'] : null;
     // Products count (overall or filtered)
     $this->view->products_count = $parameters['query_count'];
     // All categories
     $this->view->cats_list = PCategory::getCatList();
     // All virtual categories
     $virtcats = PCategoryGroup::find(['order' => 'title ASC']);
     foreach ($virtcats as $virtcat) {
         $virtcats_array[$virtcat->id] = $virtcat->title;
     }
     $this->view->virtcats_list = $virtcats_array;
     // All makers
     //        $makers = PMaker::find(["name IS NOT NULL AND isseller=1 AND approved=1 AND banned=0", 'order' => 'name ASC']);
     $makers = PMaker::find(["name IS NOT NULL AND isseller=1", 'order' => 'name ASC']);
     foreach ($makers as $maker) {
         $makers_array[$maker->id] = $maker->name;
     }
     $this->view->makers_list = $makers_array;
     // All materials
     $materials = PProdMaterial::find(['order' => 'title ASC']);
     foreach ($materials as $material) {
         $materials_array[$material->id] = $material->title;
     }
     $this->view->materials_list = $materials_array;
     // Langs stat
     $langs = PProdInfo::count(["coder_status = 5", 'group' => 'lang', 'order' => 'id']);
     foreach ($langs as $lang) {
         $langs_stat[$lang->lang] = $lang->rowcount;
     }
     $this->view->langs_stat = $langs_stat;
     // Check if user can put products on hold
     $this->view->can_hold = AccRoles::findFirst("user_id={$this->auth->id} AND (role_id=5 OR role_id=1000)");
 }
コード例 #4
0
 /**
  * Table of moderated products grouped by languages and statuses
  */
 public function moderatedAction()
 {
     $stats['done'] = PProdInfo::count(["coder_status = 5", 'group' => 'lang', 'order' => 'id'])->toArray();
     $stats['done_hold'] = PStats::count(["coder_status = 5 AND hold = 1", 'group' => 'lang', 'order' => 'id'])->toArray();
     $stats['inmoder'] = PProdInfo::count(["coder_status = 3", 'group' => 'lang', 'order' => 'id'])->toArray();
     $stats['inmoder_hold'] = PStats::count(["coder_status = 3 AND hold = 1", 'group' => 'lang', 'order' => 'id'])->toArray();
     $stats['returned'] = PProdInfo::count(["coder_status = 6", 'group' => 'lang', 'order' => 'id'])->toArray();
     $stats['returned_hold'] = PStats::count(["coder_status = 6 AND hold = 1", 'group' => 'lang', 'order' => 'id'])->toArray();
     $stats['todo_hold'] = PStats::count(["coder_status < 3 AND hold = 1", 'group' => 'lang', 'order' => 'id'])->toArray();
     $stats['translator'] = PProdInfo::count(["coder_status = 1", 'group' => 'lang', 'order' => 'id'])->toArray();
     $stats['translator_hold'] = PStats::count(["coder_status = 1 AND hold = 1", 'group' => 'lang', 'order' => 'id'])->toArray();
     $stats['hold_total'] = PStats::count(["hold = 1", 'group' => 'lang', 'order' => 'id'])->toArray();
     $stats['langs'] = PProdInfo::count(['group' => 'lang', 'order' => 'id'])->toArray();
     $this->view->total_ru = PStats::count("coder_status = 5 AND lang = 'ru'");
     $this->view->total = PProductMain::count();
     $this->view->total_hold = PProductMain::count("hold=1");
     $this->view->total_hold_photocoder = PProductMain::count("hold=1 AND status<4");
     $this->view->stats = $stats;
     $this->view->current_date = date('H:i:s d.m.Y');
 }
コード例 #5
0
    public function moderAction()
    {
        $stats = [];
        $stats['done'] = PProdInfo::count(["coder_status = 5", 'group' => 'lang', 'order' => 'id']);
        $stats['done_hold'] = PStats::count(["coder_status = 5 AND hold = 1", 'group' => 'lang', 'order' => 'id']);
        $stats['inmoder'] = PProdInfo::count(["coder_status = 3", 'group' => 'lang', 'order' => 'id']);
        $stats['inmoder_hold'] = PStats::count(["coder_status = 3 AND hold = 1", 'group' => 'lang', 'order' => 'id']);
        $stats['returned'] = PProdInfo::count(["coder_status = 6", 'group' => 'lang', 'order' => 'id']);
        $stats['returned_hold'] = PStats::count(["coder_status = 6 AND hold = 1", 'group' => 'lang', 'order' => 'id']);
        $stats['todo_hold'] = PStats::count(["coder_status < 3 AND hold = 1", 'group' => 'lang', 'order' => 'id']);
        $stats['hold_total'] = PStats::count(["hold = 1", 'group' => 'lang', 'order' => 'id']);
        $langs = PProdInfo::count(['group' => 'lang', 'order' => 'id']);
        $total_ru = PStats::count("coder_status = 5 AND lang = 'ru'");
        $total = PProductMain::count();
        $date = date('d.m.Y');
        $titles = ["Сделано (5) (из них на холде)", "На модерации (3) (из них на холде)", "Возвращено (6) (из них на холде)", "Не обработано еще (0) (из них на холде)", "Замороженые товары (hold), всего"];
        $stat_titles = ["done", "inmoder", "returned"];
        $text = <<<TEXT
<p style="margin-bottom: 20px">Всего товаров: <span id="total">{$total}</span></p>
<p style="margin-bottom: 20px">Отчет на {$date}</p>
<table border='1'>
<tr>
<th></th>
TEXT;
        foreach ($langs as $lang => $stat) {
            $text .= "<th width='110px'>{$stat['lang']}</th>";
        }
        $text .= "</tr>";
        for ($i = 0; $i < 3; $i++) {
            $text .= "<tr><td>{$titles[$i]}</td>";
            foreach ($langs as $lang => $stat) {
                $text .= "<td>";
                foreach ($stats[$stat_titles[$i]] as $lang_total => $stat_total) {
                    if ($stat_total['lang'] == $stat['lang']) {
                        $text .= $stat_total['rowcount'] . " ";
                        foreach ($stats[$stat_titles[$i] . '_hold'] as $lang_hold => $stat_hold) {
                            if ($stat_hold['lang'] == $stat['lang']) {
                                $text .= "({$stat_hold['rowcount']})";
                            }
                        }
                    }
                }
                $text .= "</td>";
            }
            $text .= "</tr>";
        }
        $text .= "<tr><td>{$titles[3]}</td>";
        foreach ($langs as $lang => $stat) {
            $text .= "<td>";
            if ($stat['lang'] == 'ru') {
                $text .= $total - $stat['rowcount'];
            } else {
                $text .= $total_ru - $stat['rowcount'];
            }
            foreach ($stats['todo_hold'] as $lang_hold => $stat_hold) {
                if ($stat_hold['lang'] == $stat['lang']) {
                    $text .= "({$stat_hold['rowcount']})";
                }
            }
            $text .= "</td>";
        }
        $text .= "</tr>";
        $text .= "<tr><td>{$titles[4]}</td>";
        foreach ($langs as $lang => $stat) {
            $text .= "<td>";
            foreach ($stats['hold_total'] as $lang_hold => $stat_hold) {
                if ($stat_hold['lang'] == $stat['lang']) {
                    $text .= "{$stat_hold['rowcount']}";
                }
            }
            $text .= "</td>";
        }
        $text .= "</tr></table>";
        $text .= <<<TEXT
<br><br><b>Описание</b>
<p>Сделано (5) - товары со статусом перевода на данный язык == 5 ( в случае с RU статус копирайта == 5)</p>
<p>На модерации (3) - товары со статусом перевода на данный язык == 3 ( в случае с RU статус копирайта == 3)</p>
<p>Возвращено (6) - товары со статусом перевода на данный язык == 6 ( в случае с RU статус копирайта == 6)</p>
<p>Не обработано еще (0) - товары со статусом перевода на данный язык == 0 ( в случае с RU статус копирайта == 0)</p>
<p>Замороженые товары (hold) - товары со статусом hold == Да</p>
TEXT;
        $message[] = ['To' => '*****@*****.**', 'From' => POSTMARK_FROM, 'Subject' => "Количество отмодерированных товаров. Отчет за {$date}", 'HtmlBody' => $text];
        $client = new PostmarkClient(POSTMARK_API);
        //        var_dump($message);
        $send = $client->sendEmailBatch($message);
    }
コード例 #6
0
ファイル: AdvController.php プロジェクト: serge2300/madeheart
 public function addproductAction($campaign_id = null, $all = null, $allprods = null)
 {
     $request = $this->request;
     $response = $this->response;
     $persistent = $this->persistent;
     if ($campaign_id != null) {
         $adv_products = new AdvProducts();
         // Add all products in selected category or in search result
         if ($all == 'all') {
             // Find all products for the specified campaign
             if ($campaign_products = AdvProducts::find("campaign_id={$campaign_id}")) {
                 foreach ($campaign_products as $product) {
                     $list_of_products[] = $product->product_id;
                 }
             }
             $selected_products = isset($list_of_products) ? " AND id NOT IN (" . implode(',', $list_of_products) . ")" : null;
             // Add selected categories or selected products
             $cats_or_prods = $allprods == 'allprods' ? $persistent->search_query : $persistent->search_cats;
             $prod_set_params = ['conditions' => "hold = 0\n                        AND category_id IS NOT NULL AND priceUSD IS NOT NULL\n                        {$cats_or_prods}\n                        {$selected_products}"];
             $prod_count = PProductMain::count($prod_set_params);
             // Set the limit for products that can be added
             if ($prod_count > 10000) {
                 $this->flash->error('Вы не можете добавить более 10000 товаров одновременно!<br> Выберите категорию с меньшим количеством товаров или добавляйте товары вручную.');
                 $response->redirect("adv/products/{$campaign_id}");
             } else {
                 // Find all products in selected category(ies)
                 $prod_set = PProductMain::find($prod_set_params);
                 foreach ($prod_set as $prod) {
                     $prods[] = "({$campaign_id}, {$prod->id})";
                 }
                 $prod_pairs = implode(', ', $prods);
                 //                    $sql = "INSERT INTO advproducts (campaign_id, product_id) VALUES {$prod_pairs}";
                 $sql = "INSERT INTO p_adv_products (campaign_id, product_id) VALUES {$prod_pairs}";
                 $result = $adv_products->getReadConnection()->query($sql);
                 if (!$result) {
                     $this->flash->error('Ошибка при добавлении товаров');
                     $response->redirect("adv/products/{$campaign_id}");
                 } else {
                     $this->flash->success('Выбранные товары были успешно добавлены');
                     $response->redirect("adv/products/{$campaign_id}/campaign?reset=1");
                 }
             }
             // If a single product is added from products list
         } elseif ($all == 'virtcat') {
             $virtcat_prods = array_column(PProductMain::find("tmaterial_id={$allprods}")->toArray(), 'id');
             foreach ($virtcat_prods as $prod) {
                 $adv_products = new AdvProducts();
                 $adv_products->campaign_id = $campaign_id;
                 $adv_products->product_id = $prod;
                 $adv_products->save();
             }
             $response->redirect("adv/products/{$campaign_id}/campaign?reset=1");
         } else {
             $adv_products->campaign_id = $campaign_id;
             $adv_products->product_id = $product_id = $request->getPost('product_id', 'int');
             // Check if the product is already in campaign/catalog
             if (AdvProducts::count("product_id={$product_id} AND campaign_id={$campaign_id}") < 1) {
                 if (!$adv_products->save()) {
                     $this->flash->error('Ошибка при добавлении товара');
                     $response->redirect("adv/products/{$campaign_id}");
                 } else {
                     $persistent->last_added_product = "AND id != {$product_id}";
                 }
             }
         }
     }
     $this->view->disable();
 }