/** * * @param obj $icmsObj Object * @param int $objectid * @param str $created_success_msg Message to display on successful creation * @param str $modified_success_msg Message to display on successful modification * @param bool $redirect_page Whether to redirect afterwards, or not * @param bool $debug Whether to display debug information, or not */ public function &doStoreFromDefaultForm(&$icmsObj, $objectid, $created_success_msg, $modified_success_msg, $redirect_page = false, $debug = false) { global $impresscms; $this->postDataToObject($icmsObj); if ($icmsObj->isNew()) { $redirect_msg = $created_success_msg; } else { $redirect_msg = $modified_success_msg; } // Check if there were uploaded files $uploaderResult = true; if (isset($_POST['icms_upload_image']) || isset($_POST['icms_upload_file'])) { $uploaderObj = new icms_file_MediaUploadHandler($icmsObj->getImageDir(true), $this->handler->_allowedMimeTypes, $this->handler->_maxFileSize, $this->handler->_maxWidth, $this->handler->_maxHeight); foreach ($_FILES as $name => $file_array) { if (isset($file_array['name']) && $file_array['name'] != "" && in_array(str_replace('upload_', '', $name), array_keys($icmsObj->vars))) { if ($uploaderObj->fetchMedia($name)) { $uploaderObj->setTargetFileName(time() . "_" . $uploaderObj->getMediaName()); if ($uploaderObj->upload()) { $uploaderResult = $uploaderResult && true; // Find the related field in the icms_ipf_Object $related_field = str_replace('upload_', '', $name); $uploadedArray[] = $related_field; // if it's a richfile if ($icmsObj->vars[$related_field]['data_type'] == XOBJ_DTYPE_FILE) { $object_fileurl = $icmsObj->getUploadDir(); $fileObj = $icmsObj->getFileObj($related_field); $fileObj->setVar('url', $object_fileurl . $uploaderObj->getSavedFileName()); $fileObj->setVar('mid', $_POST['mid_' . $related_field]); $fileObj->setVar('caption', $_POST['caption_' . $related_field]); $fileObj->setVar('description', $_POST['desc_' . $related_field]); $icmsObj->storeFileObj($fileObj); $icmsObj->setVar($related_field, $fileObj->getVar('fileid')); } else { $eventResult = $this->handler->executeEvent('beforeFileUnlink', $icmsObj); if (!$eventResult) { $icmsObj->setErrors("An error occured during the beforeFileUnlink event"); $uploaderResult = $uploaderResult && false; } $old_file = $icmsObj->getUploadDir(true) . $icmsObj->getVar($related_field); if (is_file($old_file)) { unlink($old_file); } $icmsObj->setVar($related_field, $uploaderObj->getSavedFileName()); $eventResult = $this->handler->executeEvent('afterFileUnlink', $icmsObj); if (!$eventResult) { $icmsObj->setErrors("An error occured during the afterFileUnlink event"); $uploaderResult = $uploaderResult && false; } } } else { $icmsObj->setErrors($uploaderObj->getErrors(false)); $uploaderResult = $uploaderResult && false; } } else { $icmsObj->setErrors($uploaderObj->getErrors(false)); $uploaderResult = $uploaderResult && false; } } } } if ($uploaderResult) { if ($debug) { $storeResult = $this->handler->insertD($icmsObj); } else { $storeResult = $this->handler->insert($icmsObj); } } else { $storeResult = false; } if ($storeResult) { if ($this->handler->getPermissions()) { $icmspermissions_handler = new icms_ipf_permission_Handler($this->handler); $icmspermissions_handler->storeAllPermissionsForId($icmsObj->id()); } } if ($redirect_page === null) { return $icmsObj; } else { if (!$storeResult) { redirect_header($impresscms->urls['previouspage'], 3, _CO_ICMS_SAVE_ERROR . $icmsObj->getHtmlErrors()); } else { $redirect_page = $redirect_page ? $redirect_page : icms_get_page_before_form(); redirect_header($redirect_page, 2, $redirect_msg); } } }
/** * Adds an element to the form * * gets all variables from &targetobject (@todo, which object will be passed here?) * that was set during the construction of this object (in the constructor) * loops through all variables and determines what data type the key has * adds an element for each key based on the datatype */ private function createElements() { $controls = $this->targetObject->controls; $vars = $this->targetObject->vars; foreach ($vars as $key => $var) { // If $displayOnForm is FALSE OR this is the primary key, it doesn't // need to be displayed, then we only create an hidden field if ($key == $this->targetObject->handler->keyName || !$var['displayOnForm']) { $elementToAdd = new icms_form_elements_Hidden($key, $var['value']); $this->addElement($elementToAdd, $key, $var, FALSE); unset($elementToAdd); // If not, the we need to create the proper form control for this fields } else { // If this field has a specific control, we will use it if ($key == 'parentid') { /** * Why this ? */ } if (isset($controls[$key])) { /* If the control has name, it's because it's an object already present in the script * for example, "user" * If the field does not have a name, than we will use a "select" (ie icms_form_elements_Select) */ if (!isset($controls[$key]['name']) || !$controls[$key]['name']) { $controls[$key]['name'] = 'select'; } $form_select = $this->getControl($controls[$key]['name'], $key); // Adding on the form, the control for this field $this->addElement($form_select, $key, $var); unset($form_select); // If this field don't have a specific control, we will use the standard one, depending on its data type } else { switch ($var['data_type']) { case XOBJ_DTYPE_TXTBOX: $form_text = $this->getControl("text", $key); $this->addElement($form_text, $key, $var); unset($form_text); break; case XOBJ_DTYPE_INT: $this->targetObject->setControl($key, array('name' => 'text', 'size' => '5')); $form_text = $this->getControl("text", $key); $this->addElement($form_text, $key, $var); unset($form_text); break; case XOBJ_DTYPE_FLOAT: $this->targetObject->setControl($key, array('name' => 'text', 'size' => '5')); $form_text = $this->getControl("text", $key); $this->addElement($form_text, $key, $var); unset($form_text); break; case XOBJ_DTYPE_LTIME: $form_datetime = $this->getControl('datetime', $key); $this->addElement($form_datetime, $key, $var); unset($form_datetime); break; case XOBJ_DTYPE_STIME: $form_date = $this->getControl('date', $key); $this->addElement($form_date, $key, $var); unset($form_date); break; case XOBJ_DTYPE_TIME_ONLY: $form_time = $this->getControl('time', $key); $this->addElement($form_time, $key, $var); unset($form_time); break; case XOBJ_DTYPE_CURRENCY: $this->targetObject->setControl($key, array('name' => 'text', 'size' => '15')); $form_currency = $this->getControl("text", $key); $this->addElement($form_currency, $key, $var); unset($form_currency); break; case XOBJ_DTYPE_URLLINK: $form_urllink = $this->getControl("urllink", $key); $this->addElement($form_urllink, $key, $var); unset($form_urllink); break; case XOBJ_DTYPE_FILE: $form_file = $this->getControl("richfile", $key); $this->addElement($form_file, $key, $var); unset($form_file); break; case XOBJ_DTYPE_TXTAREA: $form_text_area = $this->getControl('textarea', $key); $this->addElement($form_text_area, $key, $var); unset($form_text_area); break; case XOBJ_DTYPE_ARRAY: // TODO : To come... break; case XOBJ_DTYPE_SOURCE: $form_source_editor = $this->getControl('source', $key); $this->addElement($form_source_editor, $key, $var); unset($form_source_editor); break; case XOBJ_DTYPE_FORM_SECTION: $section_control = $this->getControl('section', $key); $this->addElement($section_control, $key, $var); unset($section_control); break; case XOBJ_DTYPE_FORM_SECTION_CLOSE: $this->targetObject->setControl($key, array("close" => TRUE)); $section_control = $this->getControl('section', $key); $this->addElement($section_control, $key, $var); unset($section_control); break; } } } } // Add a hidden field to store the URL of the page before this form $this->addElement(new icms_form_elements_Hidden('icms_page_before_form', icms_get_page_before_form())); }