Index: branches/5.2.x/core/kernel/kbase.php
===================================================================
diff -u -N -r14244 -r14596
--- branches/5.2.x/core/kernel/kbase.php (.../kbase.php) (revision 14244)
+++ branches/5.2.x/core/kernel/kbase.php (.../kbase.php) (revision 14596)
@@ -1,6 +1,6 @@
populateMultiLangFields = $populate_ml_fields;
@@ -420,6 +435,7 @@
$this->IDField = $this->Application->getUnitOption($this->Prefix, 'IDField');
$this->TableName = $this->Application->getUnitOption($this->Prefix, 'TableName');
+ $this->initForm($form_name);
$this->defineFields();
$this->ApplyFieldModifiers(); // should be called only after all fields definitions been set
@@ -432,26 +448,78 @@
}
/**
+ * Adjusts object accoding to given form name
+ *
+ */
+ protected function initForm($form_name = null)
+ {
+ $forms = $this->Application->getUnitOption($this->Prefix, 'Forms', Array ());
+
+ $this->formName = $form_name;
+ $this->formConfig = isset($forms['default']) ? $forms['default'] : Array ();
+
+ if ( !$this->formName ) {
+ return ;
+ }
+
+ if ( !isset($forms[$this->formName]) ) {
+ trigger_error('Form "' . $this->formName . '" isn\'t declared in "' . $this->Prefix . '" unit config.', E_USER_NOTICE);
+ }
+ else {
+ $this->formConfig = kUtil::array_merge_recursive($this->formConfig, $forms[$this->formName]);
+ }
+ }
+
+ /**
* Add field definitions from all possible sources
* Used field sources: database fields, custom fields, virtual fields, calculated fields, aggregated calculated fields
*
* @access protected
*/
protected function defineFields()
{
- $this->Fields = $this->Application->getUnitOption($this->Prefix, 'Fields', Array ());
- $this->customFields = $this->Application->getUnitOption($this->Prefix, 'CustomFields', Array());
+ $this->Fields = $this->getFormOption('Fields', Array ());
+ $this->customFields = $this->getFormOption('CustomFields', Array());
- $this->setVirtualFields( $this->Application->getUnitOption($this->Prefix, 'VirtualFields', Array ()) );
+ $this->setVirtualFields( $this->getFormOption('VirtualFields', Array ()) );
- $calculated_fields = $this->Application->getUnitOption($this->Prefix, 'CalculatedFields', Array());
+ $calculated_fields = $this->getFormOption('CalculatedFields', Array());
$this->CalculatedFields = $this->getFieldsBySpecial($calculated_fields);
- $aggregated_calculated_fields = $this->Application->getUnitOption($this->Prefix, 'AggregatedCalculatedFields', Array());
+ $aggregated_calculated_fields = $this->getFormOption('AggregatedCalculatedFields', Array());
$this->AggregatedCalculatedFields = $this->getFieldsBySpecial($aggregated_calculated_fields);
}
/**
+ * Returns form name, used for validation
+ *
+ * @return string
+ */
+ public function getFormName()
+ {
+ return $this->formName;
+ }
+
+ /**
+ * Reads unit (specified by $prefix) option specified by $option and applies form change to it
+ *
+ * @param string $option
+ * @param mixed $default
+ * @return string
+ * @access public
+ */
+ public function getFormOption($option, $default = false)
+ {
+ $ret = $this->Application->getUnitOption($this->Prefix, $option, $default);
+
+ if ( isset($this->formConfig[$option]) ) {
+ $ret = kUtil::array_merge_recursive($ret, $this->formConfig[$option]);
+ }
+
+ return $ret;
+ }
+
+ /**
* Only exteracts fields, that match current object Special
*
* @param Array $fields
@@ -537,38 +605,41 @@
/**
* Override field options with ones defined in submit via "field_modfiers" array (common for all prefixes)
*
- * @author Alex
+ * @param Array $field_modifiers
+ * @return void
* @access public
+ * @author Alex
*/
public function ApplyFieldModifiers($field_modifiers = null)
{
- $allowed_modifiers = Array('required', 'multiple');
+ $allowed_modifiers = Array ('required', 'multiple');
- if ($this->Application->isAdminUser) {
+ if ( $this->Application->isAdminUser ) {
// can change upload dir on the fly (admin only!)
$allowed_modifiers[] = 'upload_dir';
}
- if (!isset($field_modifiers)) {
+ if ( !isset($field_modifiers) ) {
$field_modifiers = $this->Application->GetVar('field_modifiers');
- if (!$field_modifiers) {
+ if ( !$field_modifiers ) {
// no field modifiers
- return false;
+ return ;
}
$field_modifiers = getArrayValue($field_modifiers, $this->getPrefixSpecial());
}
- if (!$field_modifiers) {
+ if ( !$field_modifiers ) {
// no field modifiers for current prefix_special
- return false;
+ return ;
}
- foreach ($field_modifiers as $field => $field_options)
- {
- foreach ($field_options as $option_name => $option_value)
- {
- if ( !in_array(strtolower($option_name), $allowed_modifiers) ) continue;
+ foreach ($field_modifiers as $field => $field_options) {
+ foreach ($field_options as $option_name => $option_value) {
+ if ( !in_array(strtolower($option_name), $allowed_modifiers) ) {
+ continue;
+ }
+
$this->Fields[$field][$option_name] = $option_value;
}
}
@@ -722,13 +793,14 @@
*/
public function GetField($name, $format = null)
{
- $options = $this->GetFieldOptions($name);
+ $formatter_class = $this->GetFieldOption($name, 'formatter');
- if (array_key_exists('formatter', $options)) {
- $formatter_class = $options['formatter'];
+ if ( $formatter_class ) {
$value = ($formatter_class == 'kMultiLanguage') && !preg_match('/^l[0-9]+_/', $name) ? '' : $this->GetDBField($name);
$formatter =& $this->Application->recallObject($formatter_class);
+ /* @var $formatter kFormatter */
+
return $formatter->Format($value, $name, $this, $format);
}
@@ -766,16 +838,19 @@
*
* @param Array $fields
* @access public
- * @todo maybe should not be publically accessable
+ * @todo Maybe should not be publicly accessible
*/
public function UpdateFormattersSubFields($fields = null)
{
- if (!is_array($fields)) {
+ if ( !is_array($fields) ) {
$fields = array_keys($this->Fields);
}
+
foreach ($fields as $field) {
if ( isset($this->Fields[$field]['formatter']) ) {
$formatter =& $this->Application->recallObject($this->Fields[$field]['formatter']);
+ /* @var $formatter kFormatter */
+
$formatter->UpdateSubFields($field, $this->GetDBField($field), $this->Fields[$field], $this);
}
}