Example #1
0
 /**
  * Im Unterschied zu getUpdateMask() liefert diese Methode eine Tabelle in der Direkt alle Felder Eingabefelder sind, 
  *  somit kann man direkt mehrere Zeilen auf einmal bearbeiten. 
  */
 function getUpdateAllMask()
 {
     $tNames = array();
     $colNames = array();
     $i = 0;
     foreach ($this->COLNAMES as $colName) {
         if (!$this->isNoUpdateCol($colName)) {
             $lbl = "";
             if ($i < count($this->LABELS)) {
                 $lbl = $this->LABELS[$i];
             } else {
                 $lbl = $colName;
             }
             array_push($tNames, $lbl);
             array_push($colNames, $colName);
         }
         $i++;
     }
     $deleteMask = null;
     if ($this->isDeleteInUpdate()) {
         $deleteMask = !$this->doDeleteFromUpdatemask() ? null : $this->doDeleteFromUpdatemask();
         // Damit die Spalte mit dem Entfernen Button
         // zur Verfügung steht, in Arrays einbinden.
         array_push($colNames, "entfernen");
         array_push($tNames, "entfernen");
     }
     $table = new Table($tNames);
     if (count($this->COLSIZES) > 0) {
         $table->setColSizes($this->COLSIZES);
     }
     $table->setHeadEnabled(true);
     $table->setBackgroundColorChange(true);
     if ($this->WIDTH > 0) {
         $table->setWidth($this->WIDTH);
     }
     if ($this->HEIGHT > 0) {
         $table->setHeight($this->HEIGHT);
     }
     if ($this->BORDER != null && strlen($this->BORDER) > 0) {
         $table->setBorder($this->BORDER);
     }
     if ($this->PADDING >= 0) {
         $table->setPadding($this->PADDING);
     }
     if ($this->HEAD_ENABLED) {
         $table->setHeadEnabled($this->HEAD_ENABLED);
     }
     if ($this->SPACING >= 0) {
         $table->setSpacing($this->SPACING);
     }
     if ($this->XPOS > 0 && $this->YPOS > 0) {
         $table->setXPos($this->XPOS);
         $table->setYPos($this->YPOS);
     }
     //---------------------------------------------------
     // gesamte Tabelle einlesen um Feldtypen zu ermitteln
     //---------------------------------------------------
     $cns = "";
     foreach ($colNames as $cn) {
         if (strpos(" " . $this->COLNAMESTRING, $cn) > 0) {
             $cns .= $cns == "" ? $cn : "," . $cn;
         }
     }
     $stmnt = "SELECT " . $cns . " FROM " . $this->TABLENAME . " LIMIT 1 ";
     $result = $this->DBCONNECT->executeQuery($stmnt);
     //---------------------------------------------------
     // ROWS in Table aufnehmen
     //---------------------------------------------------
     $dbComboArrays = array();
     $bgCtr = 1;
     for ($ir = 1; $ir <= count($this->ROWS); $ir++) {
         $r = $table->createRow();
         $r->setStyle("padding", "5px 5px");
         $rowId = $this->ROWS[$ir]->getAttribute(count($this->COLNAMES));
         $r->setBackgroundColor($_SESSION['config']->COLORS['Tabelle_Hintergrund_' . $bgCtr]);
         if ($bgCtr == 1) {
             $bgCtr = 2;
         } else {
             $bgCtr = 1;
         }
         //---------------------------------------------------
         // SPALTEN aufbauen
         //---------------------------------------------------
         for ($ia = 0; $ia < count($this->COLNAMES); $ia++) {
             $row = $this->ROWS[$ir];
             $t = "";
             $fieldName = mysql_field_name($result, $ia);
             $fieldLen = 30;
             if (!$this->isNoUpdateCol($fieldName)) {
                 $maxLen = mysql_field_len($result, $ia);
                 if ($maxLen < $fieldLen) {
                     $fieldLen = $maxLen;
                 }
                 $lookups = getLookupWerte($_SESSION['config']->DBCONNECT, $this->TABLENAME, $fieldName);
                 if (mysql_num_rows($lookups) > 0) {
                     $t = new LookupCombo($_SESSION['config']->DBCONNECT, $fieldName . $rowId, $this->TABLENAME, $fieldName, $row->getNamedAttribute($fieldName));
                 } else {
                     if ($this->isDbComboSet($this->TABLENAME, $fieldName)) {
                         // Wenn DbCombo definiert wurde wird die Combobox zur Spalte angezeigt
                         //Wenn die Combobox noch nicht erzeugt wurde, erzeugen.
                         if (!isset($dbComboArrays[$this->TABLENAME . $colNames[$ia]])) {
                             $dbComboArrays[$this->TABLENAME . $colNames[$ia]] = getDbComboArray($this->TABLENAME, $colNames[$ia], $this->ROWS[$ir]);
                         }
                         $dbCombo = $dbComboArrays[$this->TABLENAME . $colNames[$ia]];
                         if (count($dbCombo) > 0) {
                             $default = $row->getAttribute($ia);
                             if (!existsKeyInArray($default, $dbCombo)) {
                                 $default = null;
                             }
                             $t = new ComboBox($fieldName . $rowId, $dbCombo, $default);
                         }
                     } else {
                         if (mysql_field_type($result, $ia) == "blob") {
                             $t = new TextArea($fieldName . $rowId, $row->getNamedAttribute($colNames[$ia]), round(70 / count($this->COLNAMES), 0), 4);
                         } else {
                             if (strpos(mysql_field_flags($result, $ia), "enum") > 0) {
                                 $ev = $this->getEnumValues($fieldName);
                                 if (count($ev) == 2 && (in_array('J', $ev) && in_array('N', $ev))) {
                                     $t = new Checkbox($fieldName . $rowId);
                                     if ($row->getNamedAttribute($colNames[$ia]) == "J") {
                                         $t->setSelected(true);
                                     }
                                 } else {
                                     $t = new ComboBox($fieldName . $rowId, $this->getComboboxEnumArray($fieldName));
                                 }
                             } else {
                                 if (mysql_field_type($result, $ia) == "int") {
                                     $t = new TextField($fieldName . $rowId, $row->getNamedAttribute($colNames[$ia]), $fieldLen, $maxLen);
                                 } else {
                                     if (mysql_field_type($result, $ia) == "date") {
                                         //$t = new TextField($fieldName.$rowId,$row->getNamedAttribute($colNames[$ia]),  $tfWidth, mysql_field_len ( $result, $ia ) );
                                         $val = $row->getNamedAttribute($colNames[$ia]);
                                         $t = new DateTextfield($fieldName . $rowId, $val);
                                     } else {
                                         if (mysql_field_type($result, $ia) == "timestamp") {
                                             $t = new TextField($fieldName . $rowId, $row->getNamedAttribute($colNames[$ia]), $fieldLen, $maxLen);
                                         } else {
                                             $t = new TextField($fieldName . $rowId, $row->getNamedAttribute($colNames[$ia]), $fieldLen, $maxLen);
                                         }
                                     }
                                 }
                             }
                         }
                         $arrChk = array_search($fieldName, $this->READONLYCOLS);
                         if (strlen($arrChk) != 0) {
                             $t->setReadOnly(true);
                         }
                     }
                 }
                 // Eingabe-Objekt in Zeile einfügen
                 $r->setAttribute($ia, $t);
             } else {
                 $r->setAttribute($ia, "");
             }
         }
         // entfernen Button einfügen
         if ($this->isDeleteInUpdate()) {
             $btnDel = new Button("delete" . $rowId . $this->TABLENAME, "entfernen");
             $r->setAttribute(count($tNames) - 1, $btnDel);
         }
         $table->addRow($r);
     }
     // Speichern/Abbrechen Button einfügen
     $btnOk = new Button("DbTableUpdate" . $this->TABLENAME, "Speichern");
     $btnOkFake = new Button("DbTableUpdate" . $this->TABLENAME, "Speichern");
     $btnOkFake->setStyle("display", "none");
     $btnOkFake->setWidth(0);
     $btnOkFake->setHeight(0);
     $btnCancel = new Button("", "Abbrechen");
     $hidden = new Hiddenfield("UpdateAllMaskIsActive", "true");
     $form = new Form($_SERVER['SCRIPT_NAME']);
     $form->add($this->DEFAULT_HIDDEN_FIELDS);
     if ($deleteMask != null) {
         $form->add($deleteMask);
     }
     $form->add($btnOkFake);
     $form->add($this->getPageNavigation());
     $form->add($table);
     $form->add($btnOk);
     $form->add($btnCancel);
     $form->add($hidden);
     return $form;
 }
 /**
  * Return the FieldSet used to edit a dynamic template in the CMS.
  */
 function getCMSFields()
 {
     // // delete files button
     // if( $this->canEdit() ) {
     // 	$deleteButton = new InlineFormAction('deletemarked',_t('Folder.DELSELECTED','Delete selected files'), 'delete');
     // 	$deleteButton->includeDefaultJS(false);
     // } else {
     // 	$deleteButton = new HiddenField('deletemarked');
     // }
     // link file button
     if ($this->canEdit()) {
         $fileButtons = new CompositeField($linkFileButton = new InlineFormAction('linkfile', _t('DynamicTemplate.LINKFILE', 'Link file(s) from theme'), 'link'), $copyFileButton = new InlineFormAction('copyfile', _t('DynamicTemplate.COPYFILE', 'Copy file(s) from theme'), 'copy'), $newFileButton = new InlineFormAction('newfile', _t('DynamicTemplate.NEWFILE', 'New file'), 'newfile'));
         $linkFileButton->includeDefaultJS(false);
         $copyFileButton->includeDefaultJS(false);
         $newFileButton->includeDefaultJS(false);
     } else {
         $fileButtons = new HiddenField('linkfile');
     }
     $propButtons = new CompositeField();
     //		$propButtons->push($exportButton = new InlineFormAction('exporttemplate', _t('DynamicTemplate.EXPORTTEMPLATE', 'Export'), 'export'));
     //		$exportButton->includeDefaultJS(false);
     //		if ($this->canEdit()) {
     //			$propButtons->push($saveButton = new InlineFormAction('savetemplate', _t('DynamicTemplate.SAVETEMPLATE', 'Save'), 'save'));
     //			$saveButton->includeDefaultJS(false);
     //		}
     if (DynamicTemplateAdmin::tarball_available()) {
         $exportTarballButton = new InlineFormAction('exportastarball', _t('DynamicTemplate.EXPORT', 'Export as tarball'), 'exportastarball');
         $exportTarballButton->includeDefaultJS(false);
         $propButtons->push($exportTarballButton);
     }
     if (DynamicTemplateAdmin::zip_available()) {
         $exportZipButton = new InlineFormAction('exportaszip', _t('DynamicTemplate.EXPORT', 'Export as zip'), 'exportaszip');
         $exportZipButton->includeDefaultJS(false);
         $propButtons->push($exportZipButton);
     }
     //		$titleField = ($this->ID && $this->ID != "root") ? new TextField("Title", _t('Folder.TITLE', 'Title')) : new HiddenField("Title");
     $titleField = new TextField("Title", _t('Folder.TITLE', 'Title'));
     if (!$this->canEdit()) {
         $titleField->setReadOnly(true);
     }
     $nameField = new TextField("Name");
     if (!$this->canEdit()) {
         $titleField->setReadOnly(true);
     }
     $fields = new FieldList($rootTabSet = new TabSet("Root", new Tab("Properties", _t('DynamicTemplate.PROPERTIESTAB', 'Properties'), $titleField, new ReadonlyField("URL", _t('Folder.URL', 'URL')), new ReadonlyField("Created", _t('Folder.CREATED', 'First Uploaded')), new ReadonlyField("LastEdited", _t('Folder.LASTEDITED', 'Last Updated')), new HiddenField("ID"), new HiddenField("ClassName", null, "DynamicTemplate"), $propButtons), new Tab("Upload", _t('Folder.UPLOADTAB', "Upload"), new LabelField('UploadPrompt', _t('DynamicTemplate.UPLOADPROMPT', 'Upload files to your template. Uploads will automatically be added to the right place.')), $this->getUploadField())));
     // A DT can only have files if it has been saved at least once. This is also to avoid time out issue where DynamicTemplatesFileField::calc_tree
     // tries to find files from a DT with ID=0
     if ($this->ID) {
         $fileList = new DynamicTemplateFilesField("Files", "Files", $this);
         $rootTabSet->push(new Tab("Files", _t('Folder.FILESTAB', "Files"), $fileList, $fileButtons, new HiddenField("FileIDs"), new HiddenField("DestFolderID")));
     }
     if (!$this->canEdit()) {
         $fields->removeFieldFromTab("Root", "Upload");
     }
     $this->extend('updateCMSFields', $fields);
     Session::set("dynamictemplates_currentID", $this->ID);
     return $fields;
 }