Вход Регистрация
Файл: concrete5.7.5.6/concrete/blocks/core_conversation/controller.php
Строк: 520
<?php

namespace ConcreteBlockCoreConversation;

use 
Core;
use 
Database;
use 
ConcreteCoreBlockBlockController;
use 
ConcreteCoreConversationConversation;
use 
ConcreteCoreConversationMessageMessageList;
use 
ConcreteCoreFeatureConversationFeatureInterface;
use 
Page;

/**
 * The controller for the conversation block. This block is used to display conversations in a page.
 *
 * @package Blocks
 * @subpackage Conversation
 * @author Andrew Embler <andrew@concrete5.org>
 * @copyright  Copyright (c) 2003-2013 Concrete5. (http://www.concrete5.org)
 * @license    http://www.concrete5.org/license/     MIT License
 */
class Controller extends BlockController implements ConversationFeatureInterface
{
    protected 
$btCacheBlockRecord true;
    protected 
$btTable 'btCoreConversation';
    protected 
$conversation;
    protected 
$btWrapperClass 'ccm-ui';
    protected 
$btCopyWhenPropagate true;
    protected 
$btFeatures = array(
        
'conversation',
    );

    public function 
getBlockTypeDescription()
    {
        return 
t("Displays conversations on a page.");
    }

    public function 
getBlockTypeName()
    {
        return 
t("Conversation");
    }

    public function 
getSearchableContent()
    {
        
$ml = new MessageList();
        
$ml->filterByConversation($this->getConversationObject());
        
$messages $ml->get();
        if (!
count($messages)) {
            return 
'';
        }

        
$content '';
        foreach (
$messages as $message) {
            
$content .= $message->getConversationMessageSubject() . ' ' .
                       
strip_tags($message->getConversationMessageBody()) . ' ';
        }

        return 
rtrim($content);
    }

    public function 
getConversationFeatureDetailConversationObject()
    {
        return 
$this->getConversationObject();
    }

    public function 
getConversationObject()
    {
        if (!isset(
$this->conversation)) {
            
// i don't know why this->cnvid isn't sticky in some cases, leading us to query
            // every damn time
            
$db Database::get();
            
$cnvID $db->GetOne('select cnvID from btCoreConversation where bID = ?', array($this->bID));
            
$this->conversation Conversation::getByID($cnvID);
        }

        return 
$this->conversation;
    }

    public function 
duplicate_master($newBID$newPage)
    {
        
parent::duplicate($newBID);
        
$db Database::get();
        
$conv Conversation::add();
        
$conv->setConversationPageObject($newPage);
        
$this->conversation $conv;
        
$db->Execute('update btCoreConversation set cnvID = ? where bID = ?', array($conv->getConversationID(), $newBID));
    }

    public function 
edit()
    {
        
$fileSettings $this->getFileSettings();
        
$this->set('maxFilesGuest'$fileSettings['maxFilesGuest']);
        
$this->set('maxFilesRegistered'$fileSettings['maxFilesRegistered']);
        
$this->set('maxFileSizeGuest'$fileSettings['maxFileSizeGuest']);
        
$this->set('maxFileSizeRegistered'$fileSettings['maxFileSizeRegistered']);
        
$this->set('fileExtensions'$fileSettings['fileExtensions']);
        
$this->set('attachmentsEnabled'$fileSettings['attachmentsEnabled'] > $fileSettings['attachmentsEnabled'] : '');
        
$this->set('attachmentOverridesEnabled'$fileSettings['attachmentOverridesEnabled'] > $fileSettings['attachmentOverridesEnabled'] : '');

        
$conversation $this->getConversationObject();
        
$this->set('notificationOverridesEnabled'$conversation->getConversationNotificationOverridesEnabled());
        
$this->set('subscriptionEnabled'$conversation->getConversationSubscriptionEnabled());
        
$this->set('notificationUsers'$conversation->getConversationSubscribedUsers());
    }

    public function 
registerViewAssets($outputContent '')
    {
        
$this->requireAsset('core/conversation');
        
$this->requireAsset('core/lightbox');
        
$u = new User();
        if (!
$u->isRegistered()) {
            
$this->requireAsset('css''core/frontend/captcha');
        }
    }
    public function 
view()
    {
        
$fileSettings $this->getFileSettings();
        
$conversation $this->getConversationObject();
        if (
is_object($conversation)) {
            
$this->set('conversation'$conversation);
            if (
$this->enablePosting) {
                
$token Core::make('helper/validation/token')->generate('add_conversation_message');
            } else {
                
$token '';
            }
            
$this->set('posttoken'$token);
            
$this->set('cID'Page::getCurrentPage()->getCollectionID());
            
$this->set('users'$this->getActiveUsers(true));
            
$this->set('maxFilesGuest'$fileSettings['maxFilesGuest']);
            
$this->set('maxFilesRegistered'$fileSettings['maxFilesRegistered']);
            
$this->set('maxFileSizeGuest'$fileSettings['maxFileSizeGuest']);
            
$this->set('maxFileSizeRegistered'$fileSettings['maxFileSizeRegistered']);
            
$this->set('fileExtensions'$fileSettings['fileExtensions']);
            
$this->set('attachmentsEnabled'$fileSettings['attachmentsEnabled']);
            
$this->set('attachmentOverridesEnabled'$fileSettings['attachmentOverridesEnabled']);
        }
    }

    public function 
getFileSettings()
    {
        
$conversation $this->getConversationObject();
        
$helperFile Core::make('helper/concrete/file');
        
$maxFilesGuest $conversation->getConversationMaxFilesGuest();
        
$attachmentOverridesEnabled $conversation->getConversationAttachmentOverridesEnabled();
        
$maxFilesRegistered $conversation->getConversationMaxFilesRegistered();
        
$maxFileSizeGuest $conversation->getConversationMaxFileSizeGuest();
        
$maxFileSizeRegistered $conversation->getConversationMaxFileSizeRegistered();
        
$fileExtensions $conversation->getConversationFileExtensions();
        
$attachmentsEnabled $conversation->getConversationAttachmentsEnabled();

        
$fileExtensions implode(','$helperFile->unserializeUploadFileExtensions($fileExtensions)); //unserialize and implode extensions into comma separated string

        
$fileSettings = array();
        
$fileSettings['maxFileSizeRegistered'] = $maxFileSizeRegistered;
        
$fileSettings['maxFileSizeGuest'] = $maxFileSizeGuest;
        
$fileSettings['maxFilesGuest'] = $maxFilesGuest;
        
$fileSettings['maxFilesRegistered'] = $maxFilesRegistered;
        
$fileSettings['fileExtensions'] = $fileExtensions;
        
$fileSettings['attachmentsEnabled'] = $attachmentsEnabled;
        
$fileSettings['attachmentOverridesEnabled'] = $attachmentOverridesEnabled;

        return 
$fileSettings;
    }

    public function 
getActiveUsers($lower false)
    {
        
$cnv $this->getConversationObject();
        
$uobs $cnv->getConversationMessageUsers();
        
$users = array();
        foreach (
$uobs as $user) {
            if (
$lower) {
                
$users[] = strtolower($user->getUserName());
            } else {
                
$users[] = $user->getUserName();
            }
        }

        return 
$users;
    }

    public function 
save($post)
    {
        
$helperFile Core::make('helper/concrete/file');
        
$db Database::get();
        
$cnvID $db->GetOne('select cnvID from btCoreConversation where bID = ?', array($this->bID));
        if (!
$cnvID) {
            
$conversation Conversation::add();
            
$b $this->getBlockObject();
            
$xc $b->getBlockCollectionObject();
            
$conversation->setConversationPageObject($xc);
        } else {
            
$conversation Conversation::getByID($cnvID);
        }
        
$values $post + array(
            
'attachmentOverridesEnabled' => null,
            
'attachmentsEnabled' => null,
            
'itemsPerPage' => null,
            
'maxFilesGuest' => null,
            
'maxFilesRegistered' => null,
            
'maxFileSizeGuest' => null,
            
'maxFileSizeRegistered' => null,
            
'enableOrdering' => null,
            
'enableCommentRating' => null,
            
'notificationOverridesEnabled' => null,
            
'subscriptionEnabled' => null,
            
'fileExtensions' => null,
        );
        if (
$values['attachmentOverridesEnabled']) {
            
$conversation->setConversationAttachmentOverridesEnabled(intval($values['attachmentOverridesEnabled']));
        } else {
            
$conversation->setConversationAttachmentOverridesEnabled(0);
        }
        if (
$values['attachmentsEnabled']) {
            
$conversation->setConversationAttachmentsEnabled(intval($values['attachmentsEnabled']));
        }
        if (!
$values['itemsPerPage']) {
            
$values['itemsPerPage'] = 0;
        }
        if (
$values['maxFilesGuest']) {
            
$conversation->setConversationMaxFilesGuest(intval($values['maxFilesGuest']));
        }
        if (
$values['maxFilesRegistered']) {
            
$conversation->setConversationMaxFilesRegistered(intval($values['maxFilesRegistered']));
        }
        if (
$values['maxFileSizeGuest']) {
            
$conversation->setConversationMaxFileSizeGuest(intval($values['maxFileSizeGuest']));
        }
        if (
$values['maxFileSizeRegistered']) {
            
$conversation->setConversationMaxFilesRegistered(intval($values['maxFileSizeRegistered']));
        }
        if (!
$values['enableOrdering']) {
            
$values['enableOrdering'] = 0;
        }
        if (!
$values['enableCommentRating']) {
            
$values['enableCommentRating'] = 0;
        }

        if (
$values['notificationOverridesEnabled']) {
            
$conversation->setConversationNotificationOverridesEnabled(true);
            
$users = array();
            if (
is_array($this->post('notificationUsers'))) {
                foreach (
$this->post('notificationUsers') as $uID) {
                    
$ui UserInfo::getByID($uID);
                    if (
is_object($ui)) {
                        
$users[] = $ui;
                    }
                }
            }
            
$conversation->setConversationSubscribedUsers($users);
            
$conversation->setConversationSubscriptionEnabled(intval($values['subscriptionEnabled']));
        } else {
            
$conversation->setConversationNotificationOverridesEnabled(false);
            
$conversation->setConversationSubscriptionEnabled(0);
        }

        if (
$values['fileExtensions']) {
            
$receivedExtensions preg_split('{,}'strtolower($values['fileExtensions']), nullPREG_SPLIT_NO_EMPTY);
            
$fileExtensions $helperFile->serializeUploadFileExtensions($receivedExtensions);
            
$conversation->setConversationFileExtensions($fileExtensions);
        }

        
$values['cnvID'] = $conversation->getConversationID();
        
parent::save($values);
    }
}
Онлайн: 1
Реклама