public function actionStat()
 {
     $id = (int) Yii::app()->request->getParam("id", 0);
     if ($id > 0) {
         $subscribeModel = SubscribeItems::fetch($id);
         if ($subscribeModel->id > 0) {
             if ($this->beginCache("SubscribeStat" . $id . "_" . Yii::app()->getLanguage(), array('duration' => 1200))) {
                 $needSend = 0;
                 if ($subscribeModel->user == 1 || $subscribeModel->user == 2) {
                     $countUsers = CatalogUsers::count(DBQueryParamsClass::CreateParams()->setConditions("subscribe=1")->setLimit(-1));
                     $needSend += $countUsers;
                 }
                 if ($subscribeModel->user == 1 || $subscribeModel->user == 3) {
                     $countUsers = SubscribeUsers::count(DBQueryParamsClass::CreateParams()->setLimit(-1));
                     $needSend += $countUsers;
                 }
                 if ($subscribeModel->users == 4) {
                     $usersList = trim(strip_tags($subscribeModel->users_list));
                     if (!empty($usersList)) {
                         $listEmail = explode(",", $usersList);
                         $needSend += sizeof($listEmail);
                     }
                 }
                 $countSend = SubscribeSend::count(DBQueryParamsClass::CreateParams()->setConditions("item_id=" . $id)->setLimit(-1));
                 $countOpen = SubscribeSend::count(DBQueryParamsClass::CreateParams()->setConditions("item_id=" . $id . " AND is_open=1")->setLimit(-1));
                 $this->render($this->viewPath . "stat", array("item" => $subscribeModel, "countSend" => $countSend, "countOpen" => $countOpen, "needSend" => $needSend, 'arrayParams' => array("group_id" => $subscribeModel->group_id)));
                 $this->endCache();
             }
         }
     }
 }
Example #2
0
 public function actionSubscribeOpen()
 {
     $email = Yii::app()->request->getParam("email", "");
     $subscribe = (int) Yii::app()->request->getParam("subscribe", 0);
     if (!empty($email) && !empty($subscribe)) {
         $checkModel = SubscribeSend::findByAttributes(["email" => $email, "item_id" => $subscribe]);
         if (sizeof($checkModel) > 0 && $checkModel[0]->is_open == 0) {
             $checkModel[0]->is_open = 1;
             $checkModel[0]->save();
         }
     }
 }
 public function run($args)
 {
     $countLimit = SiteHelper::getConfig("subscribee_count_send");
     $emails = array();
     $countSend = 0;
     $res = SubscribeItems::findByAttributes(array("status_id" => 2));
     foreach ($res as $line) {
         // 1 - отправляем и зарегеным и подписчикам
         if ($line->users == 1 || $line->users == 2) {
             $lisUsers = CatalogUsers::sql("SELECT u.* FROM catalog_users u WHERE `active`=1 AND subscribe=1 AND !exists( SELECT id FROM subscribe_send WHERE email=u.email AND item_id='" . $line->id . "' AND is_reg=1 ) LIMIT " . $countLimit);
             foreach ($lisUsers as $userLine) {
                 $emails[] = array("email" => $userLine["email"], "name" => $userLine["name"]);
                 $newSend = new SubscribeSend();
                 $newSend->item_id = $line->id;
                 $newSend->user_id = $userLine["id"];
                 $newSend->email = $userLine["email"];
                 $newSend->is_reg = 1;
                 if (!$newSend->save()) {
                     print_r($newSend->getErrors());
                 }
             }
         }
         if (sizeof($emails) < $countLimit && ($line->users == 1 || $line->users == 3)) {
             $lisUsers = CatalogUsers::sql("SELECT u.* FROM subscribe_users u WHERE !exists( SELECT id FROM subscribe_send WHERE email=u.email AND item_id='" . $line->id . "' AND is_reg=0 ) LIMIT " . ($countLimit - sizeof($emails)));
             foreach ($lisUsers as $userLine) {
                 $emails[] = array("email" => $userLine["email"], "name" => $userLine["name"]);
                 $newSend = new SubscribeSend();
                 $newSend->item_id = $line->id;
                 $newSend->user_id = null;
                 $newSend->email = $userLine["email"];
                 $newSend->is_reg = 0;
                 if (!$newSend->save()) {
                     print_r($newSend->getErrors());
                 }
             }
         }
         if ($line->users == 4) {
             $usersList = trim(strip_tags($line->users_list));
             if (!empty($usersList)) {
                 $listEmail = explode(",", $usersList);
                 for ($m = 0; $m < sizeof($listEmail); $m++) {
                     $listEmail[$m] = trim($listEmail[$m]);
                     $ext = SubscribeSend::findByAttributes(array("item_id" => $line->id, "email" => $listEmail[$m]));
                     if (sizeof($ext) == 0) {
                         $emails[] = array("email" => $listEmail[$m], "name" => "пользователь");
                         $newSend = new SubscribeSend();
                         $newSend->item_id = $line->id;
                         $newSend->user_id = null;
                         $newSend->email = $listEmail[$m];
                         $newSend->is_reg = 0;
                         if (!$newSend->save()) {
                             print_r($newSend->getErrors());
                         }
                     }
                 }
             }
         }
         if (sizeof($emails) > 0) {
             for ($n = 0; $n < sizeof($emails); $n++) {
                 $countSend++;
                 $message = $line->description;
                 $message = str_replace("@user_name@", $emails[$n]["name"], $message);
                 SiteHelper::mailto($line->subject, $line->from, $emails[$n]["email"], stripslashes($message), "", "", array("<!-- @openSubscribeLink@ -->" => "<img src=\"" . Yii::app()->params["baseUrl"] . "site/subscribeOpen/subscribe/" . $line->id . "/email/" . $emails[$n]["email"] . "\" alt=\"\" style=\"width:0px;height:0px\" />"));
             }
         }
         // Сохраняем количество оптравленных, чтобы не считать каждый раз
         if ($countSend > 0) {
             $line->count_send += $countSend;
             $line->save();
         }
         // Если адресатов нет или их количество меньше чем лимит то финализируем рассылку
         if (sizeof($emails) == 0 || $countSend < $countLimit) {
             $line->status_id = 3;
             $line->save();
         }
     }
 }