本文整理汇总了PHP中ET::raw方法的典型用法代码示例。如果您正苦于以下问题:PHP ET::raw方法的具体用法?PHP ET::raw怎么用?PHP ET::raw使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ET
的用法示例。
在下文中一共展示了ET::raw方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: addReply
/**
* Add a reply to an existing conversation. Assumes the creator is the currently logged in user.
*
* @param array $conversation The conversation to add the reply to. The conversation's details will
* be updated (post count, last post time, etc.)
* @param string $content The post content.
* @return int|bool The new post's ID, or false if there was an error.
*/
public function addReply(&$conversation, $content)
{
// We can't do this if we're not logged in.
if (!ET::$session->user) {
return false;
}
// Flood control!
if (ET::$session->isFlooding()) {
$this->error("flooding", sprintf(T("message.waitToReply"), C("esoTalk.conversation.timeBetweenPosts")));
return false;
}
// Start a notification group. This means that for all notifications sent out until endNotifcationGroup
// is called, each individual user will receive a maximum of one.
ET::activityModel()->startNotificationGroup();
// Create the post. If there were validation errors, get them from the post model and add them to this model.
$postModel = ET::postModel();
$postId = $postModel->create($conversation["conversationId"], ET::$session->userId, $content, $conversation["title"]);
if (!$postId) {
$this->error($postModel->errors());
}
// Did we encounter any errors? Don't continue.
if ($this->errorCount()) {
return false;
}
// Update the conversations table with the new post count, last post/action times, and last post member.
$time = time();
$update = array("countPosts" => ET::raw("countPosts + 1"), "lastPostMemberId" => ET::$session->userId, "lastPostTime" => $time);
// Also update the conversation's start time if this is the first post.
if ($conversation["countPosts"] == 0) {
$update["startTime"] = $time;
}
$this->updateById($conversation["conversationId"], $update);
// If the user had a draft saved in this conversation before adding this reply, erase it now.
// Also, if the user has the "star on reply" option checked, star the conversation.
$update = array();
if ($conversation["draft"]) {
$update["draft"] = null;
}
if (ET::$session->preference("starOnReply")) {
$update["starred"] = true;
}
if (count($update)) {
$this->setStatus($conversation["conversationId"], ET::$session->userId, $update);
}
// Send out notifications to people who have starred this conversation.
// We get all members who have starred the conversation and have no unread posts in it.
$sql = ET::SQL()->from("member_conversation s", "s.conversationId=:conversationId AND s.type='member' AND s.id=m.memberId AND s.starred=1 AND s.lastRead>=:posts AND s.id!=:userId", "inner")->bind(":conversationId", $conversation["conversationId"])->bind(":posts", $conversation["countPosts"])->bind(":userId", ET::$session->userId);
$members = ET::memberModel()->getWithSQL($sql);
$data = array("conversationId" => $conversation["conversationId"], "postId" => $postId, "title" => $conversation["title"]);
$emailData = array("content" => $content);
foreach ($members as $member) {
ET::activityModel()->create("post", $member, ET::$session->user, $data, $emailData);
}
// Update the conversation details.
$conversation["countPosts"]++;
$conversation["lastPostTime"] = $time;
$conversation["lastPostMemberId"] = ET::$session->userId;
// If this is the first reply (ie. the conversation was a draft and now it isn't), send notifications to
// members who are in the membersAllowed list.
if ($conversation["countPosts"] == 1 and !empty($conversation["membersAllowed"])) {
$memberIds = array();
foreach ($conversation["membersAllowed"] as $member) {
if ($member["type"] == "member") {
$memberIds[] = $member["id"];
}
}
$this->privateAddNotification($conversation, $memberIds, true);
}
$this->trigger("addReplyAfter", array($conversation, $postId, $content));
ET::activityModel()->endNotificationGroup();
return $postId;
}