/** * Saves the new values of the projects dates. * * OPTIONAL request parameters: * <pre> * - array <b>projects</b> Array with projectId,startDate and endDate by comma separated * </pre> * * If there is an error, the save will return a Phprojekt_PublishedException, * if not, it returns a string in JSON format with: * <pre> * - type => 'success'. * - message => Success message. * - code => 0. * - id => 0. * </pre> * * @throws Phprojekt_PublishedException On error in the action save or wrong parameters. * * @return void */ public function jsonSaveAction() { $projects = (array) $this->getRequest()->getParam('projects', array()); $activeRecord = Phprojekt_Loader::getModel('Project', 'Project'); $rights = Phprojekt_Loader::getLibraryClass('Phprojekt_Item_Rights'); $userId = Phprojekt_Auth::getUserId(); $this->setCurrentProjectId(); // Error check: no project received if (empty($projects)) { $label = Phprojekt::getInstance()->translate('Projects'); $message = Phprojekt::getInstance()->translate('No project info was received'); throw new Phprojekt_PublishedException($label . ': ' . $message); } foreach ($projects as $project) { list($id, $startDate, $endDate) = explode(",", $project); // Check: are the three values available? if (empty($id) || empty($startDate) || empty($endDate)) { $label = Phprojekt::getInstance()->translate('Projects'); $message = Phprojekt::getInstance()->translate('Incomplete data received'); throw new Phprojekt_PublishedException($label . ': ' . $message); } $id = (int) $id; $activeRecord->find($id); // Check: project id exists? if (empty($activeRecord->id)) { $label = Phprojekt::getInstance()->translate('Project'); $message = Phprojekt::getInstance()->translate('Id not found #') . $id; throw new Phprojekt_PublishedException($label . ': ' . $message); } // Check: dates are valid? $validStart = Cleaner::validate('date', $startDate, false); $validEnd = Cleaner::validate('date', $endDate, false); if (!$validStart || !$validEnd) { $label = Phprojekt::getInstance()->translate('Project id #') . $id; if (!$validStart) { $message = Phprojekt::getInstance()->translate('Start date invalid'); } else { $message = Phprojekt::getInstance()->translate('End date invalid'); } throw new Phprojekt_PublishedException($label . ': ' . $message); } // Check: start date after end date? $startDateTemp = strtotime($startDate); $endDateTemp = strtotime($endDate); if ($startDateTemp > $endDateTemp) { $label = Phprojekt::getInstance()->translate('Project id #') . $id; $message = Phprojekt::getInstance()->translate('Start date can not be after End date'); throw new Phprojekt_PublishedException($label . ': ' . $message); } $activeRecord->startDate = $startDate; $activeRecord->endDate = $endDate; if ($rights->getItemRight(1, $id, $userId) >= Phprojekt_Acl::WRITE) { $activeRecord->parentSave(); } } $message = Phprojekt::getInstance()->translate(self::EDIT_MULTIPLE_TRUE_TEXT); $return = array('type' => 'success', 'message' => $message, 'code' => 0, 'id' => 0); Phprojekt_Converter_Json::echoConvert($return); }
/** * Validates a value using the database type of the field. * * @param Phprojekt_Model_Interface $class Model object. * @param string $varname Name of the field. * @param mix $value Value to validate. * * @return boolean True for valid. */ public function validateValue(Phprojekt_Model_Interface $class, $varname, $value) { $info = $class->info(); $varForInfo = Phprojekt_ActiveRecord_Abstract::convertVarToSql($varname); $valid = true; if (isset($info['metadata'][$varForInfo]) && !empty($value)) { $type = $info['metadata'][$varForInfo]['DATA_TYPE']; switch ($type) { case 'int': $valid = Cleaner::validate('integer', $value, false); break; case 'float': $valid = Cleaner::validate('float', $value, false); break; case 'date': $valid = Cleaner::validate('date', $value, false); break; case 'time': // $valid = Cleaner::validate('timestamp', $value, false); break; case 'timestamp': case 'datetime': $valid = Cleaner::validate('timestamp', $value, false); break; default: $valid = Cleaner::validate('string', $value, true); break; } } return $valid !== false; }
/** * Validates an item in the wrapped scope for a certain type. * * @param string $type Type against parameter/item should be validated. * @param string $name Name of parameter / Name of item in scope. * @param boolean $empty Must parameter/item be not null or empty. * @param object $messages Messages generated while validation. * * @return boolean True for valid. */ public function validate($type, $name, $empty = false, $messages = null) { $value = isset($this->_scope[$name]) ? $this->_scope[$name] : null; return Cleaner::validate($type, $value, $empty, $messages); }
/** * Wrapper around Cleaner::validate('timestamp', $value) because the client * sends timestamps without seconds. Set emptyOk if null values are * permitted. */ private static function _validateTimestamp($value, $emptyOk = false) { if (preg_match('/\\d{4}-\\d\\d-\\d\\d \\d\\d:\\d\\d/', $value)) { return true; } else { return Cleaner::validate('timestamp', $value, $emptyOk); } }