Beispiel #1
0
 /**
  * Send a message to one or more users
  *
  * @param   string   $type         Message type (maps to #__xmessage_component table)
  * @param   string   $subject      Message subject
  * @param   string   $message      Message to send
  * @param   array    $from         Message 'from' data (e.g., name, address)
  * @param   array    $to           List of user IDs
  * @param   string   $component    Component name
  * @param   integer  $element      ID of object that needs an action item
  * @param   string   $description  Action item description
  * @param   integer  $group_id     Parameter description (if any) ...
  * @return  mixed    True if no errors else error message
  */
 public function sendMessage($type, $subject, $message, $from = array(), $to = array(), $component = '', $element = null, $description = '', $group_id = 0)
 {
     // Do we have a message?
     if (!$message) {
         return false;
     }
     // Do we have a subject line? If not, create it from the message
     if (!$subject && $message) {
         $subject = substr($message, 0, 70);
         if (strlen($subject) >= 70) {
             $subject .= '...';
         }
     }
     $database = \App::get('db');
     // Create the message object and store it in the database
     $xmessage = new Message($database);
     $xmessage->subject = $subject;
     $xmessage->message = $message;
     $xmessage->created = Date::toSql();
     $xmessage->created_by = User::get('id');
     $xmessage->component = $component;
     $xmessage->type = $type;
     $xmessage->group_id = $group_id;
     if (!$xmessage->store()) {
         return $xmessage->getError();
     }
     // Does this message require an action?
     // **DEPRECATED**
     $action = new Action($database);
     /*if ($element || $description)
     		{
     			$action->class       = $component;
     			$action->element     = $element;
     			$action->description = $description;
     			if (!$action->store())
     			{
     				return $action->getError();
     			}
     		}*/
     // Do we have any recipients?
     if (count($to) > 0) {
         // Loop through each recipient
         foreach ($to as $uid) {
             // Create a recipient object that ties a user to a message
             $recipient = new Recipient($database);
             $recipient->uid = $uid;
             $recipient->mid = $xmessage->id;
             $recipient->created = Date::toSql();
             $recipient->expires = Date::of(time() + 168 * 24 * 60 * 60)->toSql();
             $recipient->actionid = $action->id;
             if (!$recipient->store()) {
                 return $recipient->getError();
             }
             // Get the user's methods for being notified
             $notify = new Notify($database);
             $methods = $notify->getRecords($uid, $type);
             $user = User::getInstance($uid);
             // Do we have any methods?
             if ($methods) {
                 // Loop through each method
                 foreach ($methods as $method) {
                     $action = strtolower($method->method);
                     if (!Event::trigger('xmessage.onMessage', array($from, $xmessage, $user, $action))) {
                         $this->setError(Lang::txt('Unable to message user %s with method %s', $uid, $action));
                     }
                 }
             }
         }
     }
     return true;
 }
Beispiel #2
0
 /**
  * Get records for specific type, element, component, and user
  *
  * @param   string   $type       Action type
  * @param   string   $component  Component name
  * @param   integer  $element    ID of element that needs action
  * @param   integer  $uid        User ID
  * @return  object
  */
 public static function getActionItems($type, $component, $element, $uid)
 {
     $entries = self::all();
     $a = $entries->getTableName();
     $m = Message::blank()->getTableName();
     $r = Recipient::blank()->getTableName();
     return $entries->select($m . '.id')->join($r, $r . '.actionid', $a . '.id', 'inner')->join($m, $m . '.id', $r . '.mid', 'inner')->whereEquals($m . '.type', $type)->whereEquals($r . '.uid', $uid)->whereEquals($a . '.class', $component)->whereEquals($a . '.element', $element)->rows();
 }
Beispiel #3
0
 /**
  * Get a count of unread messages for a user
  *
  * @param   integer  $uid    User ID
  * @return  integer
  */
 public function getUnreadMessagesCount($uid)
 {
     if (!$uid) {
         return 0;
     }
     $r = $this->getTableName();
     $m = Message::blank()->getTableName();
     $s = Seen::blank()->getTableName();
     $entries = Message::blank()->join($r, $m . '.id', $r . '.mid', 'inner')->whereEquals($r . '.uid', $uid)->where($r . '.state', '!=', 2)->whereRaw($m . ".id NOT IN (SELECT s.mid FROM `" . $s . "` AS s WHERE s.uid=" . $uid . ")");
     return $entries->total();
 }