if (!$cd['success']) {
    echo "\nerror preparing cron\n";
    exit(1);
}
//dont try to send any notification if the script starts for the first time
if (empty($cd['last_start_time'])) {
    DB\dbQuery('UPDATE notifications SET seen = 1 WHERE seen = 0');
    exit;
}
L\initTranslations();
//send notification mails only if not in dev mode or _dev_sent_mails not set to 0
if (Config::get('_dev_mode', 0) == 1 && Config::get('_dev_send_mail', 1) == 0) {
    return;
}
//collect notifications to be sent
$recs = DM\Notifications::getUnseen();
$users = groupPerUsers($recs);
//iterate mails for each user and send them
foreach ($users as $uid => $ud) {
    sendUserMails($ud);
    DB\dbQuery('UPDATE crons
        SET last_action = CURRENT_TIMESTAMP
        WHERE cron_id = $1', $cron_id) or die('error updating crons last action');
}
//--------------------------------------------------------------------------
/**
 * group given notification records per user
 * @param  array &$recs
 * @return array
 */
function groupPerUsers(&$recs)
Example #2
0
 /**
  * test notifications module
  *
  * @return [type] [description]
  */
 public function testNotifications()
 {
     //check if everything is prepeared
     $this->assertTrue(sizeof($this->userIds) > 3, 'Less than 4 users created');
     $this->assertTrue(sizeof($this->objectIds) > 2, 'Less than 3 tasks created');
     //add a comment to obj 1 with user 1 referencing user 2
     $firstUserId = $this->userIds[0];
     $secondUserId = $this->userIds[1];
     // $thirdUserId = $this->userIds[2];
     // $forthUserId = $this->userIds[3];
     $rootUserId = $this->oldValues['user_id'];
     $pid = $this->objectIds[0];
     $commentData = array('pid' => $pid, 'template_id' => 9, 'data' => array('_title' => 'Hello to user @bow!'));
     //$_SESSION['user']['id'] = $firstUserId;
     \CB\User::setAsLoged($firstUserId, $_SESSION['key']);
     /* make a check - user should be denied to add comments */
     try {
         $commentId = $this->createObject($commentData);
     } catch (\Exception $e) {
         $msg = $e->getMessage();
         $this->assertTrue($msg == 'Access is denied', $msg);
     }
     //$_SESSION['user']['id'] = $rootUserId;
     \CB\User::setAsLoged($rootUserId, $_SESSION['key']);
     $this->addAllowSecurityRule();
     // try again adding a comment,
     // now it should work without access exceptions
     //$_SESSION['user']['id'] = $firstUserId;
     \CB\User::setAsLoged($firstUserId, $_SESSION['key']);
     $commentId = $this->createObject($commentData);
     $this->assertTrue(is_numeric($commentId), 'Wrong comment ID.');
     //check notifications for user bow,
     //he should receive 2 new notifications from root and andrew
     $lastNotification = ['user_id' => $firstUserId, 'object_id' => $pid, 'read' => 0];
     $this->assertTrue($this->checkLastNotification($secondUserId, $lastNotification), 'Wrong last notification : Last (' . print_r($lastNotification, true) . ')');
     //check notifications for root user, he also should receive a new notification from andrew
     //as owner of the object
     $this->assertTrue($this->checkLastNotification($rootUserId, array('user_id' => $firstUserId, 'object_id' => $pid, 'read' => 0)), 'No notification for root (owner) user.');
     //add comments with all 4 users and check notifications to cover
     //code for 3 and more users notifications grouping
     //and check root notifications with each comment
     for ($i = 0; $i < 4; $i++) {
         //$_SESSION['user']['id'] = $this->userIds[$i];
         \CB\User::setAsLoged($this->userIds[$i], $_SESSION['key']);
         $commentData['data']['_title'] = 'Comment from user #' . $i . '.';
         $this->createObject($commentData);
         $this->assertTrue($this->checkLastNotification($rootUserId, array('user_id' => $this->userIds[$i], 'object_id' => $pid, 'read' => 0)), 'Wrong last notification for root from user #' . $i . '.');
     }
     // $_SESSION['user']['id'] = $rootUserId;
     \CB\User::setAsLoged($rootUserId, $_SESSION['key']);
     /*-------- answer back to previous comment with root and see if notifications are created */
     $commentData['data']['_title'] = 'Reply to Hellow comment.';
     $commentId = $this->createObject($commentData);
     //check notifications for all 4 users
     for ($i = 0; $i < 3; $i++) {
         $this->assertTrue($this->checkLastNotification($this->userIds[$i], array('object_id' => $pid, 'read' => 0)), 'Wrong last notification from root for user #' . $i . '.');
     }
     $this->checkMarkingNotificationsAsRead();
     //end of big testing schema
     //cover for now some simple code from Notifications
     $this->assertTrue(\CB\Notifications::getActionDeclination('reopen', 'en') == 'reopened', 'Declination not correct for reopen.');
     $this->assertTrue(\CB\Notifications::getActionDeclination('SomeWrongValue!>', 'en') == 'SomeWrongValue!>', 'Declination not correct for a wrong value.');
     $this->assertTrue(\CB\Notifications::getActionDeclination('file_upload', 'en') == 'uploaded a file to', 'Declination not correct for file_upload.');
     $this->assertTrue(\CB\Notifications::getActionDeclination('file_update', 'en') == 'updated a file in', 'Declination not correct for file_update.');
     //update a task and delete them all
     $obj = \CB\Objects::getCachedObject($pid);
     $data = $obj->getData();
     $data['data']['due_date'] = '2012-12-17T00:00:00Z';
     unset($data['data']['importance']);
     $data['data']['description'] .= ' *update* ';
     $obj->update($data);
     foreach ($this->objectIds as $id) {
         $obj = \CB\Objects::getCachedObject($id);
         $obj->delete(false);
     }
     //get unset notifications and and access functions for preparing email
     $recs = DM\Notifications::getUnseen();
     foreach ($recs as $action) {
         $userData = \CB\User::getPreferences($action['to_user_id']);
         // $sender =
         \CB\Notifications::getSender($action['from_user_id']);
         // $body =
         \CB\Notifications::getMailBodyForAction($action, $userData);
     }
 }