Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Conversation/Conversation.php
Строк: 705
<?php
namespace ConcreteCoreConversation;

use 
ConcreteCoreSearchPermissionableListItemInterface;
use 
Loader;
use 
ConcreteCoreFoundationObject;
use 
Page;
use 
Config;
use 
ConcreteCoreConversationMessageMessageList as ConversationMessageList;

class 
Conversation extends Object implements ConcreteCorePermissionObjectInterface
{

    const 
POSTING_ENABLED 10;
    const 
POSTING_DISABLED_MANUALLY 5;
    const 
POSTING_DISABLED_PERMISSIONS 3;

    protected 
$page;

    public function 
getConversationID()
    {
        return 
$this->cnvID;
    }

    public function 
getConversationParentMessageID()
    {
        return 
$this->cnvParentMessageID;
    }

    public function 
getConversationDateCreated()
    {
        return 
$this->cnvDateCreated;
    }

    public function 
getConversationDateLastMessage()
    {
        return 
$this->cnvDateLastMessage;
    }

    public function 
getConversationMessagesTotal()
    {
        return 
intval($this->cnvMessagesTotal);
    }

    public function 
getConversationMaxFileSizeGuest()
    {
        if (
$this->getConversationAttachmentOverridesEnabled() > 0) {
            return 
intval($this->cnvMaxFileSizeGuest);
        } else {
            return 
Config::get('conversations.files.guest.max_size');
        }
    }

    public function 
getConversationMaxFileSizeRegistered()
    {
        if (
$this->getConversationAttachmentOverridesEnabled() > 0) {
            return 
intval($this->cnvMaxFileSizeRegistered);
        } else {
            return 
Config::get('conversations.files.registered.max_size');
        }
    }

    public function 
getConversationMaxFilesGuest()
    {
        if (
$this->getConversationAttachmentOverridesEnabled() > 0) {
            return 
$this->cnvMaxFilesGuest;
        } else {
            return 
Config::get('conversations.files.guest.max');
        }
    }

    public function 
getConversationMaxFilesRegistered()
    {
        if (
$this->getConversationAttachmentOverridesEnabled() > 0) {
            return 
$this->cnvMaxFilesRegistered;
        } else {
            return 
Config::get('conversations.files.registered.max');
        }
    }

    public function 
getConversationFileExtensions()
    {
        if (
$this->getConversationAttachmentOverridesEnabled() > 0) {
            return 
$this->cnvFileExtensions;
        } else {
            
$fileExtensions Config::get('conversations.files.allowed_types');
            if (!
$fileExtensions) {
                
$fileExtensions Config::get('concrete.upload.extensions');
            }
            return 
$fileExtensions;
        }
    }


    public function 
getConversationAttachmentOverridesEnabled()
    {
        return 
intval($this->cnvAttachmentOverridesEnabled);
    }

    public function 
getConversationAttachmentsEnabled()
    {
        if (
$this->getConversationAttachmentOverridesEnabled() > 0) {
            return (bool)
$this->cnvAttachmentsEnabled;
        } else {
            return 
Config::get('conversations.attachments_enabled');
        }
    }

    public function 
getConversationNotificationOverridesEnabled()
    {
        return (bool) 
$this->cnvNotificationOverridesEnabled;
    }

    public function 
overrideGlobalPermissions()
    {
        return 
$this->cnvOverrideGlobalPermissions;
    }

    public function 
getPermissionResponseClassName()
    {
        return 
'\Concrete\Core\Permission\Response\ConversationResponse';
    }

    public function 
getPermissionAssignmentClassName()
    {
        return 
'\Concrete\Core\Permission\Assignment\ConversationAssignment';
    }

    public function 
getPermissionObjectKeyCategoryHandle()
    {
        return 
'conversation';
    }

    public function 
getPermissionObjectIdentifier()
    {
        return 
$this->getConversationID();
    }

    public static function 
getByID($cnvID)
    {
        
$db Loader::db();
        
$r $db->GetRow('select cnvID, cID, cnvDateCreated, cnvDateLastMessage, cnvMessagesTotal, cnvAttachmentsEnabled, cnvAttachmentOverridesEnabled,
        cnvFileExtensions, cnvMaxFileSizeRegistered, cnvMaxFileSizeGuest, cnvMaxFilesRegistered, cnvMaxFilesGuest, cnvOverrideGlobalPermissions,
        cnvNotificationOverridesEnabled, cnvEnableSubscription from Conversations where cnvID = ?'
,
            array(
$cnvID));
        if (
is_array($r) && $r['cnvID'] == $cnvID) {
            
$cnv = new static;
            
$cnv->setPropertiesFromArray($r);
            return 
$cnv;
        }
    }

    public function 
getConversationPageObject()
    {
        if (
$this->cID) {
            
$c Page::getByID($this->cID'ACTIVE');
            if (
is_object($c) && !$c->isError()) {
                return 
$c;
            }
        }
    }

    public function 
setConversationPageObject($c)
    {
        
$db Loader::db();
        
$db->Execute('update Conversations set cID = ? where cnvID = ?',
            array(
$c->getCollectionID(), $this->getConversationID()));
        
$this->cID $c->getCollectionID();
    }

    public function 
updateConversationSummary()
    {
        
$db Loader::db();
        
$date $db->GetOne('select max(cnvMessageDateCreated) from ConversationMessages where cnvID =  ? and cnvIsMessageDeleted = 0 and cnvIsMessageApproved = 1',
            array(
                
$this->getConversationID()
            ));
        if (!
$date) {
            
$date $this->getConversationDateCreated();
        }

        
$total $db->GetOne('select count(cnvMessageID) from ConversationMessages where cnvID = ? and cnvIsMessageDeleted = 0 and cnvIsMessageApproved = 1',
            array(
$this->cnvID));
        
$db->Execute('update Conversations set cnvDateLastMessage = ?, cnvMessagesTotal = ? where cnvID = ?', array(
            
$date,
            
$total,
            
$this->getConversationID()
        ));
    }

    
/**
     * @return ConcreteCoreUserUserInfo[]
     */
    
public function getConversationMessageUsers()
    {
        
$ml = new ConversationMessageList();
        
$ml->filterByConversation($this);
        
$users = array();
        foreach (
$ml->get() as $message) {
            
$ui $message->getConversationMessageUserObject();
            if (
$ui instanceof UserInfo) {
                
$users[$ui->getUserID()] = $ui;
            }
        }
        return 
array_values($users);
    }

    public function 
setConversationParentMessageID($cnvParentMessageID)
    {
        
$db Loader::db();
        
$db->Execute('update Conversations set cnvParentMessageID = ? where cnvID = ?',
            array(
$cnvParentMessageID$this->getConversationID()));
        
$this->cnvMessageParentID $cnvParentMessageID;
    }

    public static function 
add()
    {
        
$db Loader::db();
        
$date Loader::helper('date')->getOverridableNow();
        
$r $db->Execute('insert into Conversations (cnvDateCreated, cnvDateLastMessage) values (?, ?)',
            array(
$date$date));
        return static::
getByID($db->Insert_ID());
    }

    public function 
setConversationAttachmentOverridesEnabled($cnvAttachmentOverridesEnabled)
    {
        
$db Loader::db();
        
$db->Execute('update Conversations set cnvAttachmentOverridesEnabled = ? where cnvID = ?',
            array(
intval($cnvAttachmentOverridesEnabled), $this->getConversationID()));
    }

    public function 
setConversationNotificationOverridesEnabled($cnvNotificationOverridesEnabled)
    {
        
$db Loader::db();
        
$db->Execute('update Conversations set cnvNotificationOverridesEnabled = ? where cnvID = ?',
            array(
intval($cnvNotificationOverridesEnabled), $this->getConversationID()));
    }

    public function 
setConversationAttachmentsEnabled($cnvAttachmentsEnabled)
    {
        
$db Loader::db();
        
$db->Execute('update Conversations set cnvAttachmentsEnabled = ? where cnvID = ?',
            array(
intval($cnvAttachmentsEnabled), $this->getConversationID()));
    }

    public function 
setConversationMaxFileSizeGuest($cnvMaxFileSizeGuest)
    {
        
$db Loader::db();
        
$db->Execute('update Conversations set cnvMaxFileSizeGuest = ? where cnvID = ?',
            array(
intval($cnvMaxFileSizeGuest), $this->getConversationID()));
    }

    public function 
setConversationMaxFileSizeRegistered($cnvMaxFileSizeRegistered)
    {
        
$db Loader::db();
        
$db->Execute('update Conversations set cnvMaxFileSizeRegistered = ? where cnvID = ?',
            array(
intval($cnvMaxFileSizeRegistered), $this->getConversationID()));
    }

    public function 
setConversationMaxFilesGuest($cnvMaxFilesGuest)
    {
        
$db Loader::db();
        
$db->Execute('update Conversations set cnvMaxFilesGuest = ? where cnvID = ?',
            array(
intval($cnvMaxFilesGuest), $this->getConversationID()));
    }

    public function 
setConversationMaxFilesRegistered($cnvMaxFilesRegistered)
    {
        
$db Loader::db();
        
$db->Execute('update Conversations set cnvMaxFilesRegistered = ? where cnvID = ?',
            array(
intval($cnvMaxFilesRegistered), $this->getConversationID()));
    }

    public function 
setConversationFileExtensions($cnvFileExtensions)
    {
        
$db Loader::db();
        
$db->Execute('update Conversations set cnvFileExtensions = ? where cnvID = ?',
            array(
$cnvFileExtensions$this->getConversationID()));
    }

    public function 
getConversationSubscriptionEnabled()
    {
        if (
$this->getConversationNotificationOverridesEnabled() > 0) {
            return 
$this->cnvEnableSubscription;
        } else {
            return 
Config::get('conversations.subscription_enabled');
        }
    }

    public function 
setConversationSubscriptionEnabled($cnvEnableSubscription)
    {
        
$db Loader::db();
        
$db->Execute('update Conversations set cnvEnableSubscription = ? where cnvID = ?',
            array(
intval($cnvEnableSubscription), $this->getConversationID()));
    }

    
/**
     * Similar to the method below, but excludes global subscribers who have opted out of conversations, etc...
     * This method should be used any time we actually act on subscriptions, send emails, etc...
     */
    
public function getConversationUsersToEmail()
    {
        
$db Loader::db();

        
$ids = array();
        if (!
$this->getConversationNotificationOverridesEnabled() > 0) {
            
$ids $db->GetCol('select uID from ConversationSubscriptions where cnvID = 0');
        }

        
$r $db->Execute('select uID, type from ConversationSubscriptions where cnvID = ?',
            array(
$this->getConversationID()));
        while (
$row $r->FetchRow()) {
            if (
$row['type'] == 'U' && in_array($row['uID'], $ids)) {
                
$ids array_diff($ids, array($row['uID']));
            } else {
                
$ids[] = $row['uID'];
            }
        }

        
$ids array_unique($ids);

        
$users = array();
        foreach(
$ids as $uID) {
            
$ui UserInfo::getByID($uID);
            if (
is_object($ui)) {
                
$users[] = $ui;
            }
        }
        return 
$users;
    }

    public function 
getConversationSubscribedUsers()
    {
        if (
$this->getConversationNotificationOverridesEnabled() > 0) {
            
$db Loader::db();
            
$r $db->GetCol('select uID from ConversationSubscriptions where cnvID = ? order by uID asc',
                array(
$this->getConversationID()));
            
$users = array();
            foreach(
$r as $uID) {
                
$ui UserInfo::getByID($uID);
                if (
is_object($ui)) {
                    
$users[] = $ui;
                }
            }
        } else {
            
$users Conversation::getDefaultSubscribedUsers();
        }
        return 
$users;
    }

    public static function 
getDefaultSubscribedUsers()
    {
        
$db Loader::db();
        
$r $db->GetCol('select uID from ConversationSubscriptions where cnvID = 0 order by uID asc');
        
$users = array();
        foreach(
$r as $uID) {
            
$ui UserInfo::getByID($uID);
            if (
is_object($ui)) {
                
$users[] = $ui;
            }
        }
        return 
$users;
    }

    public function 
setConversationSubscribedUsers($users)
    {
        
$db Loader::db();
        
$db->delete('ConversationSubscriptions', array('cnvID' => $this->getConversationID() ));
        
$db->beginTransaction();
        foreach(
$users as $ui) {
            
$db->insert('ConversationSubscriptions', array('cnvID' => $this->getConversationID(), 'uID' => $ui->getUserID()));
        }
        
$db->commit();
    }

    public function 
isUserSubscribed($user)
    {
        
$db Loader::db();
        
$type $db->GetOne('select type from ConversationSubscriptions where uID = ? and cnvID = ?', array(
           
$user->getUserID(), $this->getConversationID()
        ));
        if (
$type == 'S') {
            return 
true;
        } else if (
$type == 'U') {
            return 
false;
        } else {
            if (
$this->getConversationNotificationOverridesEnabled() > 0) {
                return 
false;
            } else {
                
$cnt $db->GetOne('select count(cnvID) from ConversationSubscriptions where uID = ? and cnvID = 0', array(
                    
$user->getUserID()
                ));
                return 
$cnt 0;
            }
        }
    }

    public function 
subscribeUser($user)
    {
        
$db Loader::db();
        
$db->delete('ConversationSubscriptions', array('cnvID' => $this->getConversationID(), 'uID' => $user->getUserID()));
        if (!
$this->isUserSubscribed($user)) {
            
// note, even though we just deleted the row, we still run the check, because the user COULD be subscribed
            // globally
            
$db->insert('ConversationSubscriptions', array('cnvID' => $this->getConversationID(), 'uID' => $user->getUserID()));
        }
    }

    public function 
unsubscribeUser($user)
    {
        
$db Loader::db();
        
$db->delete('ConversationSubscriptions', array('cnvID' => $this->getConversationID(), 'uID' => $user->getUserID()));
        if (
$this->isUserSubscribed($user)) {
            
// this means we don't have a subscription record in the conversation specific table. So we check to see if user is still subscribed
            // If that's the case, it means they're subscribed globally.
            
$db->insert('ConversationSubscriptions', array('cnvID' => $this->getConversationID(), 'type' => 'U''uID' => $user->getUserID()));
        }
    }

    public static function 
setDefaultSubscribedUsers($users)
    {
        
$db Loader::db();
        
$db->delete('ConversationSubscriptions', array('cnvID' => 0));
        
$db->beginTransaction();
        foreach(
$users as $ui) {
            
$db->insert('ConversationSubscriptions', array('cnvID' => 0'uID' => $ui->getUserID()));
        }
        
$db->commit();
    }


}
Онлайн: 3
Реклама