Exemple #1
0
 /**
  * Send message to WhatsApp, then add statuses to DB
  * 
  * @param Message $message
  */
 public function sendMessage(Message $message, Sender $sender)
 {
     $messageDAO = new MessageDAO();
     if ('' == $sender->getPassword()) {
         $messageDAO->addStatus($message, Message::MESSAGE_STATUS_ERROR, 'Sender not registered - go sender and use confirm SMS function');
         return;
     }
     $statuses = $messageDAO->getStatuses($message);
     $sentOk = array();
     foreach ($statuses as $status) {
         if (empty($status['target'])) {
             continue;
         }
         switch ($status['status']) {
             case Message::MESSAGE_STATUS_SENT:
             case Message::MESSAGE_STATUS_RECEIVED_BY_SERVER:
             case Message::MESSAGE_STATUS_RECEIVED_BY_PHONE:
                 $sentOk[$status['target']] = 1;
                 $messageDAO->setMessageTargetStatus($message, $status['target'], $status['status']);
                 break;
         }
     }
     echo "Already sent to: " . implode(",", array_keys($sentOk)) . "\n";
     $groupDao = new GroupDAO();
     $syncedNumbers = $groupDao->getNumbers($message->getGroupId(), true);
     try {
         $w = $this->getWhatsProt($sender);
         if (empty($w)) {
             return;
         }
         $targets = explode(',', $message->getTarget());
         $targets = array_combine($targets, $targets);
         $statuses = $messageDAO->getStatuses($message);
         foreach ($statuses as $status) {
             if ($status['status'] == Message::MESSAGE_STATUS_RECEIVED_BY_SERVER) {
                 unset($targets[$status['target']]);
             }
         }
         $filteredTargets = array();
         $notSynced = array();
         $allTargets = array();
         foreach ($targets as $target) {
             if ($target == $sender->getUsername()) {
                 continue;
             }
             if (empty($syncedNumbers[$target])) {
                 $notSynced[$target] = $target;
                 continue;
             }
             if (!empty($sentOk[$target])) {
                 continue;
             }
             $allTargets[] = $target;
             if (count($filteredTargets) <= 48) {
                 $filteredTargets[] = $target;
             }
         }
         echo "Filtered: " . implode(",", $filteredTargets) . "\n";
         echo "Not synced: " . implode(",", array_keys($notSynced)) . "\n";
         if (empty($filteredTargets)) {
             $messageDAO->addStatus($message, Message::MESSAGE_STATUS_ERROR, "No synced numbers. Sync Group.");
         }
         $targets = $filteredTargets;
         foreach ($allTargets as $target) {
             $messageDAO->setMessageTargetStatus($message, $target, 0);
         }
         $customFields = $messageDAO->getCustomFields($message);
         $this->currentMessage = $message;
         $this->currentTargets = $targets;
         switch ($message->getKind()) {
             case Message::KIND_TEXT_MSG:
                 $data = $message->getData();
                 if (false && strpos($data, '$field') === false) {
                     $w->cleanDebug();
                     $this->lastSentMessageId = 0;
                     sleep(strlen($data) / 4);
                     $w->sendBroadcastMessage($targets, $data);
                     $whatsapp_id = $this->lastSentMessageId;
                     $debugMsgReceiver = $w->getDebugBuf();
                     $this->printDebug($w->getDebugBuf());
                     if (!$whatsapp_id) {
                         $messageDAO->addStatus($message, Message::MESSAGE_STATUS_ERROR, $debugMsgReceiver);
                         break;
                     }
                 } else {
                     foreach ($filteredTargets as $target) {
                         $sendRetVal = null;
                         $data = $message->getData();
                         if (!empty($customFields[$target])) {
                             for ($i = 1; $i < 6; $i++) {
                                 $data = str_replace('$field' . $i, $customFields[$target]['field' . $i], $data);
                             }
                         }
                         $w->cleanDebug();
                         $this->lastSentMessageId = 0;
                         $w->sendMessageComposing($target);
                         sleep(strlen($data) / 4);
                         $w->sendMessage($target, $data);
                         $whatsapp_id = $this->lastSentMessageId;
                         $debugMsgReceiver = $w->getDebugBuf();
                         $this->printDebug($w->getDebugBuf());
                         if (!$whatsapp_id) {
                             $messageDAO->addStatus($message, Message::MESSAGE_STATUS_ERROR, $debugMsgReceiver);
                             continue;
                         }
                     }
                 }
                 break;
             case Message::KIND_PHOTO_MSG:
                 if (false) {
                     $w->cleanDebug();
                     $this->lastSentMessageId = 0;
                     sleep(8);
                     $w->sendBroadcastImage($targets, WEBDIR . '/uploads/' . $message->getData(), false);
                     $whatsapp_id = $this->lastSentMessageId;
                     $debugMsgReceiver = $w->getDebugBuf();
                     $this->printDebug($w->getDebugBuf());
                     if (!$whatsapp_id) {
                         $messageDAO->addStatus($message, Message::MESSAGE_STATUS_ERROR, $debugMsgReceiver);
                         break;
                     }
                 } else {
                     foreach ($filteredTargets as $target) {
                         $sendRetVal = null;
                         $w->cleanDebug();
                         $this->lastSentMessageId = 0;
                         sleep(4);
                         $w->sendMessageImage($target, WEBDIR . '/uploads/' . $message->getData(), false);
                         $whatsapp_id = $this->lastSentMessageId;
                         $debugMsgReceiver = $w->getDebugBuf();
                         $this->printDebug($w->getDebugBuf());
                         if (!$whatsapp_id) {
                             $messageDAO->addStatus($message, Message::MESSAGE_STATUS_ERROR, $debugMsgReceiver);
                             continue;
                         }
                     }
                 }
                 break;
             case Message::KIND_AUDIO_MSG:
                 if (false) {
                     $w->cleanDebug();
                     $this->lastSentMessageId = 0;
                     sleep(8);
                     $w->sendBroadcastAudio($targets, WEBDIR . '/uploads/' . $message->getData(), false);
                     $whatsapp_id = $this->lastSentMessageId;
                     $debugMsgReceiver = $w->getDebugBuf();
                     $this->printDebug($w->getDebugBuf());
                     if (!$whatsapp_id) {
                         $messageDAO->addStatus($message, Message::MESSAGE_STATUS_ERROR, $debugMsgReceiver);
                         break;
                     }
                 } else {
                     foreach ($filteredTargets as $target) {
                         $sendRetVal = null;
                         $w->cleanDebug();
                         $this->lastSentMessageId = 0;
                         sleep(4);
                         $w->sendMessageAudio($target, WEBDIR . '/uploads/' . $message->getData(), false);
                         $whatsapp_id = $this->lastSentMessageId;
                         $debugMsgReceiver = $w->getDebugBuf();
                         $this->printDebug($w->getDebugBuf());
                         if (!$whatsapp_id) {
                             $messageDAO->addStatus($message, Message::MESSAGE_STATUS_ERROR, $debugMsgReceiver);
                             continue;
                         }
                     }
                 }
                 break;
             case Message::KIND_VIDEO_MSG:
                 if (false) {
                     $w->cleanDebug();
                     $this->lastSentMessageId = 0;
                     sleep(8);
                     $w->sendBroadcastVideo($targets, WEBDIR . '/uploads/' . $message->getData(), false);
                     $whatsapp_id = $this->lastSentMessageId;
                     $debugMsgReceiver = $w->getDebugBuf();
                     $this->printDebug($w->getDebugBuf());
                     if (!$whatsapp_id) {
                         $messageDAO->addStatus($message, Message::MESSAGE_STATUS_ERROR, $debugMsgReceiver);
                         break;
                     }
                 } else {
                     foreach ($filteredTargets as $target) {
                         $sendRetVal = null;
                         $w->cleanDebug();
                         $this->lastSentMessageId = 0;
                         sleep(4);
                         $w->sendMessageVideo($target, WEBDIR . '/uploads/' . $message->getData(), false);
                         $whatsapp_id = $this->lastSentMessageId;
                         $debugMsgReceiver = $w->getDebugBuf();
                         $this->printDebug($w->getDebugBuf());
                         if (!$whatsapp_id) {
                             $messageDAO->addStatus($message, Message::MESSAGE_STATUS_ERROR, $debugMsgReceiver);
                             continue;
                         }
                     }
                 }
                 break;
         }
         $messageDAO->setMessageTargetStatus($message, $status['target'], Message::MESSAGE_STATUS_SENT);
     } catch (\Exception $ex) {
         $this->printDebug($w->getDebugBuf());
         $messageDAO->addStatus($message, Message::MESSAGE_STATUS_ERROR, $ex->getMessage());
     }
     $this->currentTargets = null;
     $this->currentMessage = null;
 }
Exemple #2
0
 /**
  * Saves sender to DB
  *
  * @param Sender $item
  * @throws \Exception
  * @return Sender
  */
 public function save(Sender $item)
 {
     if (empty($item)) {
         throw new \Exception('Empty item');
     }
     if (!$item->getIdentity()) {
         $item->setIdentity('');
     }
     if (!$item->getPassword()) {
         $item->setPassword('');
     }
     $db = DBConnection::getInstance();
     if ($item->getId() == 0) {
         $query = $db->prepare("INSERT INTO senders\n\t\t\t\t\t(username, identity, nickname, password, user_id, challenge_data, flags)\n\t\t\t\t\tVALUES \n\t\t\t\t\t(:username, :identity, :nickname, :password, :user_id, :challenge_data, :flags)");
         $query->bindParam('username', $item->getUsername());
         $query->bindParam('nickname', $item->getNickname());
         $query->bindParam('identity', $item->getIdentity());
         $query->bindParam('password', $item->getPassword());
         $query->bindParam('user_id', $item->getUserId());
         $query->bindParam('challenge_data', $item->getChallengeData());
         $query->bindParam('flags', $item->getFlags());
         $query->execute();
         $item->setId($db->lastInsertId());
     } else {
         $sql = ' UPDATE senders SET ';
         if ($item->getIdentity() !== null) {
             $sql .= ' identity = :identity, ';
         }
         if ($item->getPassword() !== null) {
             $sql .= ' password = :password, ';
         }
         $sql .= ' nickname = :nickname, ';
         $sql .= ' username = :username, ';
         $sql .= ' challenge_data = :challenge_data, ';
         $sql .= ' flags = :flags, ';
         $sql .= ' user_id = :user_id ';
         $sql .= ' WHERE id = :id ';
         $query = $db->prepare($sql);
         $query->bindParam('id', $item->getId(), \PDO::PARAM_INT);
         $query->bindParam('username', $item->getUsername());
         $query->bindParam('identity', $item->getIdentity());
         $query->bindParam('nickname', $item->getNickname());
         $query->bindParam('password', $item->getPassword());
         $query->bindParam('user_id', $item->getUserId());
         $query->bindParam('challenge_data', $item->getChallengeData());
         $query->bindParam('flags', $item->getFlags());
         $query->execute();
     }
     return $item;
 }