| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- <?php
- namespace zin;
- require_once dirname(__DIR__) . DS . 'btn' . DS . 'v1.php';
- require_once dirname(__DIR__) . DS . 'storylist' . DS . 'v1.php';
- class linkedStoryList extends storyList
- {
- /**
- * @var mixed[]
- */
- protected static $defineProps = array
- (
- 'story' => '?object', // 被关联的需求。
- 'unlinkBtn' => '?array|bool', // 取消关联按钮。
- 'unlinkStoryTip' => '?string', // 取消关联提示信息。
- 'unlinkUrl' => '?string', // 取消关联需求链接
- 'newLinkBtn' => '?array|bool' // 底部新关联按钮。
- );
- /**
- * @var mixed[]
- */
- protected static $defaultProps = array
- (
- 'name' => 'linked-story-list'
- );
- public static function getPageJS()
- {
- return <<<'JS'
- window.unlinkStory = function(e)
- {
- const $this = $(e.target).closest('li').find('.unlinkStory');
- zui.Modal.confirm({message: window.unlinkStoryTip || $this.closest('ul').data('unlinkStoryTip'), icon:'icon-exclamation-sign', iconClass: 'warning-pale rounded-full icon-2x'}).then((res) =>
- {
- if(res) $.get($this.attr('data-url'), function(){$this.closest('li').remove()});
- });
- };
- JS;
- }
- /**
- * @var object|null
- */
- protected $story;
- /**
- * @var string|null
- */
- protected $unlinkUrl;
- /**
- * @var null|mixed[]|bool
- */
- protected $unlinkBtn = null;
- protected function beforeBuild()
- {
- $story = $this->prop('story');
- if(!$story) $story = data('story');
- if(!$story) return;
- $unlinkUrl = $this->prop('unlinkUrl');
- if($unlinkUrl === null) $unlinkUrl = createLink('story', 'linkStory', "storyID={$story->id}&type=remove&linkedID={id}&browseType=&queryID=0&storyType=$story->type");
- $canLink = hasPriv($story->type, 'linkStory');
- $unlinkBtn = $this->prop('unlinkBtn');
- if($unlinkBtn === null) $unlinkBtn = $canLink;
- $this->story = $story;
- $this->unlinkUrl = $unlinkUrl;
- $this->unlinkBtn = $unlinkBtn;
- }
- /**
- * @param object $story
- */
- protected function getItem($story)
- {
- global $lang;
- $item = parent::getItem($story);
- $unlinkBtn = $this->unlinkBtn;
- if($unlinkBtn)
- {
- if(!isset($item['actions'])) $item['actions'] = array();
- $btn = array
- (
- 'class' => 'unlinkStory unlink opacity-0 group-hover:opacity-100 text-primary',
- 'icon' => 'unlink',
- 'data-id' => $story->id,
- 'data-on' => 'click',
- 'data-url' => str_replace('{id}', "$story->id", $this->unlinkUrl),
- 'data-params' => 'event',
- 'data-call' => 'unlinkStory',
- 'hint' => $lang->story->unlink
- );
- if(is_array($unlinkBtn)) $btn = array_merge($btn, $unlinkBtn);
- $item['actions'][] = $btn;
- }
- return $item;
- }
- protected function build()
- {
- $list = parent::build();
- if($this->unlinkBtn)
- {
- $unlinkStoryTip = $this->prop('unlinkStoryTip');
- if($unlinkStoryTip === null && $this->story)
- {
- global $lang;
- $unlinkStoryTip = $this->story->type == 'story' ? str_replace($lang->SRCommon, $lang->URCommon, $lang->story->unlinkStory) : $lang->story->unlinkStory;
- }
- $list->add(setData('unlinkStoryTip', $unlinkStoryTip));
- }
- $newLinkBtn = $this->prop('newLinkBtn');
- if($newLinkBtn === null) $newLinkBtn = $this->unlinkBtn;
- if($newLinkBtn)
- {
- global $lang;
- $story = $this->story;
- if(!$story) return $list;
- $btn = new btn
- (
- set::url('story', 'linkStory', "storyID=$story->id&type=linkStories&linkedID=0&browseType=&queryID=0&storyType=$story->type"),
- set::icon('plus'),
- set::size('sm'),
- set::type('secondary'),
- setClass('my-2'),
- setData(array('toggle' => 'modal', 'size' => 'lg')),
- setID('linkButton'),
- is_array($newLinkBtn) ? set($newLinkBtn) : null,
- $lang->story->linkStory
- );
- return array($list, $btn);
- }
- return $list;
- }
- }
|