Example #1
0
<?php

require_once __DIR__ . '/../vendor/autoload.php';
define("MAINDIR", __DIR__ . '/../');
require_once __DIR__ . '/../config.php';
use GitGis\Whatsapp\Model\Message;
use GitGis\Whatsapp\Model\MessageDAO;
use GitGis\Whatsapp\Model\Group;
use GitGis\Whatsapp\Model\GroupDAO;
use GitGis\Whatsapp\Model\WhatsappDAO;
$groupDao = new GroupDAO();
$group = $groupDao->fetch(1);
$messageDao = new MessageDAO();
for ($cnt = 0; $cnt < 200; $cnt++) {
    $message = new Message();
    $message->setKind(Message::KIND_TEXT_MSG);
    $message->setCtime(time());
    $message->setUserId(1);
    $message->setData('Test ' . $cnt);
    $message->setStime(time());
    $message->setGroupId($group->getId());
    $message = $messageDao->save($message);
    $messageDao->addStatus($message, Message::MESSAGE_STATUS_TO_SEND);
}
Example #2
0
 public static function getSentPage($page = 0)
 {
     $app = \Slim\Slim::getInstance();
     $limit = 50;
     if ($_GET['format'] == 'csv') {
         $page = 0;
         $limit = 10000;
     }
     $userDAO = new UserDAO();
     $messageDAO = new MessageDAO();
     $groupDAO = new GroupDAO();
     $groups = $groupDAO->getList();
     $groups = $groups['list'];
     $formUtils = new FormUtils();
     $startTime = $formUtils->toTimestamp($_GET['start_date'] . ' 00:00');
     $endTime = $formUtils->toTimestamp($_GET['end_date'] . ' 23:59');
     if ($endTime <= 0) {
         $endTime = time();
     }
     if ($startTime <= 0) {
         $startTime = $endTime - 7 * 24 * 3600;
     }
     $app->view->set('start_date', $startTime);
     $app->view->set('end_date', $endTime);
     $query = $_GET;
     $query['start_date'] = $startTime;
     $query['end_date'] = $endTime;
     if (!$userDAO->hasRole('ADMIN')) {
         $strong = \Strong\Strong::getInstance();
         $user = $strong->getUser();
         $query['user_id'] = $user['id'];
     }
     $pager = new Pager(MAINURL . '/reports/sent/?' . http_build_query($_GET), $limit);
     $pager->setPage($page);
     $query = $pager->getQueryArray($query);
     $list = $messageDAO->getList($query);
     $pager->setCount(count($list['list']));
     if (isset($list['total'])) {
         $pager->setTotal($list['total']);
     }
     $reportTable = array();
     foreach ($list['list'] as $message) {
         $statuses = $messageDAO->getStatuses($message);
         foreach ($statuses as $status) {
             if (empty($status['target'])) {
                 continue;
             }
             $key = $status['message_id'];
             if (!empty($reportTable[$key])) {
                 $reportRow = $reportTable[$key];
             } else {
                 $reportRow = array();
                 $group = $groups[$message->getGroupId()];
                 $reportRow['group'] = $group->getNickname();
                 $reportRow['groupCnt'] = count($groupDAO->getNumbers($group->getId()));
                 $reportRow['ctime'] = $message->getCtime();
                 $reportRow['msg'] = $message->getData();
                 $reportRow['targets'] = array();
                 $reportRow['sent'] = array();
                 $reportRow['recv'] = array();
                 $reportRow['error'] = 0;
                 $reportRow['status'] = 0;
             }
             $reportRow['targets'] = $message->getTarget();
             switch ($status['status']) {
                 case Message::MESSAGE_STATUS_ERROR:
                     $reportRow['status'] = 'ERR';
                     break;
                 case Message::MESSAGE_STATUS_RECEIVED_BY_SERVER:
                 case Message::MESSAGE_STATUS_RECEIVED_BY_PHONE:
                     $reportRow['status'] = 'RECV';
                     $reportRow['recv'][$status['target']] = 1;
                     break;
                 case Message::MESSAGE_STATUS_SENT:
                     $reportRow['status'] = 'SENT';
                     $reportRow['sent'][$status['target']] = 1;
                     if ($reportRow['sent_time'] < $status['mtime']) {
                         $reportRow['sent_time'] = $status['mtime'];
                     }
                     break;
             }
             $reportTable[$key] = $reportRow;
         }
     }
     foreach ($reportTable as $k => $v) {
         $v['sentCnt'] = count($v['sent']);
         $v['recvCnt'] = count($v['recv']);
         $reportTable[$k] = $v;
     }
     $app->view->set('menu', 'reports');
     $app->view->set('reportTable', array_values($reportTable));
     $app->view->set('query', $query);
     $app->view->set('pager', $pager);
     if ($_GET['format'] == 'csv') {
         header("Content-type: text/csv");
         header("Content-disposition: attachment; filename=sent.csv");
         $app->render('reports/sent.twig.csv');
     } else {
         $app->render('reports/sent.twig.html');
     }
 }
Example #3
0
 /**
  * Creates video message and redirects to edit
  */
 public static function getSendVideo()
 {
     $app = \Slim\Slim::getInstance();
     $dao = new MessageDAO();
     $item = new Message();
     $item->setKind(Message::KIND_VIDEO_MSG);
     $item->setCtime(time());
     $strong = \Strong\Strong::getInstance();
     $user = $strong->getUser();
     $item->setUserId($user['id']);
     $item = $dao->save($item);
     $app->redirect(MAINURL . '/messages/edit/' . $item->getId());
 }
Example #4
0
{
    $retVal = '';
    for ($i = 0; $i < strlen($str); $i++) {
        $retVal .= sprintf("%02X ", ord($str[$i]));
    }
    return $retVal;
}
function logToCronFile($msg)
{
    echo date("Y-m-d H:i:s") . ' ' . time() . " " . $msg . "\n";
    file_put_contents(__DIR__ . '/logs/whatsapp.' . date('Ymd') . '.log', date("Y-m-d H:i:s") . " " . $msg . "\n", FILE_APPEND | LOCK_EX);
}
ob_start();
$senderDAO = new SenderDAO();
$groupDAO = new GroupDAO();
$messageDAO = new MessageDAO();
$senders = $senderDAO->getList();
foreach ($senders['list'] as $sender) {
    if ('' == $sender->getPassword()) {
        logToCronFile("No password for sender: " . $sender->getUsername());
        continue;
    }
    $sender = $senderDAO->fetch($sender->getId());
    if (($sender->getFlags() & \GitGis\Whatsapp\Model\Sender::FLAG_UNSYNC) > 0) {
        logToCronFile("Syncing " . $sender->getUsername());
        $groups = $groupDAO->getList(array('user_id' => $sender->getUserId()));
        $contacts = array();
        foreach ($groups['list'] as $groupId => $group) {
            $groupDAO->clearSynced($groupId);
            $groupNumbers = $groupDAO->getNumbers($groupId);
            foreach (array_keys($groupNumbers) as $number) {
Example #5
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;
 }