예제 #1
0
 /**
  * @param bool|FALSE $isDisabled
  * @return array
  * @throws Mesour\InvalidArgumentException
  */
 public function getAttributes($isDisabled = false)
 {
     $data = $this->getOption('data');
     if ($data && count($data) > 0) {
         foreach ($this->attributes as $key => $value) {
             if ($value instanceof Mesour\Components\Link\IUrl) {
                 continue;
             }
             $this->setAttribute($key, trim(Mesour\Components\Utils\Helpers::parseValue($value, $data)));
         }
     }
     foreach ($this->attributes as $key => $value) {
         if (!$isDisabled && $value instanceof Mesour\Components\Link\IUrl) {
             $this->setAttribute($key, $value->create($data));
         } elseif ($isDisabled && $value instanceof Mesour\Components\Link\IUrl) {
             $this->removeAttribute($key);
             continue;
         }
     }
     if ($isDisabled) {
         $this->removeAttribute('onclick');
         $this->setAttribute('class', 'disabled', true);
     }
     return $this->attributes;
 }
예제 #2
0
파일: Date.php 프로젝트: mesour/filter
 public function __construct($name = null, Mesour\Components\ComponentModel\IContainer $parent = null)
 {
     parent::__construct($name, $parent);
     $attributes = $this->getOption(self::WRAPPER, 'attributes');
     $attributes['data-type'] = 'date';
     $this->setOption(self::WRAPPER, $attributes, 'attributes');
     $oneDay = 60 * 60 * 24;
     $quarter = $this->dateQuarter();
     $data = ['YESTERDAY' => date('Y-m-d', strtotime('yesterday midnight')), 'TODAY' => date('Y-m-d', strtotime('today midnight')), 'TOMORROW' => date('Y-m-d', strtotime('tomorrow midnight')), 'LAST_WEEK_FIRST' => date('Y-m-d', ($lastWeekMonday = strtotime('monday', strtotime('last week'))) - $oneDay), 'LAST_WEEK_SECOND' => date('Y-m-d', $lastWeekMonday + 7 * $oneDay), 'THIS_WEEK_FIRST' => date('Y-m-d', ($thisWeekMonday = strtotime('last monday midnight')) - $oneDay), 'THIS_WEEK_SECOND' => date('Y-m-d', $thisWeekMonday + 7 * $oneDay), 'NEXT_WEEK_FIRST' => date('Y-m-d', $thisWeekMonday + 7 * $oneDay - $oneDay), 'NEXT_WEEK_SECOND' => date('Y-m-d', $thisWeekMonday + 14 * $oneDay), 'LAST_MONTH_FIRST' => date('Y-m-d', strtotime(date('1-n-Y', $lastMonth = strtotime('last month'))) - $oneDay), 'LAST_MONTH_SECOND' => date('Y-m-d', strtotime(date('t-n-Y', $lastMonth)) + $oneDay), 'THIS_MONTH_FIRST' => date('Y-m-d', strtotime(date('1-n-Y')) - $oneDay), 'THIS_MONTH_SECOND' => date('Y-m-d', strtotime(date('t-n-Y')) + $oneDay), 'NEXT_MONTH_FIRST' => date('Y-m-d', strtotime(date('1-n-Y', $nextMonth = strtotime('next month'))) - $oneDay), 'NEXT_MONTH_SECOND' => date('Y-m-d', strtotime(date('t-n-Y', $nextMonth)) + $oneDay), 'LAST_QUARTER_FIRST' => date('Y-m-d', $this->getStartTimestampForQuarter($quarter - 1 < 1 ? 4 : $quarter - 1, $quarter - 1 < 1 ? date('Y', strtotime('last year')) : date('Y')) - $oneDay), 'LAST_QUARTER_SECOND' => date('Y-m-d', $this->getEndTimestampForQuarter($quarter - 1 < 1 ? 4 : $quarter - 1, $quarter - 1 < 1 ? date('Y', strtotime('last year')) : date('Y')) + $oneDay), 'THIS_QUARTER_FIRST' => date('Y-m-d', $this->getStartTimestampForQuarter($quarter) - $oneDay), 'THIS_QUARTER_SECOND' => date('Y-m-d', $this->getEndTimestampForQuarter($quarter) + $oneDay), 'NEXT_QUARTER_FIRST' => date('Y-m-d', $this->getStartTimestampForQuarter($quarter + 1 > 4 ? 1 : $quarter + 1, $quarter + 1 > 4 ? date('Y', strtotime('next year')) : date('Y')) - $oneDay), 'NEXT_QUARTER_SECOND' => date('Y-m-d', $this->getEndTimestampForQuarter($quarter + 1 > 4 ? 1 : $quarter + 1, $quarter + 1 > 4 ? date('Y', strtotime('next year')) : date('Y')) + $oneDay), 'LAST_YEAR_FIRST' => date('Y-m-d', strtotime(date('1-1-Y', $nextYear = strtotime('last year'))) - $oneDay), 'LAST_YEAR_SECOND' => date('Y-m-d', strtotime(date('31-12-Y', $nextYear)) + $oneDay), 'THIS_YEAR_FIRST' => date('Y-m-d', strtotime(date('1-1-Y')) - $oneDay), 'THIS_YEAR_SECOND' => date('Y-m-d', strtotime(date('31-12-Y')) + $oneDay), 'NEXT_YEAR_FIRST' => date('Y-m-d', strtotime(date('1-1-Y', strtotime('next year'))) - $oneDay), 'NEXT_YEAR_SECOND' => date('Y-m-d', strtotime(date('31-12-Y', strtotime('next year'))) + $oneDay)];
     foreach ($this->filters as $currentId => $filter) {
         if (isset($filter['type']) && is_array($filter['type'])) {
             foreach ($filter['type'] as $currentInnerId => $currentFilter) {
                 if (isset($currentFilter['attributes'])) {
                     foreach ($currentFilter['attributes'] as $key => $value) {
                         $this->filters[$currentId]['type'][$currentInnerId]['attributes'][$key] = Mesour\Components\Utils\Helpers::parseValue($value, $data);
                     }
                 }
             }
         } elseif (!isset($filter['type'])) {
             if (isset($filter['attributes'])) {
                 foreach ($filter['attributes'] as $key => $value) {
                     $this->filters[$currentId]['attributes'][$key] = Mesour\Components\Utils\Helpers::parseValue($value, $data);
                 }
             }
         }
     }
 }
예제 #3
0
파일: Url.php 프로젝트: mesour/components
 /**
  * @param array $data
  * @return string
  */
 public function create($data = [])
 {
     if (count($data) > 0) {
         foreach ($this->args as $key => $value) {
             $this->args[$key] = Mesour\Components\Utils\Helpers::parseValue($value, $data);
         }
     }
     return $this->createUrl();
 }
예제 #4
0
파일: Button.php 프로젝트: mesour/button
 public function create()
 {
     parent::create();
     $wrapper = $this->getControlPrototype();
     $oldWrapper = clone $wrapper;
     foreach ($oldWrapper->attrs as $key => $attr) {
         if (is_object($attr)) {
             $oldWrapper->attrs[$key] = clone $attr;
         }
     }
     if ($this->hasLeftIcon()) {
         $oldLeftIcon = clone $this->getLeftIcon();
     }
     if ($this->hasRightIcon()) {
         $oldRightIcon = clone $this->getRightIcon();
     }
     $this->onRender($this);
     $optionData = $this->getOption(self::DEFAULTS);
     if (!$this->isAllowed()) {
         $this->setDisabled(true);
     }
     foreach ($this->getOption(self::WRAPPER, 'attributes') as $key => $value) {
         if ($value instanceof Mesour\Components\Link\IUrl) {
             continue;
         }
         if (!$this->hasAttribute($key) || $this->getAttribute($key, false) !== false) {
             $value = trim(Mesour\Components\Utils\Helpers::parseValue($value, $optionData));
             if ($this->hasAttribute($key)) {
                 $value .= ' ' . $this->getAttribute($key);
             }
             $this->setAttribute($key, $value);
         }
     }
     if (!is_null($this->className)) {
         $this->setAttribute('class', $this->className === '' ? false : $this->className);
     }
     $this->getAttributes($this->isDisabled());
     if ($this->hasLeftIcon()) {
         $leftIcon = $this->getLeftIcon();
         $leftIcon->setOption('data', $this->getOption('data'));
         $wrapper->add($leftIcon->create());
         if (strlen($this->text) > 0) {
             $wrapper->add('&nbsp;');
         }
         if (isset($oldLeftIcon)) {
             unset($this['leftIcon']);
             $this['leftIcon'] = $oldLeftIcon;
         }
     }
     if ($this->text) {
         $wrapper->add($this->getTranslator()->translate($this->text));
     }
     if ($this->html) {
         $wrapper->add($this->html);
     }
     if ($this->hasRightIcon()) {
         $rightIcon = $this->getRightIcon();
         $rightIcon->setOption('data', $this->getOption('data'));
         if (strlen($this->text) > 0) {
             $wrapper->add('&nbsp;');
         }
         $wrapper->add($rightIcon->create());
         if (isset($oldRightIcon)) {
             unset($this['rightIcon']);
             $this['rightIcon'] = $oldRightIcon;
         }
     }
     $this->setHtmlElement($oldWrapper);
     return $wrapper;
 }
예제 #5
0
 public function create()
 {
     parent::create();
     $id = $this->getRandomStringGenerator()->generate();
     $wrapper = $this->getControlPrototype();
     $oldWrapper = clone $wrapper;
     $menu = $this->getMenuPrototype();
     $oldMenu = clone $menu;
     $this->onRender($this);
     $optionData = $this->getOption(self::DEFAULTS);
     foreach ($this->getOption(self::WRAPPER, 'attributes') as $key => $value) {
         if (!$wrapper->{$key} && $wrapper->{$key} !== false) {
             $menu->addAttributes([$key => trim(Mesour\Components\Utils\Helpers::parseValue($value, $optionData))]);
         }
     }
     $main = $this->getMainButton();
     $main->setOption('data', $this->getOption('data'));
     $main->setAttribute('id', $id);
     foreach ($this->getOption(self::MENU, 'attributes') as $key => $value) {
         if (!$menu->{$key}) {
             $menu->addAttributes([$key => Mesour\Components\Utils\Helpers::parseValue($value, $optionData)]);
         }
     }
     $menu->addAttributes(['aria-labelledby' => $id]);
     if ($this->hasPullRight) {
         $menu->addAttributes(['class' => $menu->class . ' dropdown-menu-right']);
     }
     if (!$this->isDisabled()) {
         $isFirst = true;
         $items = $this->getItems();
         foreach ($items as $key => $item) {
             if ($item instanceof Mesour\DropDown\Item) {
                 if (!$item->isAllowed()) {
                     continue;
                 }
                 $item->setOption('data', $this->getOption('data'));
                 $currentItem = $this->getMenuItemPrototype();
                 $currentItem->class($this->getOption(self::ITEMS, 'button_class'));
                 $currentItem->add($item->create());
                 $menu->add($currentItem);
                 $isFirst = false;
             } else {
                 $isNext = $this->isSomeNext($items, $key + 1);
                 if (isset($items[$key + 1]) && $isNext) {
                     $isNext = $this->isSomeNext($items, $key + 1);
                     $menu->add($item);
                     $isFirst = false;
                 }
                 if (!$isNext && ($this->isDivider($items[$key]) && !$isFirst) && $this->isHeader($items[$key + 1]) && (isset($items[$key + 2]) && $this->isSomeNext($items, $key + 2))) {
                     $menu->add($item);
                     $isFirst = false;
                 }
             }
         }
         if ($isFirst) {
             $main->setDisabled();
         }
     } else {
         $main->setDisabled();
     }
     $wrapper->add($main->create()->add($this->getOption(self::CARET)));
     $wrapper->add($menu);
     $out = $wrapper;
     $this->menu = $oldMenu;
     $this->setHtmlElement($oldWrapper);
     return $out;
 }