validator = $validator; $this->message = new StaticItem(''); // must create to compare in items } /** * remove all items from menu and save them * * @param [type] $menu * */ private function clear(&$menu) { $this->items = $menu->getItems(); foreach($menu->getItems() as $item) { $menu->removeItem($item); } } /** * add staticItem after item * * @param [type] $menu * @param [type] $after * @param [type] $target * */ private function addAfter(&$menu, $after, $target) { $this->clear($menu); foreach($this->items as $item) { $menu->addItem($item); if ($after === $item) { $menu->addItem($target, true); } } } /** * remove staticItem * * * @param [type] $menu [description] * @param [type] $target [description] * */ private function remove(&$menu, $target) { $this->clear($menu); foreach($this->items as $item) { if ($item === $target) { continue; } $menu->addItem($item); } } /** * validate, * if failed show staticItem with errors, * if not remove staticItem if found * * @param [type] $menu * @param [type] $item * @param [type] $data * */ public function validate(&$menu, $item, $data) { try { $this->validator->assert($data); } catch(NestedValidationException $exception) { $errors = $exception->getMessages(); } if (isset($errors)) { // @TODO use ColorUtil $this->message->setText("\033[33m"."\xE2\x9A\xA0 ".join(' ', $errors)); $this->addAfter($menu, $item, $this->message); } else { $this->remove($menu, $this->message); } } }