/** * Pre-Markup rule. Recognizes mentions in blubber as @username or @"Firstname lastname" * and turns them into usual studip-links. The mentioned person is notified by * sending a message to him/her as a side-effect. * @param StudipTransformFormat $markup * @param array $matches * @return string */ public static function mention($markup, $matches) { $mention = $matches[1]; $posting = new BlubberPosting(self::$mention_posting_id); $username = stripslashes(substr($mention, 1)); if ($username[0] !== '"') { $user = BlubberUser::findByUsername($username); if (!$user) { $user = BlubberExternalContact::findByEmail($username); } } else { $name = substr($username, 1, strlen($username) - 2); $statement = DBManager::get()->prepare("SELECT user_id FROM auth_user_md5 WHERE CONCAT(Vorname, ' ', Nachname) = :name " . ""); $statement->execute(array('name' => $name)); $user_id = $statement->fetch(PDO::FETCH_COLUMN, 0); if ($user_id) { $user = new BlubberUser($user_id); } else { $statement = DBManager::get()->prepare("SELECT external_contact_id FROM blubber_external_contact WHERE name = ? " . ""); $statement->execute(array($name)); $user_id = $statement->fetch(PDO::FETCH_COLUMN, 0); $user = BlubberExternalContact::find($user_id); } } if ($user && !$posting->isNew() && $user->getId() && $user->getId() !== $GLOBALS['user']->id) { $user->mention($posting); $statement = DBManager::get()->prepare("INSERT IGNORE INTO blubber_mentions " . "SET user_id = :user_id, " . "topic_id = :topic_id, " . "external_contact = :extern, " . "mkdate = UNIX_TIMESTAMP() " . ""); $statement->execute(array('user_id' => $user->getId(), 'topic_id' => $posting['root_id'], 'extern' => is_a($user, "BlubberExternalContact") ? 1 : 0)); return '[' . $user->getName() . ']' . $user->getURL() . ' '; } else { return $markup->quote($matches[0]); } }