HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/web/itpartnership.net (cms)/modules/FeedbackForm/FeedbackForm.module.php
<?php
#-------------------------------------------------------------------------
# Module: Feedback Form
# Version: 0.9.14, released 6 March 2006
#
# Copyright (c) 2006, Samuel Goldstein <sjg@cmsmodules.com>
# For Information, Support, Bug Reports, etc, please visit the
# CMS Made Simple tracker at http://dev.cmsmadesimple.org
#
#-------------------------------------------------------------------------
# CMS - CMS Made Simple is (c) 2006 by Ted Kulp (wishy@cmsmadesimple.org)
# This project's homepage is: http://www.cmsmadesimple.org
#
#-------------------------------------------------------------------------
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# Or read it online: http://www.gnu.org/licenses/licenses.html#GPL
#
#-------------------------------------------------------------------------
class FeedbackForm extends CMSModule
{

	var $form_table_name;
	var $field_table_name;
	var $option_table_name;
	var $config_table_name;
	var $flock_table_name;
	var $field_types;
	var $disp_field_types;
	var $all_validation_types;
	var $mod_globals;



	function FeedbackForm()
	{
	  $this->CMSModule();
		
	  $this->form_table_name = cms_db_prefix() . 'module_feedback_form';
	  $this->field_table_name = cms_db_prefix().'module_feedback_field';
	  $this->option_table_name = cms_db_prefix().'module_feedback_option';
	  $this->config_table_name = cms_db_prefix().'module_feedback_config';
	  $this->flock_table_name = cms_db_prefix().'module_feedback_flock';

	  require_once 'classes/UtilityFunctions.class.php';
	  require_once 'classes/Form.class.php';
	  require_once 'classes/Input.class.php';
	  require_once 'classes/Option.class.php';
	  require_once 'classes/Config.class.php';
	}


	function initialize()
	{
	  if (ffUtilityFunctions::def($this->mod_globals))
	    {
	      return;
	    }
	  $this->mod_globals = new ffConfig(array());
	  $this->mod_globals->DBHandle =& $this->GetDb();
	  $this->mod_globals->FormTableName =$this->form_table_name;
	  $this->mod_globals->FieldTableName =$this->field_table_name;
	  $this->mod_globals->OptionTableName =$this->option_table_name;
	  $this->mod_globals->ConfigTableName =$this->config_table_name;
	  $this->mod_globals->FlockTableName =$this->flock_table_name;
	  $this->mod_globals->RootPath =$this->cms->config['root_path'];
	  $this->mod_globals->MaxUploadSize =$this->cms->config['max_upload_size'];
	  $this->mod_globals->selfptr = &$this;
	  $this->mod_globals->Load();

	  $this->field_types = array(
            $this->Lang('field_type_text_input')=>'TextInput',
            $this->Lang('field_type_text_area')=>'TextAreaInput',
            $this->Lang('field_type_checkbox')=>'CheckboxInput',
            $this->Lang('field_type_checkbox_group')=>'CheckboxGroupInput',
            $this->Lang('field_type_pulldown')=>'PulldownInput',
            $this->Lang('field_type_radio_group')=>'RadioGroupInput',
            $this->Lang('field_type_state')=>'StateInput',
            $this->Lang('field_type_country')=>'CountryInput',
            $this->Lang('field_type_country')=>'CountryInput',
            $this->Lang('field_type_date')=>'DatePicker',
            $this->Lang('field_type_callback')=>'FunctionCallInput',
            $this->Lang('field_type_file_upload')=>'FileUpload',
            $this->Lang('field_type_disposition_director')=>'DispositionDirector',
            $this->Lang('field_type_disposition_email')=>'DispositionEmail',
            $this->Lang('field_type_disposition_email_site_user')=>'DispositionSiteUser',
            $this->Lang('field_type_disposition_file')=>'DispositionFile',
            $this->Lang('field_type_page_break')=>'PageBreak',
            $this->Lang('field_type_static_text')=>'StaticTextInput'
            );
	  foreach ($this->field_types as $tName=>$tType)
	    {
	      if (substr($tType,0,11) == 'Disposition')
		{
		  $this->disp_field_types[$tName]=$tType;
		}
	    }
	  $this->all_validation_types = array();
	  
	}

	function GetName()
	{
		return 'FeedbackForm';
	}

	function MinimumCMSVersion()
	{
	  return '1.0-svn';
	}

	function GetVersion()
	{
		return '0.9.14';
	}

	function GetAuthor()
	{
		return 'SjG';
	}

	function GetAuthorEmail()
	{
		return 'sjg@cmsmodules.com';
	}

	function GetAdminDescription()
	{
	  $this->initialize();
	  return $this->Lang('admindesc');
	}

	function GetDependencies()
	{
		return array('CMSMailer'=>'1.73.4');
	}


	function GetChangeLog()
	{
		return $this->Lang('changelog');
	}

	function IsPluginModule()
	{
		return true;
	}

	function HasAdmin()
	{
		return true;
	}

	function InstallPostMessage()
	{
		return $this->Lang('post_install');
	}

	function DoAction($name, $id, $params, $return_id='')
	{
		$this->initialize();
		$this->mod_globals->ModuleInputPrefix = $id;
		switch ($name)
		{
			case 'defaultadmin':
			case 'admin_main_feedback':
 				 $this->AdminMain($id, $params, $return_id);
			     break;
			case 'admin_edit_feedback_form':
			case 'admin_add_feedback_form':
 				 if ($this->CheckAccess())
 				 	{
 				 	$this->AdminAddEditForm($id, $params, $return_id);
			     	}
			     break;
			case 'admin_form_update':
			     if ($this->CheckAccess())
			         {
				    $this->AdminStoreForm($id, $params, $return_id);
				     }
				break;
			case 'admin_edit_feedback_field':
			case 'admin_add_feedback_field':
			     if ($this->CheckAccess())
			         {
 				     $this->AdminAddEditField($id, $params, $return_id);
 				     }
			     break;
            case 'admin_field_order_update':
                if ($this->CheckAccess())
                    {
                    $this->AdminUpdateFieldOrder($id, $params, $return_id);
                    }
                break;
            case 'admin_field_required_update':
                if ($this->CheckAccess())
                    {
                    $this->AdminUpdateFieldRequired($id, $params, $return_id);
                    }
                break;
            case 'admin_field_update':
                if ($this->CheckAccess())
                    {
                    $this->AdminStoreField($id, $params, $return_id);
                    }
                break;
			case 'admin_delete_feedback_field':
			     if ($this->CheckAccess())
			         {
 				     $this->AdminDeleteField($id, $params, $return_id);
 				     }
			     break;
			case 'admin_delete_feedback_form':
			     if ($this->CheckAccess())
			         {
 				     $this->AdminDeleteForm($id, $params, $return_id);
 				     }
			     break;
			case 'admin_config_feedback_update':
			     if ($this->CheckAccess())
			         {
 				     $this->AdminStoreConfig($id, $params, $return_id);
 				     }
			     break;
		    case 'default':
			    $this->PublicShowForm($id, $params, $return_id);
				break;
			case 'submit_form':
				// handle multipart forms
				if (! ffUtilityFunctions::def($params['done']))
					{
					$this->PublicShowForm($id, $params, $return_id);
					}
				else
					{
			    	$this->PublicSubmitForm($id, $params, $return_id);
			    	}
				break;
		}
	}

	function PublicSubmitForm($id, &$params, $return_id)
	{
        if (! ffUtilityFunctions::def($params['form_id']) &&
            ffUtilityFunctions::def($params['form']))
            {
            // get the form by name, not ID
            $params['form_id'] = $this->GetFormIDFromAlias($params['form']);
            }
        $aeform = new ffForm($this->mod_globals,$params);
        $aeform->LoadForm($params);
        $res = $aeform->Validate();
        if ($res[0] === false)
        	{
        	$aeform->RenderFormHeader($this->GetVersion());
            $aeform->thisPage--;
        	echo $res[1]."\n";
        	echo $this->CreateFormStart($id, 'submit_form', $return_id, 'post', 'multipart/form-data');
        	$aeform->RenderForm($id, $params, $return_id);
        	echo $this->CreateFormEnd();
        	$aeform->RenderFormFooter();
        	}
        else
        	{
        	$aeconf = &$this->mod_globals;
        	$aeconf->Load();
        	if ($aeform->CSSClass != '')
        	   {
        	   echo "<div class=\"" . $aeform->CSSClass . "\">";
        	   }
        	if ($aeform->Dispose($aeconf))
        	   {
        	   echo $aeform->ThanksMessage;
        	   }
        	else
        	   {
        	   echo $this->Lang('submission_error');
        	   }
        	if ($aeform->CSSClass != '')
        	   {
        	   echo "</div>";
        	   }
        	}
	}

	function PublicShowForm($id, &$params, $return_id)
	{
//debug_display($params);
        if (! ffUtilityFunctions::def($params['form_id']) &&
            ffUtilityFunctions::def($params['form']))
            {
            // get the form by name, not ID
            $params['form_id'] = $this->GetFormIDFromAlias($params['form']);
            }
        $aeform = new ffForm($this->mod_globals,$params);
        $aeform->LoadForm($params);
        $aeform->RenderFormHeader($this->GetVersion());
        if ($aeform->formTotalPages > 1 && ffUtilityFunctions::def($aeform->thisPage) && $aeform->thisPage > 0)
            {
//echo "validating page :".$aeform->thisPage."<br/>";
            $res = $aeform->Validate();
            if ($res[0] === false)
                {
                echo $res[1]."\n";
                $aeform->thisPage--;
                }
            }
//echo "not validating page :".$aeform->thisPage.": ".$aeform->formTotalPages." ".ffUtilityFunctions::def($aeform->thisPage).":".$aeform->thisPage."<br/>";
        echo $this->CreateFormStart($id, 'submit_form', $return_id, 'post', 'multipart/form-data');
        $aeform->RenderForm($id, $params, $return_id);
        echo $this->CreateFormEnd();
        $aeform->RenderFormFooter();
        }

	function CheckAccess($permission='Modify Feedback Forms')
	{

		$access = $this->CheckPermission($permission);
		if (!$access)  {
			echo "<p class=\"error\">".$this->Lang('you_need_permission1').$permission.$this->Lang('you_need_permission2')."</p>";
			return false;
		}
		else return true;
	}

	function AdminMain($id, &$params, $returnid)
	{
		// and a list of all the extant forms.
		global $gCms;
		$theme = $gCms->variables['admintheme'];
        $forms = $this->GetForms();
		$num_forms = count($forms);
        $aeconf = &$this->mod_globals;
        $aeconf->Load();
        
        $this->smarty->assign('tabheaders', $this->StartTabHeaders() .
			$this->SetTabHeader('forms',$this->Lang('forms')) .
			$this->SetTabHeader('config',$this->Lang('configuration')) .
			$this->EndTabHeaders().
			$this->StartTabContent());
		$this->smarty->assign('start_formtab',$this->StartTab("forms"));
		$this->smarty->assign('start_configtab',$this->StartTab("config"));
		$this->smarty->assign('end_tab',$this->EndTab());
		$this->smarty->assign('end_tabs',$this->EndTabContent());
		$this->smarty->assign('title_form_name',$this->Lang('title_form_name'));
        $this->smarty->assign('title_tag_to_use',$this->Lang('title_tag_to_use'));
        $this->smarty->assign('title_id_and_name',$this->Lang('title_id_and_name'));
        $this->smarty->assign('start_configform',$this->CreateFormStart($id,
			'admin_config_feedback_update', $returnid) .
			$this->CreateInputHidden($id, 'config_id', $aeconf->ConfigId));
        if (isset($params['message']))
            {
            $this->smarty->assign_by_ref('message', $params['message']);
            }

		$formArray = array();
		$currow = "row1";
		foreach ($forms as $thisForm)
    		{
			$oneset = new stdClass();
			$oneset->rowclass = $currow;
			if ($this->CheckPermission('Modify Feedback Forms'))
				{
				$oneset->name = $this->CreateLink($id,
				 	'admin_edit_feedback_form', '',
            		$thisForm['name'], array('form_id'=>$thisForm['form_id']));
				$oneset->editlink = $this->CreateLink($id,
					'admin_edit_feedback_form', '',
					$theme->DisplayImage('icons/system/edit.gif','edit','','','systemicon'),
						array('form_id'=>$thisForm['form_id']));
				$oneset->deletelink = $this->CreateLink($id,
					'admin_delete_feedback_form', '',
					$theme->DisplayImage('icons/system/delete.gif','delete','','','systemicon'),
					array('form_id'=>$thisForm['form_id']),
					$this->Lang('are_you_sure_delete_form',$thisForm['name']));

				}
			else
				{
				$oneset->name=$thisForm['name'];
				$oneset->editlink = '';
				$oneset->deletelink = '';
				}
			$oneset->usage = $thisForm['alias'];
			array_push($formArray,$oneset);
			($currow == "row1"?$currow="row2":$currow="row1");
			}
		if ($this->CheckPermission('Modify Feedback Forms'))
			{
			$this->smarty->assign('addlink',$this->CreateLink($id,
				'admin_add_feedback_form', '',
				$theme->DisplayImage('icons/system/newobject.gif', $this->Lang('title_add_new_form'),'',
					'','systemicon'), array()));
			$this->smarty->assign('addform',$this->CreateLink($id,
				'admin_add_feedback_form', '', $this->Lang('title_add_new_form'),
				array()));
			$this->smarty->assign('may_config',1);
			}
		else
			{
			$this->smarty->assign('no_permission',
				$this->Lang('lackpermission'));
			}

		$this->smarty->assign('title_email_from_name',$this->Lang('title_email_from_name'));
		$this->smarty->assign('input_email_from_name',$this->CreateInputText($id, 'from_name', $aeconf->FromName, 50));
		$this->smarty->assign('title_form_from_email',$this->Lang('title_form_from_email'));		
		$this->smarty->assign('input_form_from_email',$this->CreateInputText($id, 'from_address', $aeconf->FromAddress, 50));		
		$this->smarty->assign('title_hide_errors',$this->Lang('title_hide_errors'));		
		$this->smarty->assign('input_hide_errors',$this->CreateInputCheckbox($id, 'hide_errors', 1, $aeconf->HideErrors). $this->Lang('title_hide_errors_long'));		
		$this->smarty->assign('title_css_layout',$this->Lang('title_css_layout'));		
		$this->smarty->assign('input_css_layout',$this->CreateInputCheckbox($id, 'css_layout', 1, $aeconf->UseCSS). $this->Lang('title_use_css_layout'));			$this->smarty->assign('input_id_and_name',$this->CreateInputCheckbox($id, 'use_id_and_name', 1, $aeconf->UseIDAndName). $this->Lang('title_id_and_name'));		
		$this->smarty->assign('title_table_layout_type',$this->Lang('title_table_layout_type'));
		$pos = array($this->Lang('title_table_layout_left')=>0,$this->Lang('title_table_layout_above')=>1);	
		$this->smarty->assign('input_table_layout_type',$this->CreateInputRadioGroup($id, 'table_layout_title_pos', $pos, $aeconf->TitlePosition)	);		
		$this->smarty->assign('submit', $this->CreateInputSubmit($id, 'submit', $this->Lang('save')));
		$this->smarty->assign('config_formend',$this->CreateFormEnd());
		
        $this->smarty->assign_by_ref('forms', $formArray);			
        echo $this->ProcessTemplate('AdminMain.tpl');
	}

	function AdminAddEditForm($id, &$params, $returnid)
	{
		global $gCms;
		$theme = $gCms->variables['admintheme'];
		$aeform = new ffForm($this->mod_globals, $params);
        if (ffUtilityFunctions::def($params['form_id']))
            {
            $aeform->Load($params['form_id'],$params,true);
            }
            
		$this->smarty->assign('formstart', $this->CreateFormStart($id, 'admin_form_update', $returnid));
		$this->smarty->assign('formid',$this->CreateInputHidden($id, 'form_id', $aeform->FormId));
		$this->smarty->assign('tab_start',$this->StartTabHeaders().
			$this->SetTabHeader('maintab',$this->Lang('main')).
			$this->SetTabHeader('addition',$this->Lang('additional')).
			$this->EndTabHeaders() . $this->StartTabContent());

		$this->smarty->assign('tabs_end',$this->EndTabContent());
		$this->smarty->assign('maintab_start',$this->StartTab("maintab"));
		$this->smarty->assign('additionaltab_start',$this->StartTab("addition"));
		$this->smarty->assign('tab_end',$this->EndTab());
		$this->smarty->assign('form_end',$this->CreateFormEnd());
		$this->smarty->assign('title_form_name',$this->Lang('title_form_name'));
		$this->smarty->assign('input_form_name',$this->CreateInputText($id, 'form_name', $aeform->Name, 50));
		$this->smarty->assign('title_form_status',$this->Lang('title_form_status'));
		$this->smarty->assign('text_ready',$this->Lang('title_ready_for_deployment'));
		$this->smarty->assign('title_form_alias',$this->Lang('title_form_alias'));
		$this->smarty->assign('input_form_alias',$this->CreateInputText($id, 'form_alias', $aeform->Alias, 50));
		$this->smarty->assign('title_form_css_class',$this->Lang('title_form_css_class'));
		$this->smarty->assign('input_form_css_class',$this->CreateInputText($id, 'form_css_class', isset($aeform->CSSClass)?$aeform->CSSClass:'feedbackform', 50));
		$this->smarty->assign('title_form_fields',$this->Lang('title_form_fields'));
		$this->smarty->assign('title_field_name',$this->Lang('title_field_name'));
		$this->smarty->assign('title_field_type',$this->Lang('title_field_type'));
		$this->smarty->assign('title_field_required_abbrev',$this->Lang('title_field_required_abbrev'));
		$this->smarty->assign('title_information',$this->Lang('information'));
		$this->smarty->assign('title_order',$this->Lang('order'));            
		$this->smarty->assign('link_notready',"<strong>".$this->Lang('title_not_ready1')."</strong><P>".$this->Lang('title_not_ready2')." ".$this->CreateLink($id, 'admin_add_feedback_field', $returnid,$this->Lang('title_not_ready_link'),array('form_id'=>$aeform->FormId, 'order_by'=>count($aeform->Fields)+1,'dispose_only'=>1), '', false)." ".$this->Lang('title_not_ready3')."</p>");
		$this->smarty->assign('hasdisposition',$aeform->HasDisposition()?1:0);

		if($aeform->FormId > 0)
    	{
    		$this->smarty->assign('submit_button', $this->CreateInputSubmit($id, 'submit',  $this->Lang('save_and_continue')));
    		$this->smarty->assign('hidden',$this->CreateInputHidden($id, 'form_op',$this->Lang('updated')));
			$this->smarty->assign('adding',0);
			$this->smarty->assign('save_button',$this->CreateInputSubmit($id, 'submit', $this->Lang('save')));
			$fieldList = array();
			$currow = "row1";
			$count = 1;
			$last = count($aeform->Fields);
			foreach ($aeform->Fields as $thisField)
				{
				$oneset = new stdClass();
				$oneset->rowclass = $currow;
				$oneset->name = $this->CreateLink($id, 'admin_edit_feedback_field', '', $thisField->Name, array('field_id'=>$thisField->FieldId,'form_id'=>$aeform->FormId));
				$oneset->type = $thisField->DisplayType;
				if ($thisField->IsDisposition || !$thisField->DisplayInForm)
					{
					$oneset->disposition = $theme->DisplayImage('icons/system/true.gif','true','','','systemicon');
					}
				else if ($thisField->Required)
					{
					$oneset->disposition = $this->CreateLink($id, 'admin_field_required_update', '', $theme->DisplayImage('icons/system/true.gif','true','','','systemicon'), array('form_id'=>$aeform->FormId,'field_index'=>$count-1,'active'=>'off'));
					}
				else
					{
					$oneset->disposition = $this->CreateLink($id, 'admin_field_required_update', '', $theme->DisplayImage('icons/system/false.gif','false','','','systemicon'), array('form_id'=>$aeform->FormId,'field_index'=>$count-1,'active'=>'on'));
					}
				$oneset->field_status = $thisField->StatusInfo();
				if ($count > 1)
					{
					$oneset->up = $this->CreateLink($id, 'admin_field_order_update', '', $theme->DisplayImage('icons/system/arrow-u.gif','up','','','systemicon'), array('form_id'=>$aeform->FormId,'field_index'=>$count-1,'dir'=>'up'));
					}
				else
					{
					$oneset->up = '&nbsp;';
					}
				if ($count < $last)
					{
					$oneset->down=$this->CreateLink($id, 'admin_field_order_update', '', $theme->DisplayImage('icons/system/arrow-d.gif','down','','','systemicon'), array('form_id'=>$aeform->FormId,'field_index'=>$count-1,'dir'=>'down'));
					}
				else
					{
					$oneset->down = '&nbsp;';
					}
				$oneset->editlink = $this->CreateLink($id, 'admin_edit_feedback_field', '', $theme->DisplayImage('icons/system/edit.gif','edit','','','systemicon'), array('field_id'=>$thisField->FieldId,'form_id'=>$aeform->FormId));
				$oneset->deletelink = $this->CreateLink($id, 'admin_delete_feedback_field', '', $theme->DisplayImage('icons/system/delete.gif','delete','','','systemicon'), array('field_id'=>$thisField->FieldId,'form_id'=>$aeform->FormId),$this->Lang('are_you_sure_delete_field',$thisField->Name));
				($currow == "row1"?$currow="row2":$currow="row1");
				$count++;
				array_push($fieldList, $oneset);
				}
			$this->smarty->assign('fields',$fieldList);
			$this->smarty->assign('add_field_link',$this->CreateLink($id, 'admin_add_feedback_form', $returnid,$theme->DisplayImage('icons/system/newobject.gif',$this->Lang('title_add_new_field'),'','','systemicon'),array('form_id'=>$aeform->FormId, 'order_by'=>$count), '', false) . $this->CreateLink($id, 'admin_add_feedback_field', $returnid,$this->Lang('title_add_new_field'),array('form_id'=>$aeform->FormId, 'order_by'=>$count), '', false));			
		}
		else
		{
			$this->smarty->assign('submit_button', $this->CreateInputSubmit($id, 'submit', $this->Lang('add')));
    		$this->smarty->assign('hidden',$this->CreateInputHidden($id, 'form_op',$this->Lang('added')));
			$this->smarty->assign('adding',1);
		}
		$this->smarty->assign('title_form_submit_button',$this->Lang('title_form_submit_button'));
		$this->smarty->assign('input_form_submit_button',$this->CreateInputText($id, 'form_submit_button_text', ffUtilityFunctions::def($aeform->SubmitButtonText)?$aeform->SubmitButtonText:'Submit Form', 35, 35));
		$this->smarty->assign('title_form_next_button',$this->Lang('title_form_next_button'));
		$this->smarty->assign('input_form_next_button',$this->CreateInputText($id, 'form_next_button_text', ffUtilityFunctions::def($aeform->NextButtonText)?$aeform->NextButtonText:'Continue...', 35, 35));
		$this->smarty->assign('title_form_thanks_text',$this->Lang('title_form_thanks_text'));
		$this->smarty->assign('input_form_thanks_text',$this->CreateTextArea(false, $id, ffUtilityFunctions::def($aeform->ThanksMessage)?$aeform->ThanksMessage:'Thanks!', 'form_thanks_message', '', '', '', ''));
		$this->smarty->assign('title_form_required_symbol',$this->Lang('title_form_required_symbol'));
		$this->smarty->assign('input_form_required_symbol',$this->CreateInputText($id, 'form_required_field_symbol', ffUtilityFunctions::def($aeform->RequiredFieldSymbol)?$aeform->RequiredFieldSymbol:'*', 50));
		$this->smarty->clear_cache('AddEditForm.tpl');
        echo $this->ProcessTemplate('AddEditForm.tpl');
	}

	function AdminAddEditField($id, &$params, $returnid, $message='')
	{
        $emptyArr = array();
		$aeform = new ffForm($this->mod_globals, $emptyArr);
        // gosh, do I really have to do this?
        $aeform->Load($params['form_id'], $params, false);
        // this is sort of wasteful. We load our data into a
        // generic Input, then, if we have more information,
        // instantiate a new specific Input Class.
        $aefield = new ffInput($this->mod_globals,$aeform,$params);

        if ($aefield->FieldId > 0 )
            {
            // we're loading an extant field
            $aefield->Load($aefield->FieldId,false);
            }
		// what kind of field?
		// need to know what kind of object to instantiate!
        if (ffUtilityFunctions::def($aefield->Type))
            {
            // OK, instantiating a specific Input class.
            $className = $aeform->MakeClassName($aefield->Type, '');
            $aefield = new $className($this->mod_globals, $aeform, $params);
            $aefield->LoadField($params);
            }
		if (!ffUtilityFunctions::def($aefield->Type))
			{
			$this->smarty->assign('start_form',$this->CreateFormStart($id, 'admin_add_feedback_field', $returnid));
			$this->smarty->assign('type_set',0);
			}
		else
			{
			$this->smarty->assign('start_form',$this->CreateFormStart($id, 'admin_field_update', $returnid));
			$this->smarty->assign('type_set',1);
			}
		$this->smarty->assign('end_form', $this->CreateFormEnd());
		if($aefield->FieldId > 0)
			{
			$this->smarty->assign('op',$this->CreateInputHidden($id, 'op',$this->Lang('updated')));
			$this->smarty->assign('submit',$this->CreateInputSubmit($id, '', $this->Lang('update')));
			}
		else
			{
			$this->smarty->assign('op',$this->CreateInputHidden($id, 'op', $this->Lang('added')));
			$this->smarty->assign('submit',$this->CreateInputSubmit($id, '', $this->Lang('add')));
			}

		$this->smarty->assign('hidden', $this->CreateInputHidden($id, 'form_id', $aefield->FormId) . $this->CreateInputHidden($id, 'field_id', $aefield->FieldId) . $this->CreateInputHidden($id, 'order_by', $aefield->OrderBy));
		$this->smarty->assign('title_field_name',$this->Lang('title_field_name'));
		$this->smarty->assign('input_field_name', $this->CreateInputText($id, 'name', $aefield->Name, 50));
		$this->smarty->assign('title_field_type',$this->Lang('title_field_type'));
		
		if (!ffUtilityFunctions::def($aefield->Type))
			{
			if (ffUtilityFunctions::def($params['dispose_only']))
				{
				$this->smarty->assign('input_field_type',
			           $this->CreateInputDropdown($id, 
							      'type',
							      array_merge(array($this->Lang('select_type')=>''),$this->disp_field_types), 
							      -1,'', 'onchange="this.form.submit()"'));
				}
			else
				{
				$this->smarty->assign('input_field_type',$this->CreateInputDropdown($id, 'type',array_merge(array($this->Lang('select_type')=>''),$this->field_types), -1,'', 'onchange="this.form.submit()"'));
				}
			}
		else
			{
			$this->smarty->assign('input_field_type',$aefield->DisplayType.$this->CreateInputHidden($id, 'type', $aefield->Type));
			}

		if (!$aefield->IsDisposition && !$aefield->specialInput)
			{
			$this->smarty->assign('requirable',1);
			}
		else
			{
			$this->smarty->assign('requirable',0);
			}
		$this->smarty->assign('title_field_required',$this->Lang('title_field_required'));
		$this->smarty->assign('input_field_required',$this->CreateInputCheckbox($id, 'required', 1, $aefield->Required).$this->Lang('title_field_required_long'));
		$this->smarty->assign('title_show_label',$this->Lang('title_show_label'));
		$this->smarty->assign('input_show_label',$this->CreateInputCheckbox($id, 'show_label', 1, $aefield->ShowLabel).$this->Lang('title_show_label_long'));


		$this->smarty->assign('title_field_validation',$this->Lang('title_field_validation'));
		if (count($aefield->ValidationTypes) > 1)
			{
			$this->smarty->assign('input_field_validation',$this->CreateInputDropdown($id, 'validation_type', $aefield->ValidationTypes, -1, $aefield->ValidationType));
			}
		else
			{
			$this->smarty->assign('input_field_validation',$this->Lang('automatic'));
			}

		if ($aefield->DisplayInForm)
			{
			$this->smarty->assign('displayinform',1);
			}
		else
			{
			$this->smarty->assign('displayinform',0);
			}
		$this->smarty->assign('title_field_css_class',$this->Lang('title_field_css_class'));
		$this->smarty->assign('input_field_css_class',$this->CreateInputText($id, 'css_class', $aefield->CSSClass, 50));
		$attrList = array();
		foreach ($aefield->RenderAdminForm($id) as $titleStr=>$inputStr)
			{
			$oneset = new stdClass();
			$oneset->title = $titleStr;
			$oneset->input = $inputStr;
			array_push($attrList,$oneset);
			}
		$this->smarty->assign('message',$message);
		$this->smarty->assign('otherAttrs',$attrList);
		$this->smarty->clear_cache('AddEditField.tpl');
        echo $this->ProcessTemplate('AddEditField.tpl');
    }

    function AdminStoreField($id, &$params, $returnid)
    {
        $emptyArr = array();
        $aeform = new ffForm($this->mod_globals,$emptyArr);
        $aefield = new ffInput($this->mod_globals,$aeform,$params);
        if (ffUtilityFunctions::def($aefield->Type))
            {
            // OK, instantiating a specific Input class.
            $className = $aeform->MakeClassName($aefield->Type, '');
            $aefield = new $className($this->mod_globals, $aeform, $params);
            }
        $val = $aefield->AdminValidate();
        if ($val[0])
            {
            $aefield->Store(true);
		    $url = $this->CreateLink($id, 'admin_edit_feedback_form', $returnid, '',
		    	array('form_id'=>$aefield->FormId,'message'=>$this->Lang('field')." ".$params['op']), '', true);
		    $url = str_replace('&amp;', '&', $url);
		    redirect($url);
            }
		else
		    {
            $aefield->LoadField($params);
            //$params['message']=$val[1];
        	//include "includes/AddEditField.inc";
        	return $this->AdminAddEditField($id, $params, $returnid, $val[1]);
            }
    }

    function AdminUpdateFieldOrder($id, &$params, $returnid)
    {

        $aeform = new ffForm($this->mod_globals, $params);
        $aeform->LoadForm($params);
        $srcIndex = intval($params['field_index']);

        $srcField = $aeform->Fields[$srcIndex];
        if ($params['dir'] == 'up')
            {
            $destIndex = $srcIndex - 1;
            }
        else
            {
            $destIndex = $srcIndex + 1;
            }
        $destField = $aeform->Fields[$destIndex];
        $tmpOrderBy = $destField->OrderBy;
        $destField->OrderBy = $srcField->OrderBy;
        $srcField->OrderBy = $tmpOrderBy;
        $srcField->Store();
        $destField->Store();


		$url = $this->CreateLink($id, 'admin_edit_feedback_form', $returnid, '',
			array('form_id'=>$aeform->FormId,'message'=>$this->Lang('field_order_updated')), '', true);
		$url = str_replace('&amp;', '&', $url);
        redirect($url);
    }

    function AdminUpdateFieldRequired($id, &$params, $returnid)
    {

        $aeform = new ffForm($this->mod_globals, $params);
        $aeform->LoadForm($params);
        $srcIndex = intval($params['field_index']);

        $srcField = $aeform->Fields[$srcIndex];
        $srcField->Required = 1;
        if ($params['active'] == 'off')
            {
            $srcField->Required = 0;
            }
		$srcField->Store();

		$url = $this->CreateLink($id, 'admin_edit_feedback_form', $returnid, '',
			array('form_id'=>$aeform->FormId,'message'=>$this->Lang('field_requirement_updated')), '', true);
		$url = str_replace('&amp;', '&', $url);
        redirect($url);
    }


    function AdminDeleteForm($id, &$params, $returnid)
	{
        $aeform = new ffForm($this->mod_globals, $params);
        $aeform->LoadForm($params);
        $aeform->Delete();

		$url = $this->CreateLink($id, 'admin_main_feedback', $returnid, '', array('message'=>$this->Lang('form_deleted')), '', true);
		$url = str_replace('&amp;', '&', $url);
        redirect($url);
    }

    function AdminDeleteField($id, &$params, $returnid)
	{
        $aeform = new ffForm($this->mod_globals, $params);
        $aefield = new ffInput($this->mod_globals, $aeform, $params);
        $aefield->LoadOptions($params);
        $aefield->Delete();

		$url = $this->CreateLink($id, 'admin_edit_feedback_form', $returnid, '',
			array('form_id'=>$aefield->FormId,'message'=>$this->Lang('field_deleted')), '', true);
		$url = str_replace('&amp;', '&', $url);
        redirect($url);
    }

	function GetForms($order_by='name')
	{
		$db = $this->mod_globals->DBHandle;
		$sql = "SELECT * FROM ".$this->form_table_name;
		if($order_by != '')
	    {
	        $sql .= " ORDER BY $order_by";
	    }

	    $result = array();
	    $rs = $db->Execute($sql);
	    if($rs && $rs->RecordCount() > 0)
	        $result = $rs->GetArray();
	    return $result;
	}	

    function GetFormIDFromAlias($form_alias)
	{
		$db = $this->mod_globals->DBHandle; /* @var $db ADOConnection */
		$sql = "SELECT form_id from ".$this->form_table_name." WHERE alias = ?";
		$rs = $db->Execute($sql, array($form_alias));
		if($rs && $rs->RecordCount() > 0)
		{
			$result = $rs->FetchRow();
		}
		return $result['form_id'];
	}


	function AdminStoreForm($id, &$params, $return_id)
	{
        $aeform = new ffForm($this->mod_globals, $params);
        $aeform->Store();

        if ($params['submit'] == $this->Lang('save'))
            {
		    $url = $this->CreateLink($id, 'admin_main_feedback', $return_id, '',
		    	array('message'=>$this->Lang('form')." ".$params['form_op']), '', true);
            }
        else
            {
		    $url = $this->CreateLink($id, 'admin_edit_feedback_form', $return_id,
		    	'', array('message'=>$this->Lang('form')." ".$params['form_op'],'form_id'=>$aeform->FormId), '', true);
            }
		$url = str_replace('&amp;', '&', $url);
        redirect($url);
	}

	function AdminStoreConfig($id, &$params, $return_id)
	{
        $aeconf = new ffConfig($params);
        $aeconf->MergeConfig($this->mod_globals);
        $aeconf->Store();

		$url = $this->CreateLink($id, 'admin_main_feedback', $return_id, '',
			array('message'=>$this->Lang('configuration_updated')), '', true);
		$url = str_replace('&amp;', '&', $url);
        redirect($url);
	}
	
	function GetHelp($lang = 'en_US')
	{
		return $this->Lang('help');
	}


}

# vim:ts=4 sw=4 noet
?>