diff --git a/lib/form/form.class.php b/lib/form/form.class.php index 0bfb552609..7059eaeee4 100644 --- a/lib/form/form.class.php +++ b/lib/form/form.class.php @@ -173,6 +173,7 @@ class form extends fixer else { $this->batchConvertField($config); + $this->skipRequiredCheck($config); } if(!empty($this->errors)) @@ -289,6 +290,38 @@ class form extends fixer $this->dataList = $rowDataList; } + /** + * 跳过必填项检查。 + * Skip the required check. + * + * @param array $fieldConfigs + * @access public + * @return void + */ + public function skipRequiredCheck(array $fieldConfigs) + { + foreach($this->dataList as $rowIndex => $rowData) + { + foreach($fieldConfigs as $field => $config) + { + if(empty($config['required']) || empty($config['skipRequired']) || !empty($rowData->$field)) continue; + + $skip = true; + $errorKey = isset($config['type']) && $config['type'] == 'array' ? "{$field}[{$rowIndex}][]" : "{$field}[{$rowIndex}]"; + foreach($config['skipRequired'] as $conditionField => $conditionValue) + { + if($rowData->$conditionField != $conditionValue) + { + $skip = false; + break; + } + } + + if($skip) unset($this->errors[$errorKey]); + } + } + } + /** * 获取$_POST的数据。 * Get the data of $_POST. diff --git a/module/programplan/config/form.php b/module/programplan/config/form.php index 963e53aa23..a8957d8f70 100644 --- a/module/programplan/config/form.php +++ b/module/programplan/config/form.php @@ -17,8 +17,8 @@ $config->programplan->form->create['attribute'] = array('label' => $lang->progr $config->programplan->form->create['point'] = array('label' => $lang->programplan->point, 'type' => 'array', 'control' => 'picker', 'required' => false, 'default' => '', 'options' => array(''), 'multiple' => true); $config->programplan->form->create['parallel'] = array('label' => '', 'type' => 'int', 'control' => 'hidden', 'required' => false, 'default' => 0); $config->programplan->form->create['acl'] = array('label' => $lang->programplan->acl, 'type' => 'string', 'control' => 'picker', 'required' => false, 'default' => 'open', 'options' => $lang->execution->aclList); -$config->programplan->form->create['begin'] = array('label' => $lang->programplan->begin, 'type' => 'date', 'control' => 'date', 'required' => true, 'default' => null); -$config->programplan->form->create['end'] = array('label' => $lang->programplan->end, 'type' => 'date', 'control' => 'date', 'required' => true, 'default' => null); +$config->programplan->form->create['begin'] = array('label' => $lang->programplan->begin, 'type' => 'date', 'control' => 'date', 'required' => true, 'default' => null, 'skipRequired' => array('enabled' => 'off')); +$config->programplan->form->create['end'] = array('label' => $lang->programplan->end, 'type' => 'date', 'control' => 'date', 'required' => true, 'default' => null, 'skipRequired' => array('enabled' => 'off')); $config->programplan->form->create['realBegan'] = array('label' => $lang->programplan->realBegan, 'type' => 'date', 'control' => 'date', 'required' => false, 'default' => null); $config->programplan->form->create['realEnd'] = array('label' => $lang->programplan->realEnd, 'type' => 'date', 'control' => 'date', 'required' => false, 'default' => null); $config->programplan->form->create['milestone'] = array('label' => $lang->programplan->milestone, 'type' => 'int', 'control' => 'radioList','required' => false, 'default' => 0, 'options' => $lang->programplan->milestoneList); diff --git a/module/programplan/zen.php b/module/programplan/zen.php index 99a7b63e7d..1b0bef0fa1 100644 --- a/module/programplan/zen.php +++ b/module/programplan/zen.php @@ -23,8 +23,6 @@ class programplanZen extends programplan { $beginIsZeroDate = helper::isZeroDate($plan->begin); $endIsZeroDate = helper::isZeroDate($plan->end); - if($beginIsZeroDate) dao::$errors["begin[{$rowID}]"] = $this->lang->programplan->emptyBegin; - if($endIsZeroDate) dao::$errors["end[{$rowID}]"] = $this->lang->programplan->emptyEnd; if(!$beginIsZeroDate and !$endIsZeroDate and $plan->end < $plan->begin) dao::$errors["end[{$rowID}]"] = $this->lang->programplan->error->planFinishSmall; if(!empty($parent)) @@ -64,7 +62,7 @@ class programplanZen extends programplan foreach($plans as $rowID => $plan) { if(empty($parentID) and empty($oldPlans)) $plan->id = ''; - $plan->days = $this->calcDaysForStage($plan->begin, $plan->end); + $plan->days = isset($plan->enabled) && $plan->enabled == 'on' ? $this->calcDaysForStage($plan->begin, $plan->end) : 0; $plan->project = $projectID; $plan->parent = $parentID ? $parentID : $projectID; $plan->order = (int)array_shift($orders); @@ -74,7 +72,7 @@ class programplanZen extends programplan if(in_array($this->config->edition, array('max', 'ipd')) && !dao::isError()) { - $plan->planDuration = $this->programplan->getDuration($plan->begin, $plan->end); + $plan->planDuration = $this->programplan->getDuration((string)$plan->begin, (string)$plan->end); $plan->realDuration = $this->programplan->getDuration((string)$plan->realBegan, (string)$plan->realEnd); } @@ -83,7 +81,7 @@ class programplanZen extends programplan /* Check duplicated names to avoid to save same names. */ if(in_array($plan->name, $names)) dao::$errors["name[{$rowID}]"] = empty($plan->type) ? $this->lang->programplan->error->sameName : str_replace($this->lang->execution->stage, '', $this->lang->programplan->error->sameName); - if(isset($plan->code)) + if(isset($plan->code) && (!isset($plan->enabled) || (isset($plan->enabled) && $plan->enabled == 'on'))) { if(in_array($plan->code, $codes)) dao::$errors["code[{$rowID}]"] = sprintf($this->lang->error->repeat, $plan->type == 'stage' ? $this->lang->execution->code : $this->lang->code, $plan->code); if(!empty($this->config->setCode) && empty($plan->code) && strpos(",{$this->config->execution->create->requiredFields},", ',code,') !== false) dao::$errors["code[{$rowID}]"] = sprintf($this->lang->error->notempty, $plan->type == 'stage' ? $this->lang->execution->code : $this->lang->code);