Model for conversations.
Models don't share that much, so most implementations will be adding methods onto this class. This class simply provides helper methods for common actions.
| package | XenForo_Conversation |
|---|
__construct()
Use create() statically unless you know what you're doing.
| inherited_from | \XenForo_Model::__construct() |
|---|
addConversationReplyToRecipients(array $conversation, array $replyUser, array $messageInfo) : array
arrayConversation info
arraynullInformation about the user who replied
arraynullArray containing 'message', which is the text the message being sent
array$recipientsaddFetchOptionJoin(array $fetchOptions, integer $join)
Join should be one of the constants.
| inherited_from | \XenForo_Model::addFetchOptionJoin() |
|---|
array
integer
addPositionLimit(string $table, integer $limit, integer $offset, string $column) : string
It no limit value is specified, nothing will be returned.
This must be added within a WHERE clause. If a clause is required, it will begin with "AND", so ensure there is a condition before it.
| inherited_from | \XenForo_Model::addPositionLimit() |
|---|
stringName of the table alias to prefix. May be blank for no table reference.
integerNumber of records to limit to; ignored if <= 0
integerOffset from the start of the records. 0+
stringName of the column that is storing the position
stringPosition limit clause if neededallowedAdditionalConversationRecipients(array $conversation, array $viewingUser) : integer
arrayConversation; if empty array, assumes new conversation
arraynull
integer-1 means unlimited; 0 is no more invites; other is remaining countassertValidCutOffOperator(string $operator)
| inherited_from | \XenForo_Model::assertValidCutOffOperator() |
|---|
string
canEditConversation(array $conversation, string $errorPhraseKey, array $viewingUser) : boolean
Does not check conversation viewing permissions.
array
stringReturned phrase key for a specific error
arraynull
booleancanEditMessage(array $message, array $conversation, string $errorPhraseKey, array $viewingUser) : boolean
array
array
string
arraynull
booleancanInviteUsersToConversation(array $conversation, string $errorPhraseKey, array $viewingUser) : boolean
Does not check conversation viewing permissions.
array
stringReturned phrase key for a specific error
arraynull
booleancanManageReportedMessage(array $message, array $conversation, string $errorPhraseKey, array $viewingUser) : boolean
array
array
string
arraynull
booleancanReplyToConversation(array $conversation, string $errorPhraseKey, array $viewingUser) : boolean
Does not check conversation viewing permissions.
array
stringReturned phrase key for a specific error
arraynull
booleancanReportMessage(array $message, array $conversation, string | boolean $errorPhraseKey, array $viewingUser) : boolean
array
array
stringboolean
arraynull
booleancanStartConversationWithUser(array $user, string $errorPhraseKey, array $viewingUser) : boolean
Does not check standard conversation permissions.
array
string
arraynull
booleancanStartConversations(string $errorPhraseKey, array $viewingUser) : boolean
string
arraynull
booleancanUploadAndManageAttachment(array $conversation, string $errorPhraseKey, array $viewingUser) : boolean
If no permissions are specified, permissions are retrieved from the currently visiting user. This does not check viewing permissions.
arrayInfo about the conversation posting in
stringReturned phrase key for a specific error
arraynull
booleancanViewAttachmentOnConversation(array $conversation, string $errorPhraseKey, array $viewingUser) : boolean
array
string
arraynull
booleancanViewAttachmentOnConversationMessage(array $message, array $conversation, string $errorPhraseKey, array $viewingUser) : boolean
array
array
string
arraynull
booleancountConversationsForUser(integer $userId, array $conditions) : integer
integer
arrayConditions for the WHERE clause
integercountMessagesBeforeDateInConversation(integer $conversationId, integer $messageDate) : integer
integer
integer
integercountUnreadConversationsForUser(integer $userId) : integer
integer
integercreate(string $class) : \XenForo_Model
The class must exist or be autoloadable or an exception will be thrown.
| inherited_from | \XenForo_Model::create() |
|---|
stringClass to load
deleteConversationForUser(integer $conversationId, integer $userId, string $deleteType)
If all users have deleted the conversation, it will be completely removed.
integer
integer
stringType of deletion (either delete, or delete_ignore)
fetchAllKeyed(string $sql, string $key, mixed $bind, string $nullPrefix) : array
The 'key' parameter provides the column name with which to key the result. For example, calling fetchAllKeyed('SELECT item_id, title, date FROM table', 'item_id') would result in an array keyed by item_id: [$itemId] => array('item_id' => $itemId, 'title' => $title, 'date' => $date)
Note that the specified key must exist in the query result, or it will be ignored.
| inherited_from | \XenForo_Model::fetchAllKeyed() |
|---|
stringSQL to execute
stringColumn with which to key the results array
mixedParameters for the SQL
stringIf the key is null, prefix the counter with this
arrayfindConversationRecipientsForUser(integer $userId, string $searchString) : array
integer
string
arrayfindConversationRespondersForUser(integer $userId, string $searchString) : array
integer
string
arrayfindConversationStartersForUser(integer $userId, string $searchString) : array
integer
string
arraygetAndMergeAttachmentsIntoConversationMessages(array $messages) : array
The attachments key will not be set if no attachments are found for the message.
array
arrayMessages, with attachments added where necessarygetAttachmentParams(array $conversation, array $contentData, array $viewingUser) : array | false
array
arrayInformation about the content, for URL building
arraynull
arrayfalse
getConditionsForClause(array $sqlConditions) : string
This always returns a value that can be used in a clause such as WHERE.
| inherited_from | \XenForo_Model::getConditionsForClause() |
|---|
array
stringgetContentTypeField(string $contentType, string $fieldName) : string | false
| inherited_from | \XenForo_Model::getContentTypeField() |
|---|
string
string
stringfalse
getContentTypesWithField(string $fieldName) : array
| inherited_from | \XenForo_Model::getContentTypesWithField() |
|---|
string
arrayFormat: [content type] => field valuegetConversationForUser(integer $conversationId, integer | array $viewingUser, array $fetchOptions) : array | false
integer
integerarrayCan be a user array, or a user ID (for B.C. purposes)
arrayOptions for extra data to fetch
arrayfalse
getConversationMasterById(integer $conversationId) : array | false
integer
arrayfalse
getConversationMessageById(integer $messageId) : array | false
integer
arrayfalse
getConversationMessages(integer $conversationId, array $fetchOptions) : array
integer
arrayOptions for extra data to fetch
arrayFormat [message id] => infogetConversationRecipient(integer $conversationId, integer $userId, array $fetchOptions) : array | false
integer
integer
arrayOptions for extra data to fetch
arrayfalse
getConversationRecipients(integer $conversationId, array $fetchOptions) : array
integer
arrayOptions for extra data to fetch
arrayFormat: [user id] => infogetConversationsForUser(integer $userId, array $conditions, array $fetchOptions) : array
integer
arrayConditions for the WHERE clause
arrayOptions for extra data to fetch
arrayFormat: [conversation id] => infogetConversationsForUserByIds(integer $userId, array $conversationIds) : array
integer
array
arrayFormat: [conversation id] => infogetLastPageNumbers(integer $replyCount) : array | boolean
integer
arrayboolean
getMaximumMessageDate(array $messages) : integer
array
integerMax message date timestamp; 0 if no messagesgetModelFromCache(string $class) : \XenForo_Model
If it does not exist, it will be instantiated.
| inherited_from | \XenForo_Model::getModelFromCache() |
|---|
stringName of the class to load
getNewestConversationMessagesAfterDate(integer $conversationId, integer $date, array $fetchOptions) : array
integer
integer
array
array[message id] => infogetNextMessageInConversation(integer $conversationId, integer $messageDate) : array | false
This is useful for finding the first unread message, for example.
integer
integerFinds first message posted after this
arrayfalse
getOrderByClause(array $choices, array $fetchOptions, string $defaultOrderSql) : string
| inherited_from | \XenForo_Model::getOrderByClause() |
|---|
array
array
string
stringOrder by clause or empty stringgetQuoteForConversationMessage(array $message, integer $maxQuoteDepth) : string
array
integerMax depth of quotes (-1 for unlimited)
stringinsertConversationAlert(array $conversation, array $alertUser, string $action, array $triggerUser, array $extraData, array $messageInfo)
array
arrayUser to notify
stringAction taken out (values: insert, reply, join)
arraynullUser triggering the alert; defaults to last user to reply
arraynull
arraynullArray containing the text of the message being sent (if applicable) as 'message'
insertConversationRecipient(array $conversation, $userId, array $existingRecipient, string $insertState) : boolean
arrayConversation info
arrayInformation about the existing recipient record (if there is one)
stringState to insert the conversation for with this user
booleanTrue if an insert was required (may be false if user is already an active recipient or is ignoring)limitQueryResults(string $query, integer $limit, integer $offset) : string
If the limit value is 0 or less, no clause is applied.
| inherited_from | \XenForo_Model::limitQueryResults() |
|---|
stringSQL query to run
integerNumber of records to limit to; ignored if <= 0
integerOffset from the start of the records. 0+
stringQuery with limit applied if necessarymarkConversationAsRead(integer $conversationId, integer $userId, integer $newReadDate, integer $lastMessageDate, boolean $updateVisitor)
integer
integer
integerTimestamp to mark as read until
integerDate of last message; only marks whole conversation read if more than this date
booleanIf true, reduces the conversations_unread counter for the visitor; should be false for replies
markConversationAsUnread(integer $conversationId, integer $userId)
integer
integer
prepareConversation(array $conversation) : array
array
arrayprepareConversationConditions(array $conditions, array $fetchOptions) : string
arrayList of conditions. --popupMode (boolean) constrains results to unread, or sent within timeframe specified by options->conversationPopupExpiryHours
arrayThe fetch options that have been provided. May be edited if criteria requires.
stringCriteria as SQL for where clauseprepareConversationFetchOptions(array $fetchOptions)
prepareConversations(array $conversations) : array
array
arrayprepareLimitFetchOptions(array $fetchOptions) : array
Includes: limit, offset, page, and perPage.
| inherited_from | \XenForo_Model::prepareLimitFetchOptions() |
|---|
arrayUnprepared options
arrayLimit options; keys: limit, offsetprepareMessage(array $message, array $conversation) : array
array
array
arrayPrepared messageprepareMessages(array $messages, array $conversation) : array
array
array
arrayPrepared messagesprepareStateLimitFromConditions(array $fetchOptions, string $table, string $stateField, string $userField) : string
Looks for keys "deleted" and "moderated".
| inherited_from | \XenForo_Model::prepareStateLimitFromConditions() |
|---|
array
stringName of the table to prefix the state and user fields with
stringName of the field that holds the state
stringName of the field that holds the user ID
stringSQL condition to limit staterebuildUnreadConversationCountForUser(integer $userId)
integer
resetLocalCacheData($name)
This can be used if you know when some cached data has expired.
| inherited_from | \XenForo_Model::resetLocalCacheData() |
|---|
setAllowCachedRead(boolean $allowCachedRead)
This may be controllable on an individual level basis, if the implementation allows it.
| inherited_from | \XenForo_Model::setAllowCachedRead() |
|---|
boolean
setLocalCacheData(string $name, $value)
This should only be used if you know what you're doing or for testing purposes!
Note that you cannot get the existing data via the public interface. If you think you need the set data, use a new object. It defaults to empty. :)
| inherited_from | \XenForo_Model::setLocalCacheData() |
|---|
string
standardizeNodePermissionsAndUserId(integer $nodeId, array | null $permissions, integer | null $userId)
If an invalid permission set or user ID is provided, the current visitor's will be used.
| inherited_from | \XenForo_Model::standardizeNodePermissionsAndUserId() |
|---|
integerNode permissions are for
arraynullPermissions for node or null to use current visitor's permissions
integernullUser permissions belong to or null to use current visitor
standardizePermissionCombinationIdAndUserId(integer | null $permissionCombinationId, integer | null $userId)
If null, users current visitor's values.
| inherited_from | \XenForo_Model::standardizePermissionCombinationIdAndUserId() |
|---|
integernullPermission combination ID or null to use current visitor
integernullUser permissions belong to or null to use current visitor
standardizePermissionsAndUserId(array | null $permissions, integer | null $userId)
If an invalid permission set or user ID is provided, the current visitor's will be used.
| inherited_from | \XenForo_Model::standardizePermissionsAndUserId() |
|---|
arraynullGlobal pPermissions or null to use current visitor's permissions
integernullUser permissions belong to or null to use current visitor
standardizeViewingUserReference(array $viewingUser)
This array must contain all basic user info (preferably all user info) and include global permissions in a "permissions" key. If not an array or missing a user_id, the visitor's values will be used.
| inherited_from | \XenForo_Model::standardizeViewingUserReference() |
|---|
arraynull
standardizeViewingUserReferenceForNode(integer $nodeId, array $viewingUser, array $nodePermissions)
| inherited_from | \XenForo_Model::standardizeViewingUserReferenceForNode() |
|---|
integer
arraynullViewing user; if null, use visitor
arraynullPermissions for this node; if null, use visitor's
unserializePermissionsInList(array $items, string $serializedKey, string $targetKey) : array
| inherited_from | \XenForo_Model::unserializePermissionsInList() |
|---|
arrayList of items
stringKey where serialized permissions are
stringKey where unserialized permissions will go
arrayList of items with permissions unserialized_getAttachmentModel() : \XenForo_Model_Attachment.
\XenForo_Model_Attachment._getCache(boolean $forceCachedRead) : \Zend_Cache_Core | \Zend_Cache_Frontend | false
If cache reads are disabled, this will return false.
| inherited_from | \XenForo_Model::_getCache() |
|---|
booleanIf true, the global "allow cached read" value is ignored
\Zend_Cache_Core\Zend_Cache_Frontendfalse
_getDb() : \Zend_Db_Adapter_Abstract
| inherited_from | \XenForo_Model::_getDb() |
|---|
\Zend_Db_Adapter_Abstract_getLocalCacheData(string $name) : mixed
| inherited_from | \XenForo_Model::_getLocalCacheData() |
|---|
string
mixed_getUsersMatchingCriteria(array $userIds, string $searchString) : array
Used in conjunction with this class's findConversation[x]ForUser() methods.
array
string
array_updateConversationReadDate(integer $conversationId, integer $userId, integer $newReadDate, \Zend_Db_Adapter_Abstract $db) : integer
integer
integer
integer
\Zend_Db_Adapter_Abstract
integer$newReadDate$_allowCachedRead : boolean
If not, it should be retrieved from the source.
| inherited_from | \XenForo_Model::$$_allowCachedRead |
|---|
$_cache : \Zend_Cache_Core | \Zend_Cache_Frontend
| inherited_from | \XenForo_Model::$$_cache |
|---|
$_db : \Zend_Db_Adapter_Abstract
| inherited_from | \XenForo_Model::$$_db |
|---|
$_localCacheData : array
This data is generally treated as canonical, even if {$_allowCachedRead} is false.
| inherited_from | \XenForo_Model::$$_localCacheData |
|---|
$_modelCache : array
| inherited_from | \XenForo_Model::$$_modelCache |
|---|
FETCH_FIRST_MESSAGE
FETCH_LAST_MESSAGE_AVATAR
FETCH_RECEIVED_BY