/** * @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; }
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); } } } } }
/** * @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(); }
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(' '); } 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(' '); } $wrapper->add($rightIcon->create()); if (isset($oldRightIcon)) { unset($this['rightIcon']); $this['rightIcon'] = $oldRightIcon; } } $this->setHtmlElement($oldWrapper); return $wrapper; }
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; }