aboutsummaryrefslogtreecommitdiff
path: root/h-source/Library/Form/Entry.php
blob: 305f55ff6c90ed6045a1ba89b94961242cc7c488 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php

// EasyGiant, a web software to build a community of people that want to share their hardware information.
// Copyright (C) 2009 - 2010  Antonio Gallo (h-source-copyright.txt)
//
// This file is part of EasyGiant
//
// EasyGiant 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 3 of the License, or
// (at your option) any later version.
// 
// EasyGiant 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 EasyGiant.  If not, see <http://www.gnu.org/licenses/>.

if (!defined('EG')) die('Direct access not allowed!');

//base class of the form entries
abstract class Form_Entry {

	public $entryName = null; //the name of the entry
	public $entryClass = null; //the class of the entry
	public $idName = null; //the id of the input entry
	public $className = null; //the class of the input entry
	public $labelString = null; //label of the form
	public $labelClass = null; //the class of the tag of the label
	public $options = array(); //options (if the entry is a <select> entry or a radio button). Associative array or comma-divided list.
	public $defaultValue = '';
	public $wrap = array();
	public $deleteButton = null;
	public $type = null; //the type of the entry

	//create the label of each entry of the form
	public function getLabelTag()
	{
		$labelTagClass = isset($this->labelClass) ? $this->labelClass : 'entryLabel';
		return isset($this->labelString) ? "<label class='$labelTagClass'>".$this->labelString."</label>\n\t" : null;
	}

	//get the class of the entry
	public function getEntryClass()
	{
		if (isset($this->entryClass))
		{
			$class = $this->entryClass;
		}
		else
		{
			switch($this->type)
			{
				case 'InputText':
					$class = 'form_input_text';
					break;
				case 'File':
					$class = 'form_input_file';
					break;
				case 'Textarea':
					$class = 'form_textarea';
					break;
				case 'Password':
					$class = 'form_input_text form_input_password';
					break;
				default:
					$class = 'form_input_text';
					break;
			}
		}
		return $class;
	}

	public function getWrapElements($value = null)
	{
		//replace the ;;value;; variable
		for ($i = 0; $i < count($this->wrap); $i++)
		{
			if ( preg_match('/;;(.*)\|value;;/',$this->wrap[$i],$m) )
			{
				if (!function_exists($m[1])) {
					throw new Exception('Error in <b>'.__METHOD__.'</b>: function <b>'.$m[1].'</b> does not exists..');
				}
				//apply the function
				$v = call_user_func($m[1],$value);
				$this->wrap[$i] = str_replace(";;".$m[1]."|value;;",$v,$this->wrap[$i]);
			}
			else if ( preg_match('/;;value;;/',$this->wrap[$i]) )
			{
				$this->wrap[$i] = str_replace(';;value;;',$value,$this->wrap[$i]);
			}
		}
		
		$wrap[0] = isset($this->wrap[0]) ? $this->wrap[0] : null;
		$wrap[1] = isset($this->wrap[1]) ? $this->wrap[1] : null;
		$wrap[2] = isset($this->wrap[2]) ? $this->wrap[2] : null;
		$wrap[3] = isset($this->wrap[3]) ? $this->wrap[3] : null;
		$wrap[4] = isset($this->wrap[4]) ? $this->wrap[4] : null;
		return $wrap;
	}

	abstract public function render($value = null);

}