示例#1
0
 protected function createDataDescription()
 {
     $result = parent::createDataDescription();
     if ($result->isEmpty()) {
         $result->load(['title' => ['type' => FieldDescription::FIELD_TYPE_STRING], 'message' => ['type' => FieldDescription::FIELD_TYPE_STRING], "hint" => ['type' => FieldDescription::FIELD_TYPE_TEXT]]);
     }
     return $result;
 }
示例#2
0
 /**
  * @copydoc DataSet::createDataDescription
  */
 protected function createDataDescription()
 {
     $result = parent::createDataDescription();
     foreach ($result as $fieldMetaData) {
         $keyInfo = $fieldMetaData->getPropertyValue('key');
         $values = false;
         //Если это внешний ключ и не в режиме списка
         if (is_array($keyInfo)) {
             switch ($fieldMetaData->getType()) {
                 case FieldDescription::FIELD_TYPE_SELECT:
                     $fkTableName = $keyInfo['tableName'];
                     $fkKeyName = $keyInfo['fieldName'];
                     //загружаем информацию о возможных значениях
                     $values = $this->getFKData($fkTableName, $fkKeyName);
                     break;
                 case FieldDescription::FIELD_TYPE_MULTI:
                     $m2mTableName = $keyInfo['tableName'];
                     $m2mPKName = $keyInfo['fieldName'];
                     //Если существует таблица связанная
                     if ($this->dbh->tableExists($m2mTableName)) {
                         $tableInfo = $this->dbh->getColumnsInfo($m2mTableName);
                         unset($tableInfo[$m2mPKName]);
                         $m2mValueFieldInfo = current($tableInfo);
                         if (isset($m2mValueFieldInfo['key']) && is_array($m2mValueFieldInfo)) {
                             $values = $this->getFKData($m2mValueFieldInfo['key']['tableName'], $m2mValueFieldInfo['key']['fieldName']);
                         }
                     }
                     //если нет значит это забота программиста наполнить значениями
                     break;
                 case FieldDescription::FIELD_TYPE_LOOKUP:
                     if ($editor = $fieldMetaData->getPropertyValue('editor')) {
                         $url = $fieldMetaData->getName() . '-' . $editor;
                     } else {
                         $url = $fieldMetaData->getName();
                     }
                     //Problem with safari where urlencoded backslash(%5C) converted into backslash
                     $fieldMetaData->setProperty('url', '/' . str_replace('\\', '.', $url) . '/lookup/');
                     $table = $keyInfo['tableName'];
                     if ($this->dbh->tableExists($table)) {
                         if ($t = $this->dbh->getTranslationTablename($table)) {
                             $table = $t;
                             unset($t);
                         }
                         $valueFieldName = array_reduce(array_keys($this->dbh->getColumnsInfo($table)), function ($str, $row) {
                             if (strpos($row, '_name')) {
                                 return $row;
                             }
                             return $str;
                         });
                         $fieldMetaData->setProperty('value_field', $valueFieldName);
                         $fieldMetaData->setProperty('value_table', $table);
                         $fieldMetaData->setProperty('key_field', $keyInfo['fieldName']);
                     }
                     break;
             }
             if (!empty($values)) {
                 call_user_func_array([$fieldMetaData, 'loadAvailableValues'], $values);
             }
         }
     }
     return $result;
 }