Example #1
0
 /**
  * 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);
         }
     }
 }
Example #2
0
                $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;
Example #3
0
 /**
  * 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;
 }
Example #4
0
 /**
  * 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]);
 }
Example #5
0
 /**
  * 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;
     }
 }