%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/wiki/widgets/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/protected/modules/wiki/widgets/WikiMenu.php |
<?php
/**
* Created by PhpStorm.
* User: kingb
* Date: 11.09.2018
* Time: 13:20
*/
namespace humhub\modules\wiki\widgets;
use humhub\components\Widget;
use humhub\modules\content\components\ContentContainerActiveRecord;
use humhub\modules\content\widgets\MoveContentLink;
use humhub\modules\content\widgets\PermaLink;
use humhub\modules\wiki\helpers\Url;
use humhub\modules\wiki\models\WikiPage;
use humhub\modules\wiki\models\WikiPageRevision;
use humhub\modules\wiki\permissions\AdministerPages;
use humhub\modules\wiki\permissions\CreatePage;
use humhub\modules\wiki\permissions\EditPages;
use humhub\modules\wiki\permissions\ViewHistory;
use humhub\widgets\JsWidget;
use humhub\widgets\Link;
use Yii;
class WikiMenu extends JsWidget
{
public $jsWidget = 'wiki.Menu';
public $init = true;
const LINK_HOME = 'home';
const LINK_INDEX = 'index';
const LINK_EDIT = 'edit';
const LINK_HISTORY = 'history';
const LINK_PERMA = 'perma';
const LINK_EDIT_CANCEL = 'edit_cancel';
const LINK_EDIT_SAVE = 'edit_save';
const LINK_EDIT_DELETE = 'edit_delete';
const LINK_BACK_TO_PAGE = 'back_to_page';
const LINK_REVERT = 'revert';
const LINK_REVERT_GO_BACK = 'revert_go_back';
const LINK_MOVE = 'move';
const LINK_NEW = 'new';
const BLOCK_START = [self::LINK_HOME, self::LINK_INDEX];
const BLOCK_PAGE_VIEW = [self::LINK_EDIT, self::LINK_HISTORY, self::LINK_PERMA];
const BLOCK_REVISION_VIEW = [self::LINK_REVERT, self::LINK_REVERT_GO_BACK];
const BLOCK_EDIT = [self::LINK_EDIT_SAVE, self::LINK_EDIT_CANCEL, self::LINK_EDIT_DELETE, self::LINK_MOVE];
const BLOCK_BOTTOM = [self::LINK_NEW];
/**
* @var WikiPage
*/
public $page;
/**
* @var ContentContainerActiveRecord
*/
public $container;
/**
* @var WikiPageRevision
*/
public $revision;
/**
* @var WikiPage
*/
public $home;
/**
* @var array
*/
public $excludes = [];
/**
* @var bool
*/
private $canEdit = false;
/**
* @var bool
*/
private $canDelete = false;
/**
* @var bool edit page view
*/
public $edit = false;
/**
* @var array
*/
public $blocks = [];
public $cols = 3;
public function init()
{
if(!$this->container && $this->page) {
$this->container = $this->page->content->container;
}
if(empty($this->blocks)) {
$this->setDefaults();
}
if(!$this->home) {
$this->home = WikiPage::getHome($this->container);
}
if($this->page) {
$this->canEdit = $this->page->canEditWikiPage();
$this->canDelete = !$this->page->isNewRecord && $this->container->can(AdministerPages::class);
}
parent::init();
}
protected function setDefaults()
{
if($this->edit) {
$this->blocks = [static::BLOCK_EDIT, static::BLOCK_START];
} else if($this->page && (!$this->revision || $this->revision->is_latest)) {
$this->blocks = [static::BLOCK_START, static::BLOCK_PAGE_VIEW, static::BLOCK_BOTTOM];
} else if($this->page && $this->revision) {
$this->blocks = [static::BLOCK_START, static::BLOCK_REVISION_VIEW, static::BLOCK_BOTTOM];
} else {
$this->blocks = [static::BLOCK_START, static::BLOCK_BOTTOM];
}
}
public function run()
{
return $this->render('menu', [
'options' => $this->getOptions(),
'blocks' => $this->blocks,
'cols' => $this->cols
]);
}
public function getAttributes()
{
$cols = $this->cols;
return [
'class' => "col-lg-$cols col-md-$cols col-sm-$cols wiki-menu ",
];
}
/**
* @param $link
* @return Link|string
* @throws \yii\base\InvalidConfigException
*/
public function renderLink($link) {
if(in_array($link, $this->excludes)) {
return '';
}
$link = $this->getLink($link);
return empty($link) ? '' : $this->renderListItem($link);
}
/**
* @param $link
* @return Link|string
* @throws \yii\base\InvalidConfigException
* @throws \Exception
*/
private function getLink($link) {
switch ($link) {
case static::LINK_HOME:
return ($this->home) ? Link::to(Yii::t('WikiModule.base', 'Home'), Url::toWiki($this->home))->icon('fa-home') : null;
case static::LINK_INDEX:
return Link::to(Yii::t('WikiModule.base', 'Index'), Url::toOverview($this->container))->icon('fa-list-alt')->id('wiki_index');
case static::LINK_EDIT:
return ($this->canEdit) ? Link::to(Yii::t('WikiModule.base', 'Edit page'), Url::toWikiEdit($this->page))->icon('fa-pencil-square-o edit') : null;
case static::LINK_HISTORY:
return ($this->canViewHistory()) ? Link::to(Yii::t('WikiModule.base', 'Page History'), Url::toWikiHistory($this->page))->icon('fa-clock-o history') : null;
case static::LINK_PERMA:
return PermaLink::widget(['content' => $this->page->content]);
case static::LINK_REVERT:
return ($this->canEdit) ?
Link::withAction(Yii::t('WikiModule.base', 'Revert this'), 'wiki.revertRevision', Url::toWikiRevertRevision($this->page, $this->revision))
->icon('fa-history history')->confirm(
Yii::t('WikiModule.base', '<strong>Confirm</strong> page reverting'),
Yii::t('WikiModule.base', 'Do you really want to revert this page?'),
Yii::t('WikiModule.base', 'Revert')) : null;
case static::LINK_REVERT_GO_BACK:
return Link::to(Yii::t('WikiModule.base', 'Go back'), Url::toWikiHistory($this->page))->icon('fa-reply');
case static::LINK_NEW:
$url = ($this->page && $this->page->is_category)
? Url::toWikiCreate($this->container, $this->page->id)
: Url::toWikiCreate($this->container);
return ($this->canCreatePage()) ? Link::to(Yii::t('WikiModule.base', 'New page'),$url)->icon('fa-plus new') : null;
case static::LINK_EDIT_DELETE:
return $this->canDelete
? Link::withAction(Yii::t('WikiModule.base', 'Delete'), 'wiki.delete', Url::toWikiDelete($this->page))
->icon('fa-trash-o delete')
->confirm() : null;
case static::LINK_EDIT_CANCEL:
$url = $this->page->isNewRecord ? Url::toOverview($this->container) : Url::toWiki($this->page);
return Link::to(Yii::t('WikiModule.base', 'Cancel'), $url)->icon('fa-reply')->id('wiki_cancel');
case static::LINK_EDIT_SAVE:
return Link::withAction(Yii::t('WikiModule.base', 'Save'), 'wiki.Form.submit')->icon('fa-save')->cssClass('btn btn-primary');
case static::LINK_BACK_TO_PAGE:
return Link::to(Yii::t('WikiModule.base', 'Back to page'), Url::toWiki($this->page))->icon('fa-reply');
case static::LINK_MOVE:
return (!$this->page->isNewRecord && $this->page->canMove()) ? MoveContentLink::widget(['model' => $this->page]) : null;
}
}
protected function renderListItem($link)
{
return '<li>'.$link.'</li>';
}
/**
* @return boolean can create new wiki site
* @throws \yii\base\InvalidConfigException
*/
public function canCreatePage()
{
return $this->container->can(CreatePage::class);
}
/**
* @return boolean can view wiki page history?
* @throws \yii\base\InvalidConfigException
*/
public function canViewHistory()
{
return $this->container->can(ViewHistory::class);
}
/**
* @return boolean can manage wiki sites?
* @throws \yii\base\InvalidConfigException
*/
public function canAdminister()
{
return $this->container->can(AdministerPages::class);
}
}