Пример #1
0
 /**
  * Add a new alert.
  *
  * @param MybbStuff_MyAlerts_Entity_Alert $alert The alert to add.
  *
  * @return $this
  */
 public function addAlert(MybbStuff_MyAlerts_Entity_Alert $alert)
 {
     $fromUser = $alert->getFromUser();
     if (!isset($fromUser['uid'])) {
         $alert->setFromUser($this->mybb->user);
     }
     $alertType = $alert->getType();
     $usersWhoWantAlert = $this->doUsersWantAlert($alert->getType(), array($alert->getUserId()));
     if ($alertType->getEnabled() && (!empty($usersWhoWantAlert) || !$alertType->getCanBeUserDisabled())) {
         if ($alertType->getCode() === 'quoted') {
             // If there is already an alert queued to the user of the type
             // 'post_threadauthor', don't add the alert.
             $extraDetails = $alert->getExtraDetails();
             $tid = $extraDetails['tid'];
             if (isset(static::$alertQueue['post_threadauthor_' . $alert->getUserId() . '_' . $tid])) {
                 return $this;
             }
         }
         $passToHook = array('alertManager' => &$this, 'alert' => &$alert);
         $this->plugins->run_hooks('myalerts_alert_manager_add_alert', $passToHook);
         // Basic duplicate checking by overwrite - only one alert for each alert type/object id combination
         static::$alertQueue[$alert->getType()->getCode() . '_' . $alert->getUserId() . '_' . $alert->getObjectId()] = $alert;
     }
     return $this;
 }
Пример #2
0
function parse_alert(MybbStuff_MyAlerts_Entity_Alert $alertToParse)
{
    global $mybb, $lang, $plugins;
    if (!isset($lang->myalerts)) {
        $lang->load('myalerts');
    }
    /** @var MybbStuff_MyAlerts_Formatter_AbstractFormatter $formatter */
    $formatter = MybbStuff_MyAlerts_AlertFormatterManager::getInstance()->getFormatterForAlertType($alertToParse->getType()->getCode());
    $outputAlert = array();
    if ($formatter != null) {
        $plugins->run_hooks('myalerts_alerts_output_start', $alert);
        $formatter->init();
        $fromUser = $alertToParse->getFromUser();
        $maxDimensions = str_replace('|', 'x', $mybb->settings['myalerts_avatar_size']);
        $outputAlert['avatar'] = format_avatar($fromUser['avatar'], $mybb->settings['myalerts_avatar_size'], $maxDimensions);
        $outputAlert['avatar']['image'] = htmlspecialchars_uni($outputAlert['avatar']['image']);
        $outputAlert['id'] = $alertToParse->getId();
        $outputAlert['username'] = htmlspecialchars_uni($fromUser['username']);
        $outputAlert['from_user'] = format_name(htmlspecialchars_uni($fromUser['username']), $fromUser['usergroup'], $fromUser['displaygroup']);
        $outputAlert['from_user_raw_profilelink'] = get_profile_link((int) $fromUser['uid']);
        // htmlspecialchars_uni done by get_profile_link
        $outputAlert['from_user_profilelink'] = build_profile_link($outputAlert['from_user'], $fromUser['uid']);
        $outputAlert['alert_status'] = ' alert--read';
        if ($alertToParse->getUnread()) {
            $outputAlert['alert_status'] = ' alert--unread';
        }
        $outputAlert['message'] = $formatter->formatAlert($alertToParse, $outputAlert);
        $outputAlert['alert_code'] = $alertToParse->getType()->getCode();
        $outputAlert['received_at'] = htmlspecialchars_uni(my_date($mybb->settings['dateformat'], $alertToParse->getCreatedAt()->getTimestamp()));
        $plugins->run_hooks('myalerts_alerts_output_end', $alert);
    }
    return $outputAlert;
}