1<?php
2/**
3 * OrangeHRM is a comprehensive Human Resource Management (HRM) System that captures
4 * all the essential functionalities required for any enterprise.
5 * Copyright (C) 2006 OrangeHRM Inc., http://www.orangehrm.com
6 *
7 * OrangeHRM is free software; you can redistribute it and/or modify it under the terms of
8 * the GNU General Public License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * OrangeHRM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
12 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13 * See the GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along with this program;
16 * if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA  02110-1301, USA
18 */
19class EmployeeLanguageForm extends sfForm {
20
21    private $employeeService;
22    public $fullName;
23    private $widgets = array();
24    public $empLanguageList;
25
26    /**
27     * Get EmployeeService
28     * @returns EmployeeService
29     */
30    public function getEmployeeService() {
31        if(is_null($this->employeeService)) {
32            $this->employeeService = new EmployeeService();
33            $this->employeeService->setEmployeeDao(new EmployeeDao());
34        }
35        return $this->employeeService;
36    }
37
38    /**
39     * Set EmployeeService
40     * @param EmployeeService $employeeService
41     */
42    public function setEmployeeService(EmployeeService $employeeService) {
43        $this->employeeService = $employeeService;
44    }
45
46    public function configure() {
47        $this->languagePermissions = $this->getOption('languagePermissions');
48
49        $empNumber = $this->getOption('empNumber');
50        $employee = $this->getEmployeeService()->getEmployee($empNumber);
51        $this->fullName = $employee->getFullName();
52
53        $this->empLanguageList = $this->getEmployeeService()->getEmployeeLanguages($empNumber);
54
55        $i18nHelper = sfContext::getInstance()->getI18N();
56
57        $this->langTypeList = array("" => '-- ' . $i18nHelper->__('Select') . ' --',
58                               1 => $i18nHelper->__('Writing'),
59                               2 => $i18nHelper->__('Speaking'),
60                               3 => $i18nHelper->__('Reading'));
61        $this->competencyList = array("" => '-- ' . $i18nHelper->__('Select') . ' --',
62                                 1 => $i18nHelper->__('Poor'),
63                                 2 => $i18nHelper->__('Basic'),
64                                 3 => $i18nHelper->__('Good'),
65                                 4 => $i18nHelper->__('Mother Tongue'));
66
67        $widgets = array('emp_number' => new sfWidgetFormInputHidden(array(), array('value' => $empNumber)));
68        $validators = array('emp_number' => new sfValidatorString(array('required' => true)));
69
70        if ($this->languagePermissions->canRead()) {
71
72            $languageWidgets = $this->getLanguageWidgets();
73            $languageValidators = $this->getLanguageValidators();
74
75            if (!($this->languagePermissions->canUpdate() || $this->languagePermissions->canCreate()) ) {
76                foreach ($languageWidgets as $widgetName => $widget) {
77                    $widget->setAttribute('disabled', 'disabled');
78                }
79            }
80            $widgets = array_merge($widgets, $languageWidgets);
81            $validators = array_merge($validators, $languageValidators);
82        }
83
84        $this->setWidgets($widgets);
85        $this->setValidators($validators);
86
87        $this->widgetSchema->setNameFormat('language[%s]');
88        $this->getWidgetSchema()->setLabels($this->getFormLabels());
89
90    }
91
92    /**
93     *
94     * @return \sfWidgetFormInputHidden
95     */
96    private function getLanguageWidgets() {
97        $availableLanguageList = $this->_getLanguageList();
98
99        $widgets = array();
100        $widgets['code'] = new sfWidgetFormSelect(array('choices' => $availableLanguageList));
101        $widgets['lang_type'] = new sfWidgetFormSelect(array('choices' => $this->langTypeList));
102        $widgets['competency'] = new sfWidgetFormSelect(array('choices' => $this->competencyList));
103        $widgets['comments'] = new sfWidgetFormTextarea();
104        return $widgets;
105    }
106
107    private function getLanguageValidators() {
108        $availableLanguageList = $this->_getLanguageList();
109
110        $validators = array(
111            'code' => new sfValidatorChoice(array('choices' => array_keys($availableLanguageList))),
112            'lang_type' => new sfValidatorChoice(array('choices' => array_keys($this->langTypeList))),
113            'competency' => new sfValidatorChoice(array('choices' => array_keys($this->competencyList))),
114            'comments' => new sfValidatorString(array('required' => false, 'max_length' => 100))
115        );
116        return $validators;
117    }
118
119    public function getLangTypeDesc($langType) {
120        $langTypeDesc = "";
121        if (isset($this->langTypeList[$langType])) {
122            $langTypeDesc = $this->langTypeList[$langType];
123        }
124        return $langTypeDesc;
125    }
126
127    public function getCompetencyDesc($competency) {
128        $competencyDesc = "";
129        if (isset($this->competencyList[$competency])) {
130            $competencyDesc = $this->competencyList[$competency];
131        }
132        return $competencyDesc;
133    }
134
135    private function _getLanguageList() {
136        $languageService = new LanguageService();
137        $languageList = $languageService->getLanguageList();
138        $list = array("" => "-- " . __('Select') . " --");
139
140        foreach($languageList as $language) {
141            $list[$language->getId()] = $language->getName();
142        }
143
144        return $list;
145    }
146
147    /**
148     *
149     * @return array
150     */
151    protected function getFormLabels() {
152        $required = '<em> *</em>';
153        $labels = array(
154            'code' => __('Language') . $required,
155            'lang_type' => __('Fluency') . $required,
156            'competency' => __('Competency') . $required,
157            'comments' => __('Comments'),
158        );
159        return $labels;
160    }
161}
162?>