public function recordpicker_fs($crits, $cols, $order, $filters, $path) { self::$browsed_records = array(); $this->init(); $theme = $this->init_module(Base_Theme::module_name()); Base_ThemeCommon::load_css($this->get_type(), 'Browsing_records'); $this->set_module_variable('rp_fs_path', $path); $selected = Module::static_get_module_variable($path, 'selected', array()); $theme->assign('filters', $this->show_filters($filters)); $theme->assign('disabled', ''); $this->crits = Utils_RecordBrowserCommon::merge_crits($this->crits, $crits); $theme->assign('table', $this->show_data($this->crits, $cols, $order, false, true)); if ($this->amount_of_records >= 10000) { $theme->assign('disabled', '_disabled'); $theme->assign('select_all', array('js' => '', 'label' => __('Select all'))); $theme->assign('deselect_all', array('js' => '', 'label' => __('Deselect all'))); } else { load_js('modules/Utils/RecordBrowser/RecordPickerFS/select_all.js'); $theme->assign('select_all', array('js' => 'RecordPicker_select_all(1,\'' . $this->get_path() . '\',\'' . __('Processing...') . '\');', 'label' => __('Select all'))); $theme->assign('deselect_all', array('js' => 'RecordPicker_select_all(0,\'' . $this->get_path() . '\',\'' . __('Processing...') . '\');', 'label' => __('Deselect all'))); } load_js('modules/Utils/RecordBrowser/rpicker_fs.js'); if (isset(self::$browsed_records['records'])) { foreach (self::$browsed_records['records'] as $id => $i) { eval_js('rpicker_fs_init(' . $id . ',' . (isset($selected[$id]) && $selected[$id] ? 1 : 0) . ',\'' . $this->get_path() . '\')'); } } /* $rpicker_ind = $this->get_module_variable('rpicker_ind'); $init_func = 'init_all_rpicker_'.$element.' = function(id, cstring){'; foreach($rpicker_ind as $v) $init_func .= 'rpicker_init(\''.$element.'\','.$v.');'; $init_func .= '}'; eval_js($init_func.';init_all_rpicker_'.$element.'();');*/ $theme->display('Record_picker'); }
public function edit_permissions_rule($id = null, $clone = false) { if (Base_AdminCommon::get_access('Utils_RecordBrowser', 'permissions')!=2) return false; if ($this->is_back()) { return false; } load_js('modules/Utils/RecordBrowser/edit_permissions.js'); $all_clearances = array(''=>'---')+array_flip(Base_AclCommon::get_clearance(true)); $all_fields = array(); $this->init(); foreach ($this->table_rows as $k=>$v) $all_fields[$v['id']] = $k; $js = ''; $operators = array( '='=>__('equal'), '!'=>__('not equal'), '>'=>'>', '>='=>'>=', '<'=>'<', '<='=>'<=' ); $form = $this->init_module('Libs_QuickForm'); $theme = $this->init_module('Base_Theme'); $counts = array( 'clearance'=>5, 'ands'=>5, 'ors'=>10 ); $actions = $this->get_permission_actions(); $form->addElement('select', 'action', __('Action'), $actions); $fields_permissions = $all_fields; foreach ($all_fields as $k=>$v) { if ($this->table_rows[$v]['type']=='calculated' || $this->table_rows[$v]['type']=='hidden') unset($all_fields[$k]); else $this->manage_permissions_set_field_values($k); } $all_fields = array( ':Created_by'=>__('Created by'), ':Created_on'=>__('Created on'), ':Edited_on'=>__('Edited on') ) + $all_fields; if ($this->tab=='contact' || $this->tab=='company') $all_fields = array('id'=>__('ID')) + $all_fields; $this->manage_permissions_set_field_values(':Created_by', array('USER_ID'=>__('User Login'))); $this->manage_permissions_set_field_values(':Created_on', Utils_RecordBrowserCommon::$date_values); $this->manage_permissions_set_field_values(':Edited_on', Utils_RecordBrowserCommon::$date_values); if ($this->tab=='contact') $this->manage_permissions_set_field_values('id', array('USER'=>__('User Contact'))); if ($this->tab=='company') $this->manage_permissions_set_field_values('id', array('USER_COMPANY'=>__('User Company'))); for ($i=0; $i<$counts['clearance']; $i++) $form->addElement('select', 'clearance_'.$i, __('Clearance'), $all_clearances); $current_or = array(); $current_and = 0; foreach ($all_fields as $k=>$v) { if (isset($this->table_rows[$v])) { $v = $this->table_rows[$v]['name']; } $all_fields[$k] = _V($v); } for ($i=0; $i<$counts['ands']; $i++) { $current_or[$i] = 0; for ($j=0; $j<$counts['ors']; $j++) { $form->addElement('select', 'crits_'.$i.'_'.$j.'_field', __('Crits'), array(''=>'---')+$all_fields, array('onchange'=>'utils_recordbrowser__update_field_values('.$i.', '.$j.');', 'id'=>'crits_'.$i.'_'.$j.'_field')); $form->addElement('select', 'crits_'.$i.'_'.$j.'_op', __('Operator'), array(''=>'---')+$operators); $form->addElement('select', 'crits_'.$i.'_'.$j.'_value', __('Value'), array(), array('id'=>'crits_'.$i.'_'.$j.'_value', 'onchange'=>'utils_recordbrowser__update_field_sub_values('.$i.', '.$j.');')); $form->addElement('select', 'crits_'.$i.'_'.$j.'_sub_value', __('Subrecord Value'), array(), array('id'=>'crits_'.$i.'_'.$j.'_sub_value', 'style'=>'display:none;')); $js .= 'utils_recordbrowser__update_field_values('.$i.', '.$j.');'; } } $defaults = array(); foreach ($fields_permissions as $k=>$v) { $defaults['field_'.$k] = 1; $form->addElement('checkbox', 'field_'.$k, _V($this->table_rows[$v]['name'])); } $theme->assign('labels', array( 'and' => '<span class="joint">'.__('and').'</span>', 'or' => '<span class="joint">'.__('or').'</span>', 'caption' => $id?__('Edit permission rule'):__('Add permission rule'), 'clearance' => __('Clearance requried'), 'fields' => __('Fields allowed'), 'crits' => __('Criteria required'), 'add_clearance' => __('Add clearance'), 'add_or' => __('Add criteria (or)'), 'add_and' => __('Add criteria (and)') )); $current_clearance = 0; $sub_values = array(); if ($id!==null && $this->tab!='__RECORDSETS__' && !preg_match('/,/',$this->tab)) { $row = DB::GetRow('SELECT * FROM '.$this->tab.'_access AS acs WHERE id=%d', array($id)); $defaults['action'] = $row['action']; $crits = unserialize($row['crits']); $i = 0; $j = 0; $or = false; $first = true; foreach ($crits as $k=>$v) { $operator = '='; while (($k[0]<'a' || $k[0]>'z') && ($k[0]<'A' || $k[0]>'Z') && $k[0]!=':') { if ($k[0]=='!') $operator = '!'; if ($k[0]=='(' && $or) $or = false; if ($k[0]=='|') $or = true; if ($k[0]=='<') $operator = '<'; if ($k[0]=='>') $operator = '>'; if ($k[0]=='~') $operator = DB::like(); if ($k[1]=='=' && $operator!=DB::like()) { $operator .= '='; $k = substr($k, 2); } else $k = substr($k, 1); } if (!$first) { if ($or) $j++; else { $current_or[$i] += $j; $j = 0; $i++; } } else { $first = false; } $sub_value = null; if (!isset($r[$k]) && $k[strlen($k)-1]==']') { $sub_value = $v; list($k, $v) = explode('[', trim($k, ']')); } $defaults['crits_'.$i.'_'.$j.'_field'] = $k; $defaults['crits_'.$i.'_'.$j.'_op'] = $operator; $js .= '$("crits_'.$i.'_'.$j.'_value").value = "'.$v.'";'; if ($sub_value!==null) $sub_values['crits_'.$i.'_'.$j.'_sub_value'] = $sub_value; } $current_or[$i] += $j; $current_and += $i; $i = 0; $tmp = DB::GetAll('SELECT * FROM '.$this->tab.'_access_clearance AS acs WHERE rule_id=%d', array($id)); foreach ($tmp as $t) { $defaults['clearance_'.$i] = $t['clearance']; $i++; } $current_clearance += $i-1; $tmp = DB::GetAll('SELECT * FROM '.$this->tab.'_access_fields AS acs WHERE rule_id=%d', array($id)); foreach ($tmp as $t) { unset($defaults['field_'.$t['block_field']]); } } for ($i=0; $i<$counts['ands']; $i++) for ($j=0; $j<$counts['ors']; $j++) $js .= 'utils_recordbrowser__update_field_sub_values('.$i.', '.$j.');'; foreach ($sub_values as $k=>$v) $js .= '$("'.$k.'").value = "'.$v.'";'; $form->setDefaults($defaults); if ($form->validate()) { $vals = $form->exportValues(); $action = $vals['action']; $clearance = array(); for ($i=0; $i<$counts['clearance']; $i++) if ($vals['clearance_'.$i]) $clearance[] = $vals['clearance_'.$i]; $crits = array(); for ($i=0; $i<$counts['ands']; $i++) { $or = '('; for ($j=0; $j<$counts['ors']; $j++) { if ($vals['crits_'.$i.'_'.$j.'_field'] && $vals['crits_'.$i.'_'.$j.'_op']) { if (!isset($operators[$vals['crits_'.$i.'_'.$j.'_op']])) trigger_error('Fatal error',E_USER_ERROR); if (!isset($all_fields[$vals['crits_'.$i.'_'.$j.'_field']])) trigger_error('Fatal error',E_USER_ERROR); $op = $vals['crits_'.$i.'_'.$j.'_op']; if ($op=='=') $op = ''; if (isset($vals['crits_'.$i.'_'.$j.'_sub_value'])) { $vals['crits_'.$i.'_'.$j.'_field'] = $vals['crits_'.$i.'_'.$j.'_field'].'['.$vals['crits_'.$i.'_'.$j.'_value'].']'; $vals['crits_'.$i.'_'.$j.'_value'] = $vals['crits_'.$i.'_'.$j.'_sub_value']; } $next = array($or.$op.$vals['crits_'.$i.'_'.$j.'_field'] => $vals['crits_'.$i.'_'.$j.'_value']); $crits = Utils_RecordBrowserCommon::merge_crits($crits, $next); } $or = '|'; } } $blocked_fields = array(); foreach ($fields_permissions as $k=>$v) { if (isset($vals['field_'.$k])) continue; $blocked_fields[] = $k; } if ($id===null || $clone) Utils_RecordBrowserCommon::add_access($this->tab, $action, $clearance, $crits, $blocked_fields); else Utils_RecordBrowserCommon::update_access($this->tab, $id, $action, $clearance, $crits, $blocked_fields); return false; } eval_js($js); eval_js('utils_recordbrowser__init_clearance('.$current_clearance.', '.$counts['clearance'].')'); eval_js('utils_recordbrowser__init_crits_and('.$current_and.', '.$counts['ands'].')'); for ($i=0; $i<$counts['ands']; $i++) eval_js('utils_recordbrowser__init_crits_or('.$i.', '.$current_or[$i].', '.$counts['ors'].')'); eval_js('utils_recordbrowser__crits_initialized = true;'); $form->assign_theme('form', $theme); $theme->assign('fields', $fields_permissions); $theme->assign('counts', $counts); $theme->display('edit_permissions'); Base_ActionBarCommon::add('save', __('Save'), $form->get_submit_form_href()); Base_ActionBarCommon::add('delete', __('Cancel'), $this->create_back_href()); return true; }
public static function QFfield_contact(&$form, $field, $label, $mode, $default, $desc, $rb_obj = null) { $cont = array(); $param = explode(';', $desc['param']); if ($mode == 'add' || $mode == 'edit') { $adv_crits = null; if (!isset($param[1]) || $param[1] == '::') { $callback = array('CRM_ContactsCommon', 'contact_format_default'); } else { $callback = explode('::', $param[1]); } if (isset($param[2]) && $param[2] != '::') { $crit_callback = explode('::', $param[2]); if ($crit_callback[0] == 'ChainedSelect') { $crits = null; } elseif (is_callable($crit_callback)) { $crits = call_user_func($crit_callback, false); $adv_crits = call_user_func($crit_callback, true); if ($adv_crits === $crits) { $adv_crits = null; } } else { $crits = array(); $adv_crits = null; } } else { $crits = array(); } if ($crits === true) { $crits = $adv_crits; } if ($desc['type'] != 'multiselect' && (!isset($crit_callback) || $crit_callback[0] != 'ChainedSelect')) { $cont[''] = '---'; } $limit = false; if ($crits !== null) { $amount = Utils_RecordBrowserCommon::get_records_count('contact', $crits); $base_crits = $crits; if ($amount > Utils_RecordBrowserCommon::$options_limit) { $limit = Utils_RecordBrowserCommon::$options_limit; if ($desc['type'] == 'select') { $present = false; foreach ($crits as $k => $v) { if (strstr($k, ':Recent')) { $present = true; break; } } if (!$present) { $base_crits = Utils_RecordBrowserCommon::merge_crits($base_crits, array(':Recent' => true)); } } } $contacts = self::get_contacts($base_crits, array(), array(), $limit); if (!is_array($default)) { if ($default != '') { $default = array($default); } else { $default = array(); } } $ext_rec = array_flip($default); foreach ($contacts as $v) { $cont[$v['id']] = call_user_func($callback, $v, true); unset($ext_rec[$v['id']]); } foreach ($ext_rec as $k => $v) { $c = CRM_ContactsCommon::get_contact($k); if ($c === null) { continue; } $cont[$k] = call_user_func($callback, $c, true); } uasort($cont, array('CRM_ContactsCommon', 'compare_names')); } $label = Utils_RecordBrowserCommon::get_field_tooltip($label, $desc['type'], 'contact', $crits); if ($desc['type'] == 'select') { if (is_numeric($limit)) { unset($cont['']); $form->addElement('autoselect', $field, $label, $cont, array(array('CRM_ContactsCommon', 'autoselect_contact_suggestbox'), array($crits, $callback)), $callback, array('id' => $field)); } else { $form->addElement($desc['type'], $field, $label, $cont, array('id' => $field)); } } else { if ($adv_crits !== null || is_numeric($limit)) { $form->addElement('automulti', $field, $label, array('CRM_ContactsCommon', 'autoselect_contact_suggestbox'), array($adv_crits !== null ? $adv_crits : $crits, $callback), $callback); } else { $form->addElement($desc['type'], $field, $label, $cont, array('id' => $field)); } } $form->setDefaults(array($field => $default)); if (isset($param[2]) && $param[2] != '::') { if ($crit_callback[0] == 'ChainedSelect') { if ($form->exportValue($field)) { $default = $form->exportValue($field); } self::contacts_chainedselect_crits($default, $desc, $callback, $crit_callback[1]); } } } else { $callback = $rb_obj->get_display_method($desc['name']); if (!is_callable($callback)) { $callback = array('CRM_ContactsCommon', 'display_contact'); } $def = call_user_func($callback, $rb_obj->record, false, $desc); // $def = call_user_func($callback, array($field=>$default), false, $desc); $form->addElement('static', $field, $label, $def); } }