Esempio n. 1
0
 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');
 }
Esempio n. 2
0
	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;
	}
Esempio n. 3
0
 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);
     }
 }