Пример #1
0
 /**
  * Returns the html of the entry.
  * @return string 
  */
 public function toHtml()
 {
     $this->html = '<form class="form-vertical" method="post">';
     foreach ($this->configurationHelper->getFieldList() as $fieldName) {
         $type = $this->configurationHelper->getFieldType($fieldName);
         $fieldClassName = '\\PvikAdminTools\\Library\\Fields\\' . $type;
         if (!class_exists($fieldClassName)) {
             throw new \Exception('PvikAdminTools: The type ' . $type . ' does not exists. Used for the field ' . $fieldName);
         }
         $field = new $fieldClassName($fieldName, $this->entity, $this->request, $this->validationState);
         /* @var $field \PvikAdminTools\Library\Fields\Base */
         if ($field->isVisibleSingle()) {
             if (isset($this->presetValues[strtolower($fieldName)])) {
                 $field->setPreset($this->presetValues[strtolower($fieldName)]);
             }
             $this->html .= $field->htmlSingle();
         }
     }
     $this->addHtmlSubmit();
     $this->html .= '</form>';
     if (!$this->isNewEntity() && $this->configurationHelper->hasForeignTables()) {
         $this->html .= '<div class="foreign-tables-field">';
         foreach ($this->configurationHelper->getForeignTables() as $foreignTable => $configuration) {
             $primaryKey = $this->entity->getPrimaryKey();
             $foreignKey = $configuration['ForeignKey'];
             $modelTable = ModelTable::get($foreignTable);
             $entityArray = $modelTable->loadAll();
             $entityArray = $entityArray->filterEquals($foreignKey, $primaryKey);
             $tableHtml = new \PvikAdminTools\Library\TableHtml($entityArray, $this->request);
             // saerch for fields that we don't need to show
             $foreignObjectFieldNames = array();
             $helper = $modelTable->getFieldDefinitionHelper();
             foreach ($helper->getFieldList() as $fieldName) {
                 // search for a foreign object that uses that refers to the original model
                 // we don't need to show this table column
                 if ($helper->isTypeForeignObject($fieldName)) {
                     if ($helper->getForeignKeyFieldName($fieldName) == $foreignKey) {
                         array_push($foreignObjectFieldNames, $fieldName);
                     }
                 }
             }
             $tableHtml->setHiddenFields($foreignObjectFieldNames);
             // set preset values
             $presetValues = array();
             foreach ($foreignObjectFieldNames as $foreignObjectFieldName) {
                 $presetValues[$foreignObjectFieldName] = $primaryKey;
             }
             $tableHtml->setNewButtonPresetValues($presetValues);
             if ($this->foreignTableButtonRedirectBackUrl != null) {
                 $tableHtml->setButtonRedirectBack($this->foreignTableButtonRedirectBackUrl);
             }
             $this->html .= '<div class="field">';
             $this->html .= '<label class="label-field">' . $foreignTable . '</label>';
             $this->html .= $tableHtml->toHtml();
             $this->html .= '</div>';
         }
         $this->html .= '</div>';
     }
     return $this->html;
 }
Пример #2
0
 /**
  *
  * @param string $fieldName
  * @param Entity $entity
  * @param ValidationState $validationState 
  */
 public function __construct($fieldName, Entity $entity, Request $request, ValidationState $validationState)
 {
     $this->fieldName = $fieldName;
     $this->entity = $entity;
     $this->modelTable = $this->entity->getModelTable();
     $this->request = $request;
     $this->fieldDefinitionHelper = $this->modelTable->getFieldDefinitionHelper();
     $this->configurationHelper = new \PvikAdminTools\Library\ConfigurationHelper();
     $this->configurationHelper->setCurrentTable($this->modelTable->getModelTableName());
     $this->validationState = $validationState;
     if ($this->entity->getPrimaryKey() == null || $this->entity->getPrimaryKey() == '') {
         $this->isNewEntity = true;
     } else {
         $this->isNewEntity = false;
     }
     $this->preset = '';
 }
Пример #3
0
 /**
  * Deletes the reference from entities to the object by the current foreign key for a field name
  * @param \Pvik\Database\ORM\Entity $object
  * @param string $fieldName
  */
 public function deleteForeignKeyReference(\Pvik\Database\ORM\Entity $object, $fieldName)
 {
     $helper = $this->modelTable->getFieldDefinitionHelper();
     $foreignModelTable = $helper->getModelTable($fieldName);
     //  get the key that refers to the foreign object (AuthorID  from a book)
     $foreignKey = $object->getFieldData($fieldName);
     $foreignObject = $foreignModelTable->getCache()->loadByPrimaryKey($foreignKey);
     // if object exist in cache and needs to be updated
     if ($foreignObject != null) {
         // look through foreign model
         $foreignHelper = $foreignModelTable->getFieldDefinitionHelper();
         foreach ($foreignHelper->getManyForeignObjectsFieldList() as $foreignModelTableFieldName) {
             // searching for a ManyForeignObjects field with ForeignKey reference to this field
             if ($foreignHelper->getModelTableName($foreignModelTableFieldName) == $this->modelTable->getModelTableName() && $foreignHelper->getForeignKeyFieldName($foreignModelTableFieldName) == $fieldName) {
                 // Author.Books.ForeignKey is AuthorID
                 $oldKeys = $foreignObject->getFieldData($foreignModelTableFieldName);
                 // delete from old keys
                 $foreignObject->setFieldData($foreignModelTableFieldName, str_replace($object->getPrimaryKey(), '', $oldKeys));
                 break;
             }
         }
     }
 }
Пример #4
0
 /**
  * Adds a table row to the html.
  * @param Entity $entity 
  */
 protected function addHtmlTableRow(Entity $entity)
 {
     $this->html .= '<tr>';
     $modelTable = $entity->getModelTable();
     foreach ($this->configurationHelper->getFieldList() as $fieldName) {
         if ($this->configurationHelper->showInOverView($fieldName) && !in_array($fieldName, $this->hiddenFields)) {
             $type = $this->configurationHelper->getFieldType($fieldName);
             $fieldClassName = 'PvikAdminTools\\Library\\Fields\\' . $type;
             if (!class_exists($fieldClassName)) {
                 throw new \Exception('PvikAdminTools: The type ' . $type . ' does not exists. Used for the field ' . $fieldName);
             }
             $field = new $fieldClassName($fieldName, $entity, $this->request, new ValidationState());
             /* @var $field PvikAdminToolsBaseField */
             $this->html .= '<td>' . $field->htmlOverview() . '</td>';
         }
     }
     if ($this->configurationHelper->hasForeignTables()) {
         foreach ($this->configurationHelper->getForeignTables() as $foreignTableName => $foreignTable) {
             if (isset($foreignTable['ShowCountInOverview']) && $foreignTable['ShowCountInOverview'] == true) {
                 // much faster than accessing view $entity->$foreignTableName->count
                 // this would load the entire entries
                 $this->html .= '<td>' . count($entity->getKeys(lcfirst($foreignTableName))) . '</td>';
             }
         }
     }
     // add options
     $this->html .= '<td class="options">[';
     $editButtonUrl = \Pvik\Core\Path::relativePath('~' . \Pvik\Core\Config::$config['PvikAdminTools']['Url'] . 'tables/' . strtolower($modelTable->getModelTableName()) . ':edit:' . $entity->getPrimaryKey() . '/');
     if ($this->buttonRedirectBack != null) {
         $editButtonUrl .= '?redirect-back-url=' . urlencode($this->buttonRedirectBack);
     }
     $this->html .= '<a href="' . $editButtonUrl . '">edit</a>|';
     $deleteButtonUrl = \Pvik\Core\Path::relativePath('~' . \Pvik\Core\Config::$config['PvikAdminTools']['Url'] . 'tables/' . strtolower($modelTable->getModelTableName()) . ':delete:' . $entity->getPrimaryKey() . '/');
     if ($this->buttonRedirectBack != null) {
         $deleteButtonUrl .= '?redirect-back-url=' . urlencode($this->buttonRedirectBack);
     }
     $this->html .= '<a href="' . $deleteButtonUrl . '" onclick="return confirm(\'Do you really want to delete this entry?\')">delete</a>';
     $this->html .= ']</td>';
     $this->html .= '</tr>';
 }