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

namespace ConcreteCoreConversationEditor;

use 
Config;
use 
Conversation;
use 
Core;
use 
Database;
use 
Environment;
use 
ConcreteCoreConversationMessageMessage;
use 
ConcreteCoreFoundationObject;
use 
Package;
use 
ConcreteCorePackagePackageList;
use 
View;

abstract class 
Editor extends Object
{
    
/** @var string */
    
protected $cnvEditorHandle;
    
/** @var string */
    
protected $cnvEditorID;
    
/** @var int */
    
protected $cnvEditorIsActive;
    
/** @var string */
    
protected $cnvEditorInputName 'cnvMessageBody';
    
/** @var string */
    
protected $cnvEditorName;
    
/** @var Message */
    
protected $cnvMessage;
    
/** @var Conversation */
    
protected $cnvObject;
    
/** @var int */
    
protected $pkgID;

    
/** @return ConcreteCoreAssetAssetPointer[] */
    
abstract public function getConversationEditorAssetPointers();

    public function 
setConversationEditorInputName($input)
    {
        
$this->cnvEditorInputName $input;
    }

    public function 
getConversationEditorInputName()
    {
        return 
$this->cnvEditorInputName;
    }

    
/**
     * @param Conversation $cnvObject
     */
    
public function setConversationObject($cnvObject)
    {
        
$this->cnvObject $cnvObject;
    }

    public function 
getConversationObject()
    {
        if (!
is_object($this->cnvObject)) {
            return 
$this->cnvMessage->getConversationObject();
        } else {
            return 
$this->cnvObject;
        }
    }

    
/**
     * @param Message $message
     */
    
public function setConversationMessageObject(Message $message)
    {
        
$this->cnvMessage $message;
    }

    public function 
getConversationMessageObject()
    {
        return 
$this->cnvMessage;
    }

    
/**
     * @return string Returns the editor's formatted message
     */
    
public function getConversationEditorMessageBody()
    {
        if (!
is_object($this->cnvMessage)) {
            return 
'';
        }
        
$cnv $this->cnvMessage->getConversationObject();

        return 
$this->cnvMessage->getConversationMessageBody();
    }

    public function 
getConversationEditorHandle()
    {
        return 
$this->cnvEditorHandle;
    }

    public function 
getConversationEditorID()
    {
        return 
$this->cnvEditorID;
    }

    public function 
getConversationEditorName()
    {
        return 
$this->cnvEditorName;
    }

    public function 
isConversationEditorActive()
    {
        return 
$this->cnvEditorIsActive;
    }

    public function 
getPackageID()
    {
        return 
$this->pkgID;
    }

    
/**
     * Looks up and returns the Package.
     *
     * @return string
     */
    
public function getPackageHandle()
    {
        return 
PackageList::getHandle($this->pkgID);
    }

    
/**
     * Looks up and returns a Package object for the current Editor's Package ID.
     *
     * @return Package
     */
    
public function getPackageObject()
    {
        return 
Package::getByID($this->pkgID);
    }

    
/**
     * @return Editor|null Returns the first found active conversation editor, null if no editor is active
     */
    
public static function getActive()
    {
        
$db Database::connection();
        
$cnvEditorID $db->fetchColumn('select cnvEditorID from ConversationEditors where cnvEditorIsActive = 1');
        if (
$cnvEditorID) {
            return static::
getByID($cnvEditorID);
        }

        return 
null;
    }

    
/**
     * Returns the appropriate conversation editor object for the given cnvEditorID.
     *
     * @param int $cnvEditorID
     *
     * @return Editor|null
     */
    
public static function getByID($cnvEditorID)
    {
        
$db Database::connection();
        
$r $db->fetchAssoc(
            
'select *
             from ConversationEditors
             where cnvEditorID = ?'
,
            array(
$cnvEditorID)
        );

        return static::
createFromRecord($r);
    }

    
/**
     * Returns the appropriate conversation editor object for the given cnvEditorHandle.
     *
     * @param $cnvEditorHandle
     *
     * @return Editor|null
     */
    
public static function getByHandle($cnvEditorHandle)
    {
        
$db Database::connection();
        
$r $db->fetchAssoc(
            
'select *
             from ConversationEditors
             where cnvEditorHandle = ?'
,
            array(
$cnvEditorHandle)
        );

        return static::
createFromRecord($r);
    }

    
/**
     * This function is used to instantiate a Conversation Editor object from an associative array.
     *
     * @param array $record an associative array of field value pairs for the ConversationEditor record
     *
     * @return Editor|null
     */
    
protected static function createFromRecord($record)
    {
        if (
is_array($record) && $record['cnvEditorHandle']) {
            
/** @var ConcreteCoreUtilityServiceText $textHelper */
            
$textHelper Core::make('helper/text');
            
$class '\Concrete\Core\Conversation\Editor\' . $textHelper->camelcase(
                    $record['
cnvEditorHandle']
                ) . '
Editor';
            /** @var Editor $sc Really this could be any kind of editor but this should help code completion a bit */
            $sc = Core::make($class);
            $sc->setPropertiesFromArray($record);

            return $sc;
        }

        return null;
    }

    /**
     * outputs an HTML block containing the add message form for the current Conversation Editor.
     */
    public function outputConversationEditorAddMessageForm()
    {
        $env = Environment::get();
        $path = $env->getPath(
            DIRNAME_ELEMENTS . '
/' . DIRNAME_CONVERSATIONS . '/' . DIRNAME_CONVERSATION_EDITOR . '/' .
            $this->cnvEditorHandle . '
/' . FILENAME_CONVERSATION_EDITOR_FORM_MESSAGE,
            $this->getPackageHandle()
        );
        $editor = $this; //$editor used in the element
        include $path;
    }

    /**
     * Outputs an HTML block containing the message reply form for the current Conversation Editor.
     */
    public function outputConversationEditorReplyMessageForm()
    {
        $env = Environment::get();
        $path = $env->getPath(
            DIRNAME_ELEMENTS . '
/' . DIRNAME_CONVERSATIONS . '/' . DIRNAME_CONVERSATION_EDITOR . '/' .
            $this->cnvEditorHandle . '
/' . FILENAME_CONVERSATION_EDITOR_FORM_REPLY,
            $this->getPackageHandle()
        );
        $editor = $this; //$editor used in the element
        include $path;
    }

    /**
     * Returns a formatted conversation message body string, based on configuration options supplied.
     *
     * @param ConcreteCoreConversationConversation $cnv
     * @param string $cnvMessageBody
     * @param array $config
     *
     * @return string
     */
    public function formatConversationMessageBody($cnv, $cnvMessageBody, $config = array())
    {
        /** @var  ConcreteCoreHtmlServiceHtml $htmlHelper */
        $htmlHelper = Core::make('
helper/html');
        $cnvMessageBody = $htmlHelper->noFollowHref($cnvMessageBody);
        if (isset($config['
htmlawed'])) {
            $default = array('
safe' => 1, 'elements' => 'pbrstrongemstrikea');
            $conf = array_merge($default, (array) $config['
htmlawed']);
            $lawed = htmLawed($cnvMessageBody, $conf);
        } else {
            $lawed = $cnvMessageBody;
        }
        if ($config['
mention'] !== false) {
            $users = $cnv->getConversationMessageUsers();
            $needle = array();
            $haystack = array();
            foreach ($users as $user) {
                $needle[] = "@" . $user->getUserName();
                $haystack[] = "<a href='" . 
$user->getUserPublicProfileURL() . "'>'@" . $user->getUserName() . "</a>";
            }

            return str_ireplace(
$needle$haystack$lawed);
        }

        return 
$lawed;
    }

    /**
     * Creates a database record for the Conversation Editor, then attempts to return the object.
     *
     * @param string 
$cnvEditorHandle
     * @param string 
$cnvEditorName
     * @param bool|Package 
$pkg
     *
     * @return Editor|null
     */
    public static function add(
$cnvEditorHandle$cnvEditorName$pkg = false)
    {
        
$pkgID = 0;
        if (is_object(
$pkg)) {
            
$pkgID = $pkg->getPackageID();
        }
        
$db = Database::connection();
        
$db->insert(
            'ConversationEditors',
            array(
                'cnvEditorHandle' => 
$cnvEditorHandle,
                'cnvEditorName' => 
$cnvEditorName,
                'pkgID' => 
$pkgID,
            )
        );

        return static::getByHandle(
$cnvEditorHandle);
    }

    /**
     * Removes the current editor object's record from the database.
     */
    public function delete()
    {
        
$db = Database::connection();
        
$db->delete('ConversationEditors', array('cnvEditorID' => $this->cnvEditorID));
    }

    /**
     * Deactivates all other Conversation Editors, and activates the current one.
     */
    public function activate()
    {
        
$db = Database::connection();
        static::deactivateAll();
        
$db->update('ConversationEditors', array('cnvEditorIsActive' => 1), array('cnvEditorID' => $this->cnvEditorID));
    }

    /**
     * Function used to deactivate.
     */
    protected function deactivateAll()
    {
        
$db = Database::connection();
        
$db->update('ConversationEditors', array('cnvEditorIsActive' => 0), array('cnvEditorIsActive' => 1));
    }

    /**
     * Returns an array of all Editor Objects.
     *
     * @param null 
$pkgID An optional filter for Package ID
     *
     * @return Editor[]
     */
    public static function getList(
$pkgID = null)
    {
        
$db = Database::connection();
        
$queryBuilder = $db->createQueryBuilder()
            ->select('e.*')
            ->from('ConversationEditors', 'e')
            ->orderBy('cnvEditorHandle', 'asc');
        if (
$pkgID !== null) {
            
$queryBuilder->andWhere('e.pkgID = :pkgID')->setParameter('pkgID', $pkgID);
        }

        
$cnvEditors = $db->fetchAll($queryBuilder->getSQL(), $queryBuilder->getParameters());
        
$editors = array();
        foreach (
$cnvEditors as $editorRecord) {
            
$cnvEditor = static::createFromRecord($editorRecord);
            
$editors[] = $cnvEditor;
        }

        return 
$editors;
    }

    /**
     * Returns an array of all Editor objects for the given package object.
     *
     * @param Package 
$pkg
     *
     * @return Editor[]
     */
    public static function getListByPackage(
$pkg)
    {
        return static::getList(
$pkg->getPackageID());
    }

    public function export(
$xml)
    {
        
$type = $xml->addChild('editor');
        
$type->addAttribute('handle', $this->getConversationEditorHandle());
        
$type->addAttribute('name', $this->getConversationEditorName());
        
$type->addAttribute('package', $this->getPackageHandle());
        
$type->addAttribute('activated', $this->isConversationEditorActive());
    }

    /**
     * Adds a ConversationEditors node and all Editor records to the provided SimleXMLElement object provided.
     *
     * @param SimpleXMLElement 
$xml
     */
    public static function exportList(
$xml)
    {
        
$list = static::getList();
        
$nxml = $xml->addChild('conversationeditors');

        foreach (
$list as $sc) {
            
$sc->export($nxml);
        }
    }

    /**
     * Returns whether or not the current Conversation Editor has an options form.
     *
     * @return bool
     */
    public function hasOptionsForm()
    {
        
$env = Environment::get();
        
$rec = $env->getRecord(
            DIRNAME_ELEMENTS . '/' . DIRNAME_CONVERSATIONS . '/' . DIRNAME_CONVERSATION_EDITOR . '/' .
            
$this->cnvEditorHandle . '/' . FILENAME_CONVERSATION_EDITOR_OPTIONS,
            
$this->getPackageHandle()
        );

        return 
$rec->exists();
    }
}
Онлайн: 0
Реклама