');
$form->addElement('text', 'field_variable', get_lang('FieldLabel'), array('class' => 'span5'));
$form->addElement(
'text',
'field_options',
get_lang('FieldPossibleValues'),
array('id' => 'field_options', 'class' => 'span6')
);
if ($action == 'edit') {
if (in_array(
$defaults['field_type'],
array(ExtraField::FIELD_TYPE_SELECT, ExtraField::FIELD_TYPE_DOUBLE_SELECT)
)
) {
$url = Display::url(
get_lang('EditExtraFieldOptions'),
'extra_field_options.php?type='.$this->type.'&field_id='.$id
);
$form->addElement('label', null, $url);
$form->freeze('field_options');
}
}
$form->addElement(
'text',
'field_default_value',
get_lang('FieldDefaultValue'),
array('id' => 'field_default_value', 'class' => 'span5')
);
$group = array();
$group[] = $form->createElement('radio', 'field_visible', null, get_lang('Yes'), 1);
$group[] = $form->createElement('radio', 'field_visible', null, get_lang('No'), 0);
$form->addGroup($group, '', get_lang('Visible'), '', false);
$group = array();
$group[] = $form->createElement('radio', 'field_changeable', null, get_lang('Yes'), 1);
$group[] = $form->createElement('radio', 'field_changeable', null, get_lang('No'), 0);
$form->addGroup($group, '', get_lang('FieldChangeability'), '', false);
$group = array();
$group[] = $form->createElement('radio', 'field_filter', null, get_lang('Yes'), 1);
$group[] = $form->createElement('radio', 'field_filter', null, get_lang('No'), 0);
$form->addGroup($group, '', get_lang('FieldFilter'), '', false);
$form->addElement('text', 'field_order', get_lang('FieldOrder'), array('class' => 'span1'));
if ($action == 'edit') {
$option = new ExtraFieldOption($this->type);
if ($defaults['field_type'] == ExtraField::FIELD_TYPE_DOUBLE_SELECT) {
$form->freeze('field_options');
}
$defaults['field_options'] = $option->get_field_options_by_field_to_string($id);
$form->addElement('button', 'submit', get_lang('Modify'), 'class="save"');
} else {
$defaults['field_visible'] = 0;
$defaults['field_changeable'] = 0;
$defaults['field_filter'] = 0;
$form->addElement('button', 'submit', get_lang('Add'), 'class="save"');
}
/*if (!empty($defaults['created_at'])) {
$defaults['created_at'] = api_convert_and_format_date($defaults['created_at']);
}
if (!empty($defaults['updated_at'])) {
$defaults['updated_at'] = api_convert_and_format_date($defaults['updated_at']);
}*/
$form->setDefaults($defaults);
// Setting the rules
$form->addRule('field_display_text', get_lang('ThisFieldIsRequired'), 'required');
//$form->addRule('field_variable', get_lang('ThisFieldIsRequired'), 'required');
$form->addRule('field_type', get_lang('ThisFieldIsRequired'), 'required');
return $form;
}
public function getJqgridActionLinks($token)
{
//With this function we can add actions to the jgrid (edit, delete, etc)
return 'function action_formatter(cellvalue, options, rowObject) {
return \'
'.Display::return_icon(
'edit.png',
get_lang('Edit'),
'',
ICON_SIZE_SMALL
).''.
'
'.Display::return_icon(
'delete.png',
get_lang('Delete'),
'',
ICON_SIZE_SMALL
).''.
'\';
}';
}
public function getRules(&$columns, &$column_model)
{
$fields = $this->get_all(
array('field_visible = ? AND field_filter = ?' => array(1, 1)),
'option_display_text'
);
$extraFieldOption = new ExtraFieldOption($this->type);
$rules = array();
if (!empty($fields)) {
foreach ($fields as $field) {
$search_options = array();
$type = 'text';
if (in_array($field['field_type'], array(self::FIELD_TYPE_SELECT, self::FIELD_TYPE_DOUBLE_SELECT))) {
$type = 'select';
$search_options['sopt'] = array('eq', 'ne'); //equal not equal
} else {
$search_options['sopt'] = array('cn', 'nc'); //contains not contains
}
$search_options['searchhidden'] = 'true';
$search_options['defaultValue'] = isset($search_options['field_default_value']) ? $search_options['field_default_value'] : null;
if ($field['field_type'] == self::FIELD_TYPE_DOUBLE_SELECT) {
//Add 2 selects
$options = $extraFieldOption->get_field_options_by_field($field['id']);
$options = self::extra_field_double_select_convert_array_to_ordered_array($options);
$first_options = array();
if (!empty($options)) {
foreach ($options as $option) {
foreach ($option as $sub_option) {
if ($sub_option['option_value'] == 0) {
$first_options[] = $sub_option['field_id'].'#'.$sub_option['id'].':'.$sub_option['option_display_text'];
} else {
}
}
}
}
$search_options['value'] = implode(';', $first_options);
$search_options['dataInit'] = 'fill_second_select';
//First
$column_model[] = array(
'name' => 'extra_'.$field['field_variable'],
'index' => 'extra_'.$field['field_variable'],
'width' => '100',
'hidden' => 'true',
'search' => 'true',
'stype' => 'select',
'searchoptions' => $search_options
);
$columns[] = $field['field_display_text'].' (1)';
$rules[] = array('field' => 'extra_'.$field['field_variable'], 'op' => 'cn');
//Second
$search_options['value'] = $field['id'].':';
$search_options['dataInit'] = 'register_second_select';
$column_model[] = array(
'name' => 'extra_'.$field['field_variable'].'_second',
'index' => 'extra_'.$field['field_variable'].'_second',
'width' => '100',
'hidden' => 'true',
'search' => 'true',
'stype' => 'select',
'searchoptions' => $search_options
);
$columns[] = $field['field_display_text'].' (2)';
$rules[] = array('field' => 'extra_'.$field['field_variable'].'_second', 'op' => 'cn');
continue;
} else {
$search_options['value'] = $extraFieldOption->get_field_options_to_string(
$field['id'],
false,
'option_display_text'
);
}
$column_model[] = array(
'name' => 'extra_'.$field['field_variable'],
'index' => 'extra_'.$field['field_variable'],
'width' => '100',
'hidden' => 'true',
'search' => 'true',
'stype' => $type,
'searchoptions' => $search_options
);
$columns[] = $field['field_display_text'];
$rules[] = array('field' => 'extra_'.$field['field_variable'], 'op' => 'cn');
}
}
return $rules;
}
/**
* @param array $options
* @return array
*/
function parseConditions($options)
{
$inject_extra_fields = null;
$extraFieldOption = new ExtraFieldOption($this->type);
$double_fields = array();
if (isset($options['extra'])) {
$extra_fields = $options['extra'];
if (!empty($extra_fields)) {
$counter = 1;
foreach ($extra_fields as &$extra) {
$extra_field_obj = new ExtraField($this->type);
$extra_field_info = $extra_field_obj->get($extra['id']);
$extra['extra_field_info'] = $extra_field_info;
if (in_array(
$extra_field_info['field_type'],
array(
ExtraField::FIELD_TYPE_SELECT,
ExtraField::FIELD_TYPE_SELECT,
ExtraField::FIELD_TYPE_DOUBLE_SELECT
)
)
) {
$inject_extra_fields .= " fvo$counter.option_display_text as {$extra['field']}, ";
} else {
$inject_extra_fields .= " fv$counter.field_value as {$extra['field']}, ";
}
if (isset($extra_fields_info[$extra['id']])) {
$info = $extra_fields_info[$extra['id']];
} else {
$info = $this->get($extra['id']);
$extra_fields_info[$extra['id']] = $info;
}
if ($info['field_type'] == ExtraField::FIELD_TYPE_DOUBLE_SELECT) {
$double_fields[$info['id']] = $info;
}
$counter++;
}
}
}
$options_by_double = array();
foreach ($double_fields as $double) {
$my_options = $extraFieldOption->get_field_options_by_field(
$double['id'],
true
);
$options_by_double['extra_'.$double['field_variable']] = $my_options;
}
$field_value_to_join = array();
//filter can be all/any = and/or
$inject_joins = null;
$inject_where = null;
$where = null;
if (!empty($options['where'])) {
if (!empty($options['extra'])) {
//Removing double 1=1
$options['where'] = str_replace(' 1 = 1 AND', '', $options['where']);
//Always OR
$counter = 1;
foreach ($extra_fields as $extra_info) {
$extra_field_info = $extra_info['extra_field_info'];
$inject_joins .= " INNER JOIN $this->table_field_values fv$counter ON (s.".$this->primaryKey." = fv$counter.".$this->handler_id.") ";
//Add options
if (in_array(
$extra_field_info['field_type'],
array(
ExtraField::FIELD_TYPE_SELECT,
ExtraField::FIELD_TYPE_SELECT,
ExtraField::FIELD_TYPE_DOUBLE_SELECT
)
)
) {
$options['where'] = str_replace(
$extra_info['field'],
'fv'.$counter.'.field_id = '.$extra_info['id'].' AND fvo'.$counter.'.option_value',
$options['where']
);
$inject_joins .= " INNER JOIN $this->table_field_options fvo$counter ".
" ON (fv$counter.field_id = fvo$counter.field_id AND fv$counter.field_value = fvo$counter.option_value) ";
} else {
//text, textarea, etc
$options['where'] = str_replace(
$extra_info['field'],
'fv'.$counter.'.field_id = '.$extra_info['id'].' AND fv'.$counter.'.field_value',
$options['where']
);
}
$field_value_to_join[] = " fv$counter.$this->handler_id ";
$counter++;
}
if (!empty($field_value_to_join)) {
//$inject_where .= " AND s.id = ".implode(' = ', $field_value_to_join);
}
}
$where .= ' AND '.$options['where'];
}
$order = null;
if (!empty($options['order'])) {
$order = " ORDER BY ".$options['order'];
}
$limit = null;
if (!empty($options['limit'])) {
$limit = " LIMIT ".$options['limit'];
}
return array(
'order' => $order,
'limit' => $limit,
'where' => $where,
'inject_where' => $inject_where,
'inject_joins' => $inject_joins,
'field_value_to_join' => $field_value_to_join,
'inject_extra_fields' => $inject_extra_fields,
);
}
public function getExtraFieldRules($filters)
{
$extra_fields = array();
// Getting double select if exists
$double_select = array();
foreach ($filters->rules as $rule) {
if (strpos($rule->field, '_second') === false) {
} else {
$my_field = str_replace('_second', '', $rule->field);
$double_select[$my_field] = $rule->data;
}
}
$condition_array = array();
foreach ($filters->rules as $rule) {
if (strpos($rule->field, 'extra_') === false) {
//normal fields
$field = $rule->field;
if (!empty($rule->data)) {
$condition_array[] = get_where_clause($field, $rule->op, $rule->data);
}
} else {
//Extra fields
//normal
if (strpos($rule->field, '_second') === false) {
//No _second
$original_field = str_replace('extra_', '', $rule->field);
$field_option = $this->get_handler_field_info_by_field_variable($original_field);
if ($field_option['field_type'] == ExtraField::FIELD_TYPE_DOUBLE_SELECT) {
if (isset($double_select[$rule->field])) {
$data = explode('#', $rule->data);
$rule->data = $data[1].'::'.$double_select[$rule->field];
} else {
// only was sent 1 select
$data = explode('#', $rule->data);
$rule->data = $data[1];
}
if (!empty($rule->data)) {
$condition_array[] = ' ('.get_where_clause($rule->field, $rule->op, $rule->data).') ';
$extra_fields[] = array('field' => $rule->field, 'id' => $field_option['id']);
}
} else {
if (!empty($rule->data)) {
$condition_array[] = ' ('.get_where_clause($rule->field, $rule->op, $rule->data).') ';
$extra_fields[] = array('field' => $rule->field, 'id' => $field_option['id']);
}
}
} else {
$my_field = str_replace('_second', '', $rule->field);
$original_field = str_replace('extra_', '', $my_field);
$field_option = $this->get_handler_field_info_by_field_variable($original_field);
$extra_fields[] = array('field' => $rule->field, 'id' => $field_option['id']);
}
}
}
return array(
'extra_fields' => $extra_fields,
'condition_array' => $condition_array
);
}
}