/** * Load translations from a given path. * * @access private * @param string $path * @throws Exception\Fatal * @version 1.2.0-dev * @since 1.2.0-dev */ private function loadFiles($path) { $localePath = $path . DS . 'locale'; $langs = Router::getLangs(); if (file_exists($localePath)) { $scannedDir = \FileManager::scanDir($localePath, 0); foreach ($scannedDir as $dirId => &$file) { list($lang, $type) = explode('.', $file); // check language if (!in_array($lang, $langs)) { unset($scannedDir[$dirId]); continue; } // import data from single file switch ($type) { case 'json': $fileTranslations = static::importFileJson($localePath . DS . $file, $lang); break; default: $fileTranslations = []; } // count translations per type $appPart = NULL; if (strpos($path, PATH_FW) !== FALSE) { $appPart = 'fw'; } elseif (strpos($path, PATH_MODULES) !== FALSE) { $appPart = 'module'; } elseif (strpos($path, PATH_APP) !== FALSE) { $appPart = 'app'; } // do counting per app part $counting = 0; foreach ($fileTranslations as $context => $translation) { $counting += count($translation); } $temp =& $this->amountLoadedPerType[$appPart]; switch ($appPart) { case 'module': $module = str_replace(PATH_MODULES, '', $path); $temp[$module][$lang] = $counting; break; case 'app': case 'fw': $temp[$lang] = $counting; break; } // merge data $this->loadedContent = array_replace_recursive($this->loadedContent, $fileTranslations); } } }
$type = __('Modules'); break; } ?> <p><b><?php echo $type; ?> </b></p> <?php if ($part === 'module') { ?> <table class="table table-bordered table-hover"> <tr> <th>name</th> <?php foreach (\Plethora\Router::getLangs() as $lang) { ?> <th><?php echo $lang; ?> </th> <?php } ?> </tr> <?php foreach ($data as $module => $dataPerModule) { ?> <tr> <td><?php echo $module;
/** * Generate \Plethora\Form instance which is based on Model. * * @access public * @return Form * @since 1.0.0-alpha * @version 1.0.0-alpha */ public function generate() { $oConfigFromLocales = NULL; $aDefaultValues = []; $aFieldsFromConfigLocales = []; $oModel = $this->getModel(); $oMetadata = $oModel->getMetadata(); $oMetadataLocales = $oModel->getLocalesMetadata(); $bHasLocales = $oModel->hasLocales(); if ($this->getModel()->hasLocales()) { /* @var $oConfigFromLocales MConfig */ $oConfigFromLocales = call_user_func($this->getModel()->getLocalesClass() . '::getConfig'); $aFieldsFromConfigLocales = $oConfigFromLocales->getFieldsNames(); } $aFieldsFromConfig = array_unique(array_merge($this->getModel()->getConfig()->getFieldsNames(), $aFieldsFromConfigLocales)); // get all default values from model foreach ($aFieldsFromConfig as $sField) { $mValueFromForm = NULL; $sFieldModel = $oMetadata->getFieldName($sField); $sFieldLocales = $oMetadataLocales !== FALSE ? $oMetadataLocales->getFieldName($sField) : NULL; // associations fields from model if ($oMetadata->hasAssociation($sFieldModel)) { $mValuesFromModel = $this->getModel()->{$sFieldModel}; if ($mValuesFromModel !== NULL) { // persistend collection if ($mValuesFromModel instanceof ORM\PersistentCollection || $mValuesFromModel instanceof Doctrine\Common\Collections\ArrayCollection) { $aValuesToOverwrite = []; foreach ($mValuesFromModel as $oModelRow) { /* @var $oModelRow ModelCore */ $aValuesToOverwrite[] = $oModelRow; } $mValueFromForm = ['und' => $aValuesToOverwrite]; unset($aValuesToOverwrite); } else { $mValueFromForm = ['und' => [$mValuesFromModel]]; } } } elseif ($bHasLocales && $oMetadataLocales->hasAssociation($sFieldLocales)) { $aValuesInAllLangs = $this->getModel()->getLocales('all'); foreach ($aValuesInAllLangs as $oLocaleModel) { /* @var $oLocaleModel \Plethora\ModelCore\Locales */ $sLang = $oLocaleModel->getLanguage(); $mValuesFromModel = $oLocaleModel->{$sFieldLocales}; if ($mValuesFromModel !== NULL) { if ($mValuesFromModel instanceof ORM\PersistentCollection || $mValuesFromModel instanceof Doctrine\Common\Collections\ArrayCollection) { // persistend collection $aValuesToOverwrite = []; foreach ($mValuesFromModel as $oModelRow) { /* @var $oModelRow ModelCore */ $aValuesToOverwrite[] = $oModelRow; } $mValueFromForm[$sLang] = $aValuesToOverwrite; unset($aValuesToOverwrite); } else { // single associacion $mValueFromForm[$sLang] = [$mValuesFromModel]; } } } } elseif ($oMetadata->hasField($sFieldModel)) { $mValueFromModel = $this->getModel()->{$sFieldModel}; if ($mValueFromModel !== NULL) { $mValueFromForm = ['und' => is_array($mValueFromModel) ? $mValueFromModel : [$mValueFromModel]]; } unset($mValueFromModel); } elseif ($bHasLocales && $oMetadataLocales->hasField($sFieldLocales)) { $mValueFromForm = []; foreach (Router::getLangs() as $sLang) { $mValueFromForm[$sLang] = []; } foreach ($this->getModel()->getLocales('all') as $oLocales) { /* @var $oLocales \Plethora\ModelCore\Locales */ if ($oLocales->{$sField} !== NULL) { $mValueFromLocale = $oLocales->{$sFieldLocales}; $mValueFromForm[$oLocales->getLanguage()] = is_array($mValueFromLocale) ? $mValueFromLocale : [$oLocales->{$sField}]; unset($mValueFromLocale); } } } // set default values $aDefaultValues[$sField] = $mValueFromForm; // unset temporary variable unset($mValueFromForm); } // creating form object $oForm = new Form($this->getName() . '_form', $aDefaultValues); $oForm->setRelationWithModel($this->getModel()); // create list of fields if ($this->getConfig() !== NULL) { // limit fields to particular list if ($this->getConfig()->getFieldsRestriction() !== []) { $aFieldsFromConfig = array_intersect($aFieldsFromConfig, $this->getConfig()->getFieldsRestriction()); } // remove particular fields from fields list if ($this->getConfig()->getFieldsToRemove() !== []) { foreach ($this->getConfig()->getFieldsToRemove() as $sFieldToRemove) { $mSearchedKey = array_search($sFieldToRemove, $aFieldsFromConfig); if ($mSearchedKey !== FALSE) { unset($aFieldsFromConfig[$mSearchedKey]); } } } } // create form fields and assign them to the form foreach ($aFieldsFromConfig as $sField) { $aMappings = []; $sFieldModel = $oMetadata->getFieldName($sField); $sFieldLocales = $oMetadataLocales !== FALSE ? $oMetadataLocales->getFieldName($sField) : NULL; // get form field if ($bHasLocales && $oConfigFromLocales->hasField($sField)) { $oField = $oConfigFromLocales->getField($sField); } else { $oField = $this->getModel()->getConfig()->getField($sField); } // if it's "add" form, remove "disabled" attribute if ($this->getName() === 'add' && $oField->isDisabled()) { $oField->getAttributes()->removeAttribute('disabled'); } // setting flag if particular field is multilanguaged if ($bHasLocales && !$oMetadata->hasField($sFieldModel) && ($oMetadataLocales->hasField($sFieldLocales) || $oMetadataLocales->hasAssociation($sFieldLocales))) { $oField->setMultilanguage(); } // add field to singleton form $oForm->addSingleton($oField); // adding new additional rules based on annotations from Doctrine ORM if ($oMetadata->hasField($sFieldModel)) { $aMappings = $oMetadata->getFieldMapping($sFieldModel); } elseif ($bHasLocales && $oMetadataLocales->hasField($sFieldLocales)) { $aMappings = $oMetadataLocales->getFieldMapping($sFieldLocales); } // add validation rules by mapping $this->addValidationByMapping($oField, $aMappings); } // alter form $this->alterForm($oForm); // make other, custom operations on Form object if ($oForm->isSubmitted()) { $this->beforeFormValidation($oForm); } // if form is submitted and valid if (!$this->getConfig()->isManualValidation() && $oForm->isSubmittedAndValid()) { $this->sendDataToModel($oForm); } return $oForm; }
/** * Render field and return its rendered value. * * @access public * @return string * @since 1.0.0-alpha * @version 1.0.0-alpha */ public function render() { $content = ''; $values = $this->getValue(); $langVersions = $this->isMultilanguage() ? Router::getLangs() : ['und']; $fieldDefaultId = $this->getAttributes()->getAttribute('id'); $fieldDefaultName = $this->getAttributes()->getAttribute('name'); // create all cases of this field's value foreach ($langVersions as $sLang) { $fieldValueContent = []; $langValues = Helper\Arrays::get($values, $sLang, []); $amountOfFieldValues = count($langValues); // check quantity of this field's value for particular lang if ($this->getQuantity() !== 0 && $this->getQuantity() < $amountOfFieldValues) { $amountOfFieldValues = $this->getQuantity(); } // if current amount of fields is below minimal quantity if ($amountOfFieldValues < $this->getQuantityMin()) { $amountOfFieldValues = $this->getQuantityMin(); } // if current amount of fields is higher than maximal quantity if ($this->getQuantityMax() > 0 && $amountOfFieldValues > $this->getQuantityMax()) { $amountOfFieldValues = $this->getQuantityMax(); } // container for one lang values $fieldSingleValue = View::factory('base/form/field_single_lang')->set('sLang', $sLang)->bind('oField', $this); // for each value number for ($i = 0; $i < $amountOfFieldValues; $i++) { $this->getAttributes()->setAttribute('id', $fieldDefaultId . '_' . $sLang . '_' . $i)->setAttribute('name', $fieldDefaultName . '[' . $sLang . '][' . $i . ']'); $this->renderSingleValue($fieldValueContent, $sLang, $i); } // prepend to field whole content $content .= $fieldSingleValue->bind('aLangValues', $fieldValueContent)->render(); } // field pattern if ($this->getQuantity() !== 1) { $this->getAttributes()->setAttribute('id', $fieldDefaultId . '_LANGUAGE_NUMBER')->setAttribute('name', $fieldDefaultName . '[LANGUAGE][NUMBER]'); $sPatternContent = $this->renderSingleValuePattern(); $sPattern = View::factory('base/form/field_single_value')->set('sLang', 'LANGUAGE')->set('sOneValueNumber', 'NUMBER')->bind('sOneValueContent', $sPatternContent)->bind('oField', $this)->render(); $this->getFormObject()->addFieldPattern($this->getName(), $sPattern); } // reset ID and NAME attributes $this->resetIdAttribute(); $this->resetNameAttribute(); // rendering base of field return View::factory($this->getViewBase())->render(['sContent' => $content, 'oField' => $this]); }
/** * Return Locale Model instance. * * @access public * @param string $sLanguage * @return array|ModelCore|NULL * @since 1.0.0-alpha * @version 1.0.0-alpha */ public function getLocales($sLanguage = NULL) { if (static::hasLocales()) { // if locales has no Models in it if (count($this->locales) === 0) { foreach (Router::getLangs() as $sLang) { $this->createNewLocale($sLang); } } // all languages if ($sLanguage === 'all') { // all languages return $this->locales === NULL ? [] : $this->locales; } else { if ($sLanguage === NULL) { // default language $sLanguage = Router::getLang(); } foreach ($this->locales as $oLocale) { /* @var $oLocale ModelCore\Locales */ if ($oLocale->getLanguage() === $sLanguage) { return $oLocale; } } // create new Locale, if do not exist return $this->createNewLocale($sLanguage); } } else { return NULL; } }