public function addField(FlexiTableFieldObject $oField) { if ($this->existsField($oField->getName())) { throw new Exception("Field already exists: " . $oField->getName()); } $this->addChild($oField, "field"); }
/** * upload a field * @param FlexiTableFieldObject $oField * @param array $oStore * @param array $oRow (new form row) * @param array $oCurrentRow (old row) */ public function doUploadField(FlexiTableFieldObject $oField, &$oStore, &$oForm, $oCurrentRow) { $sName = $oField->getName(); $sSavePath = is_null($oField->savepath) ? FlexiFileUtil::getFullUploadPath("media/libraries") : $oField->savepath; //relative path is to cut out prefix of path before saving to field $sFullRelativeBasePath = empty($oField->savepath) ? "" : realpath($oField->savepath); //if multiple file //var_dump($oField->type); if ($oField->type == "multiimage-text") { $aCurrentFile = array(); if (!empty($oCurrentRow[$sName])) { $aCurrentFile = explode($oField->uploadseparator, $oCurrentRow[$sName]); } $aResultFile = array(); //var_dump($oForm); for ($c = 1; $c <= $oField->uploadcount; $c++) { if (isset($oForm[$sName . "_" . $c])) { $sNewFile = "media." . FlexiStringUtil::createRandomAlphaNumeric() . "_" . time(); $aStatus = FlexiFileUtil::storeUploadFile($oForm[$sName . "_" . $c], $sSavePath, $sNewFile . "."); $this->onGetUploadFileName($sSaveDir, $sNewFile); if ($aStatus["status"]) { //replace photo if already exists if (!empty($aCurrentFile[$c - 1])) { unlink(FlexiFileUtil::getFullPathFrom($aCurrentFile[$c - 1], $sFullRelativeBasePath)); } if ($oField->isUploadImage() && !empty($oField->maxwidth) || !empty($oField->maxheight)) { FlexiImageUtil::imageResize($oField->maxwidth, $oField->maxheight, $aStatus["path"]); } //if savepath not declared, full path from root is saved // if declared, only save filename // "" => use base root path //resize image based on max width, height //FlexiImageUtil::imageResize(345, 287, $aStatus["path"]); $aResultFile[$c - 1] = FlexiFileUtil::getRelativePathFrom($aStatus["path"], $sFullRelativeBasePath); } else { //No file $aResultFile[$c - 1] = $aCurrentFile[$c - 1]; } } } //for each file $oStore[$sName] = implode($oField->uploadseparator, $aResultFile); } else { //single file upload if (!isset($oForm[$sName])) { return; } //isupload form, presume if (is_array($oForm[$sName])) { $sNewFile = "media." . FlexiStringUtil::createRandomAlphaNumeric() . "_" . time(); //var_dump($oRow[$sName]); $aStatus = FlexiFileUtil::storeUploadFile($oForm[$sName], $sSavePath, $sNewFile . "."); $this->onGetUploadFileName($sSaveDir, $sNewFile); if ($aStatus["status"]) { //replace photo if already exists if (!empty($oCurrentRow[$sName])) { $sOldPath = FlexiFileUtil::getRelativePathFrom($oCurrentRow[$sName], $sFullRelativeBasePath); unlink($sOldPath); } if ($oField->isUploadImage() && !empty($oField->maxwidth) || !empty($oField->maxheight)) { FlexiImageUtil::imageResize($oField->maxwidth, $oField->maxheight, $aStatus["path"]); } //if savepath not declared, full path from root is saved // if declared, only save filename // "" => use base root path //resize image based on max width, height //FlexiImageUtil::imageResize(345, 287, $aStatus["path"]); $oStore[$sName] = FlexiFileUtil::getRelativePathFrom($aStatus["path"], $sFullRelativeBasePath); } else { //No file } } else { if (is_string($oForm[$sName])) { //could be manually saved or from old path $sNewFile = $oForm[$sName]; //delete old file if different from new file if (!empty($oCurrentRow[$sName]) && !empty($sNewFile)) { $sOldPath = FlexiFileUtil::getFullPathFrom($oCurrentRow[$sName], $sFullRelativeBasePath); $sNewPath = FlexiFileUtil::getFullPathFrom($sNewFile, $sFullRelativeBasePath); $sOldPathReal = realpath($sOldPath); if (!empty($sOldPathReal) && $sOldPathReal != realpath($sNewPath)) { unlink($sOldPathReal); } } $oStore[$sName] = FlexiFileUtil::getRelativePathFrom($sNewFile, $sFullRelativeBasePath); } else { throw new Exception("Invalid upload value: " . $oForm[$sName]); } } //else error } //if single file }
public function getFieldInput(FlexiTableFieldObject $oField, $oRow) { $sName = $oField->getName(); $aResult = array("#name" => $this->getFieldInputName($sName), "#id" => $this->getFieldInputName($sName) . "_" . FlexiStringUtil::createRandomPassword(8), "#title" => $oField->label, "#required" => $oField->cannull == 1 ? false : true, "#default_value" => $oField->getPHPDefaultValue(), "#dbfield" => $sName, "#insert" => $oField->caninsert, "#update" => $oField->canupdate); switch ($oField->type) { case "string": case "int": case "tinyint": case "smallint": case "mediumint": case "bigint": case "money": case "decimal": case "double": case "email": $aResult["#type"] = "textfield.raw"; break; case "html": $aResult["#type"] = "html.raw"; break; case "text": $aResult["#type"] = "textarea.raw"; break; case "select-text": case "select-tinyint": case "select-smallint": case "select-bigint": case "select-mediumint": case "select-enum": case "select-int": case "select-char": $aResult["#type"] = "select.raw"; $aResult["#options"] = $oField->getOptions(); break; case "check-char": case "check-varchar": case "check-text": $aResult["#type"] = "checkboxes.raw"; $aResult["#options"] = $oField->getOptions(); $aResult["#multiple"] = true; break; case "json": $aResult["#type"] = "textarea.raw"; break; case "date": $aResult["#type"] = "date.raw"; break; case "datetime": $aResult["#type"] = "datetime.raw"; break; case "timestamp": case "timestamp-int": $aResult["#type"] = "datetime.raw"; break; case "monthyear": $aResult["#type"] = "datemonthyear.raw"; break; case "file-varchar": case "file-text": $aResult["#type"] = "file.raw"; $aResult["#savepath"] = $oField->savepath; break; case "image-varchar": case "image-text": $aResult["#type"] = "image.raw"; $aResult["#maximagewidth"] = $this->iMaxImageWidth; $aResult["#savepath"] = $oField->savepath; break; case "multiimage-text": $aResult["#type"] = "multiimage.raw"; $aResult["#maximagewidth"] = $this->iMaxImageWidth; $aResult["#savepath"] = $oField->savepath; $aResult["#uploadcount"] = $oField->uploadcount; $aResult["#uploadseparator"] = $oField->uploadseparator; break; case "hidden": $aResult["#type"] = "hidden.raw"; break; case "html-tiny": $aResult["#type"] = "html.raw"; break; default: throw new Exception("Unsupported type: " . $oField->type); } if (!empty($oField->formsize)) { if (substr($oField->type, 0, 4) == "html" || substr($oField->type, 0, 4) == "text" || substr($oField->type, 0, 4) == "json") { $aSize = explode(",", $oField->formsize); $aResult["#cols"] = $aSize[0]; if (count($aSize) >= 2) { $aResult["#rows"] = $aSize[1]; } } else { //default $aResult["#size"] = $oField->formsize; } } else { } if (isset($oRow[$sName])) { $sValue = $oRow[$sName]; switch ($oField->type) { case "date": case "datetime": //dont need this as actual value is already hidden if ($sValue == "0000-00-00" || $sValue == "0000-00-00 00:00:00") { $sValue = ""; } break; case "timestamp": if (empty($sValue)) { $sValue = ""; } else { $sValue = date("Y-m-d H:i:s", $sValue); } breal; case "check-char": case "check-varchar": case "check-text": $sValue = empty($sValue) ? array() : explode($oField->uploadseparator, $sValue); break; } //switch $aResult["#value"] = $sValue; } return $aResult; }