/** * Set the handler's error title. * * @param mixed $title The error title. * @return self */ public function setErrorTitle($title) { if (TranslationString::isTranslatable($title)) { $this->errorTitle = new TranslationString($title); } return $this; }
/** * @param string|string[] $name The name of the tag. * @return self chainable */ public function setName($name) { if (TranslationString::isTranslatable($name)) { $this->name = new TranslationString($name); } else { $this->name = null; } return $this; }
/** * Set the object's URL slug. * * @param mixed $slug The slug. * @return RoutableInterface Chainable */ public function setSlug($slug) { if (TranslationString::isTranslatable($slug)) { $this->slug = new TranslationString($slug); $values = $this->slug->all(); foreach ($values as $lang => $val) { $this->slug[$lang] = $this->slugify($val); } } else { /** @todo Hack used for regenerating route */ if (isset($_POST['slug'])) { $this->slug = []; } else { $this->slug = null; } } return $this; }
/** * Set the label for the file removal button. * * @param string|string[] $label The button label. * @return self */ public function setRemoveButtonLabel($label) { if (TranslationString::isTranslatable($label)) { $this->removeButtonLabel = new TranslationString($label); } else { $this->removeButtonLabel = null; } return $this; }
/** * Set the title for the file picker dialog. * * @param string|string[] $title The dialog title. * @return self */ public function setDialogTitle($title) { if (TranslationString::isTranslatable($title)) { $this->dialogTitle = new TranslationString($title); } else { $this->dialogTitle = null; } return $this; }
/** * @param mixed $notes The property notes. * @return PropertyInterface Chainable */ public function setNotes($notes) { if (TranslationString::isTranslatable($notes)) { $this->notes = new TranslationString($notes); } else { $this->notes = null; } return $this; }
/** * @param mixed $label The menu item label. * @return MenuItem Chainable */ public function setLabel($label) { if (TranslationString::isTranslatable($label)) { $this->label = new TranslationString($label); } return $this; }
/** * Set the sidemenu links. * * @param string $linkIdent The link identifier. * @param array|object $link The link object or structure. * @throws InvalidArgumentException If the link is invalid. * @return self */ public function addLink($linkIdent, $link) { if (!is_string($linkIdent) && !is_numeric($linkIdent)) { throw new InvalidArgumentException('Link identifier must be a string or '); } $objType = $this->sidemenu()->objType(); if (is_array($link)) { $active = true; $name = null; $url = null; if (isset($link['active'])) { $active = !!$link['active']; } if (isset($link['name']) && TranslationString::isTranslatable($link['name'])) { $name = new TranslationString($link['name']); } if (isset($link['url']) && TranslationString::isTranslatable($link['url'])) { $url = new TranslationString($link['url']); } if ($name === null && $url === null) { return $this; } $isSelected = $linkIdent === $objType; if ($isSelected) { $this->isSelected(true); } $this->links[$linkIdent] = ['active' => $active, 'name' => $name, 'url' => $url, 'selected' => $isSelected]; } else { throw new InvalidArgumentException(sprintf('Link must be an associative array, received %2$s', 'MenuItemInterface', is_object($link) ? get_class($link) : gettype($link))); } return $this; }
/** * Set the name of the language * * Optionally, set the name in other languages. * * The $name parameter accepts 3 types of arguments: * - object (TranslationStringInterface): The data will be copied from the object's. * - array: All languages available in the array. The format of the array should * be a hash in the `lang` => `string` format. * - string: The value will be assigned to the current language. * * @param TranslationString|array|string $name Language's name in one or more languages. * @return self */ public function setName($name) { if ($name instanceof TranslationStringInterface) { $config = $name->languages(); } elseif (is_array($name)) { $config = ['languages' => array_keys($name), 'default_language' => $this->ident()]; } else { $config = null; } $this->name = new TranslationString($name, $config); return $this; }
/** * Retrieve the title of the page. * * @return TranslationString|string|null */ public function title() { if (isset($this->title)) { return $this->title; } try { $config = $this->objCollectionDashboardConfig(); if (isset($config['title'])) { $this->title = new TranslationString($config['title']); return $this->title; } } catch (Exception $e) { $this->logger->error($e->getMessage()); } $model = $this->proto(); $metadata = $model->metadata(); $objLabel = null; if (!$objLabel && isset($metadata['admin']['lists'])) { $adminMetadata = $metadata['admin']; $listIdent = filter_input(INPUT_GET, 'collection_ident', FILTER_SANITIZE_STRING); if ($listIdent === false || $listIdent === null || $listIdent === '') { $listIdent = isset($adminMetadata['default_list']) ? $adminMetadata['default_list'] : ''; } if (isset($adminMetadata['lists'][$listIdent]['label'])) { $objLabel = $adminMetadata['lists'][$listIdent]['label']; if (TranslationString::isTranslatable($objLabel)) { $objLabel = new TranslationString($objLabel); } } } if (!$objLabel && isset($metadata['labels']['all_items'])) { $objLabel = $metadata['labels']['all_items']; if (TranslationString::isTranslatable($objLabel)) { $objLabel = new TranslationString($objLabel); } } if (!$objLabel) { $objType = isset($metadata['labels']['name']) ? $metadata['labels']['name'] : null; if (TranslationString::isTranslatable($objType)) { $objType = new TranslationString($objType); } $objLabel = new TranslationString(['en' => 'List: {{objType}}', 'fr' => 'Liste : {{objType}}']); if ($objType) { $objLabel = sprintf(str_replace('{{objType}}', '%s', $objLabel), $objType); } } if ($model && $model->view()) { $this->title = $model->render((string) $objLabel, $model); } else { $this->title = (string) $objLabel; } return $this->title; }
/** * Add a custom localization message. * * @param string $ident The message ID. * @param mixed $translations The message translations. * @throws InvalidArgumentException If the message ID is not a string or the translations are invalid. * @return self */ public function addLocalization($ident, $translations) { if (!is_string($ident)) { throw new InvalidArgumentException(sprintf('Translation key must be a string, received %s', is_object($ident) ? get_class($ident) : gettype($ident))); } if (!TranslationString::isTranslatable($translations)) { throw new InvalidArgumentException(sprintf('Invalid translations, received %s', is_object($ident) ? get_class($ident) : gettype($ident))); } $this->localizations[$ident] = new TranslationString($translations); return $this; }
/** * Default list actions behavior. * List actions should come from the collection data * pointed out by the collectionIdent. * It is still possible to completly override those * externally by setting the listActions with the * setListActions setter. * * @todo Convert to Charcoal\Ui\Menu\GenericMenu * @return array List actions. */ public function createListActions() { $collectionConfig = $this->collectionConfig(); $listActions = []; if (isset($collectionConfig['list_actions'])) { foreach ($collectionConfig['list_actions'] as $action) { if (isset($action['ident'])) { if ($action['ident'] === 'create' && !$this->isObjCreatable()) { continue; } } else { $action['ident'] = null; } if (isset($action['label']) && TranslationString::isTranslatable($action['label'])) { $action['label'] = new TranslationString($action['label']); } elseif ($action['ident']) { $action['label'] = ucwords(str_replace(['.', '_'], ' ', $action['ident'])); } else { continue; } if (isset($action['url']) && TranslationString::isTranslatable($action['url'])) { $action['url'] = new TranslationString($action['url']); foreach ($action['url']->all() as $lang => $value) { $action['url'][$lang] = $this->render($value); } } if (isset($action['is_button'])) { $action['isButton'] = !!$action['is_button']; } elseif (isset($action['isButton'])) { $action['is_button'] = !!$action['isButton']; } if (!isset($action['button_type'])) { $action['button_type'] = $action['ident'] === 'create' ? 'info' : 'default'; } $listActions[] = $action; } } return $listActions; }
/** * */ public function testSetValStringDefaultLanguage() { $obj = new TranslationString(null, ['languages' => ['en', 'fr']]); $obj->setCurrentLanguage('en'); $obj->setVal('foo'); $obj->setCurrentLanguage('fr'); $obj->setVal('bar'); $this->assertEquals(['en' => 'foo', 'fr' => 'bar'], $obj->all()); }
/** * Retrieve the title of the page. * * @return TranslationString|string|null */ public function title() { if (isset($this->title)) { return $this->title; } try { $config = $this->objEditDashboardConfig(); if (isset($config['title'])) { $this->title = new TranslationString($config['title']); return $this->title; } } catch (Exception $e) { $this->logger->error($e->getMessage()); } $obj = $this->obj(); $objId = $this->objId(); $objType = $this->objType(); $metadata = $obj->metadata(); $objLabel = null; if (!$objLabel && isset($metadata['admin']['forms'])) { $adminMetadata = $metadata['admin']; $formIdent = filter_input(INPUT_GET, 'form_ident', FILTER_SANITIZE_STRING); if ($formIdent === false || $formIdent === null || $formIdent === '') { $formIdent = isset($adminMetadata['default_form']) ? $adminMetadata['default_form'] : ''; } if (isset($adminMetadata['forms'][$formIdent]['label'])) { $objLabel = $adminMetadata['forms'][$formIdent]['label']; if (TranslationString::isTranslatable($objLabel)) { $objLabel = new TranslationString($objLabel); } } } if (!$objLabel && isset($metadata['labels']['edit_item'])) { $objLabel = $metadata['labels']['edit_item']; if (TranslationString::isTranslatable($objLabel)) { $objLabel = new TranslationString($objLabel); } } if (!$objLabel && isset($metadata['labels']['edit_model'])) { $objLabel = $metadata['labels']['edit_model']; if (TranslationString::isTranslatable($objLabel)) { $objLabel = new TranslationString($objLabel); } } if (!$objLabel) { $objType = isset($metadata['labels']['singular_name']) ? $metadata['labels']['singular_name'] : null; if (TranslationString::isTranslatable($objType)) { $objType = new TranslationString($objType); } if ($objId) { $objLabel = new TranslationString(['en' => 'Edit: {{objType}} #{{id}}', 'fr' => 'Modifier : {{objType}} #{{id}}']); } else { $objLabel = new TranslationString(['en' => 'Create: {{objType}}', 'fr' => 'Créer : {{objType}}']); } if ($objType) { $objLabel = sprintf(str_replace('{{objType}}', '%s', $objLabel), $objType); } } if ($obj && $obj->view()) { $this->title = $obj->render((string) $objLabel, $obj); } else { $this->title = (string) $objLabel; } return $this->title; }
/** * @return mixed */ public function searchable() { if ($this->searchable === null) { if (isset($this->dualSelectOptions['searchable'])) { $searchable = $this->dualSelectOptions['searchable']; $label = new TranslationString(['en' => 'Search…', 'fr' => 'Recherche…']); $defaultOptions = ['left' => ['placeholder' => $label], 'right' => ['placeholder' => $label]]; if (is_bool($searchable) && $searchable) { $searchable = $defaultOptions; } elseif (is_array($searchable)) { $lists = ['left', 'right']; foreach ($lists as $ident) { if (isset($searchable[$ident]['placeholder'])) { $placeholder = $searchable[$ident]['placeholder']; } elseif (isset($searchable['placeholder'])) { $placeholder = $searchable['placeholder']; } if (isset($placeholder) && TranslationString::isTranslatable($placeholder)) { $searchable[$ident]['placeholder'] = new TranslationString($placeholder); } else { $searchable[$ident]['placeholder'] = $label; } } } else { $searchable = false; } } else { $searchable = false; } $this->searchable = $searchable; } return $this->searchable; }
/** * Set the form control's placeholder. * * A placeholder is a hint to the user of what can be entered * in the property control. * * @param mixed $placeholder The placeholder attribute. * @return AbstractPropertyInput Chainable */ public function setPlaceholder($placeholder) { if (TranslationString::isTranslatable($placeholder)) { $this->placeholder = new TranslationString($placeholder); $this->placeholder->isRendered = false; } return $this; }