Passed
Push — scrutinizer-code-quality ( 09f5a1...c4c5fb )
by Adam
56:05 queued 14:08
created

SugarFieldHandler::SugarFieldHandler()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 6

Importance

Changes 1
Bugs 1 Features 1
Metric Value
cc 2
eloc 7
c 1
b 1
f 1
nc 2
nop 0
dl 0
loc 10
ccs 0
cts 7
cp 0
crap 6
rs 9.4285
1
<?php
2
/*********************************************************************************
3
 * SugarCRM Community Edition is a customer relationship management program developed by
4
 * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
5
6
 * SuiteCRM is an extension to SugarCRM Community Edition developed by Salesagility Ltd.
7
 * Copyright (C) 2011 - 2014 Salesagility Ltd.
8
 *
9
 * This program is free software; you can redistribute it and/or modify it under
10
 * the terms of the GNU Affero General Public License version 3 as published by the
11
 * Free Software Foundation with the addition of the following permission added
12
 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
13
 * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
14
 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
15
 *
16
 * This program is distributed in the hope that it will be useful, but WITHOUT
17
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
18
 * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
19
 * details.
20
 *
21
 * You should have received a copy of the GNU Affero General Public License along with
22
 * this program; if not, see http://www.gnu.org/licenses or write to the Free
23
 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
24
 * 02110-1301 USA.
25
 *
26
 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
27
 * SW2-130, Cupertino, CA 95014, USA. or at email address [email protected].
28
 *
29
 * The interactive user interfaces in modified source and object code versions
30
 * of this program must display Appropriate Legal Notices, as required under
31
 * Section 5 of the GNU Affero General Public License version 3.
32
 *
33
 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
34
 * these Appropriate Legal Notices must retain the display of the "Powered by
35
 * SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not
36
 * reasonably feasible for  technical reasons, the Appropriate Legal Notices must
37
 * display the words  "Powered by SugarCRM" and "Supercharged by SuiteCRM".
38
 ********************************************************************************/
39
40
/**
41
 * Handle Sugar fields
42
 * @api
43
 */
44
class SugarFieldHandler
45
{
46
47 2
    function __construct() {
48 2
    }
49
50
    /**
51
     * @deprecated deprecated since version 7.6, PHP4 Style Constructors are deprecated and will be remove in 7.8, please update your code, use __construct instead
52
     */
53
    function SugarFieldHandler(){
54
        $deprecatedMessage = 'PHP4 Style Constructors are deprecated and will be remove in 7.8, please update your code';
55
        if(isset($GLOBALS['log'])) {
56
            $GLOBALS['log']->deprecated($deprecatedMessage);
57
        }
58
        else {
59
            trigger_error($deprecatedMessage, E_USER_DEPRECATED);
60
        }
61
        self::__construct();
62
    }
63
64
65 5
    static function fixupFieldType($field) {
66
            switch($field) {
67 5
               case 'double':
68 5
               case 'decimal':
69
                    $field = 'float';
70
                    break;
71 5
               case 'uint':
72 5
               case 'ulong':
73 5
               case 'long':
74 5
               case 'short':
75 5
               case 'tinyint':
76
                    $field = 'int';
77
                    break;
78 5
               case 'date':
79
                    $field = 'datetime';
80
                    break;
81 5
               case 'url':
82 2
               		$field = 'link';
83 2
               		break;
84 5
               case 'varchar':
85 4
                    $field = 'base';
86 4
                    break;
87
            }
88
89 5
        return ucfirst($field);
90
    }
91
92
    /**
93
     * return the singleton of the SugarField
94
     *
95
     * @param field string field type
96
     */
97 5
    static function getSugarField($field, $returnNullIfBase=false) {
98 5
        static $sugarFieldObjects = array();
99
100 5
        $field = self::fixupFieldType($field);
101 5
        $field = ucfirst($field);
102
103 5
        if(!isset($sugarFieldObjects[$field])) {
104
        	//check custom directory
105 3
        	if(file_exists('custom/include/SugarFields/Fields/' . $field . '/SugarField' . $field. '.php')){
106
        		$file = 'custom/include/SugarFields/Fields/' . $field . '/SugarField' . $field. '.php';
107
                $type = $field;
108
			//else check the fields directory
109 3
			}else if(file_exists('include/SugarFields/Fields/' . $field . '/SugarField' . $field. '.php')){
110 2
           		$file = 'include/SugarFields/Fields/' . $field . '/SugarField' . $field. '.php';
111 2
                $type = $field;
112
        	}else{
113
                // No direct class, check the directories to see if they are defined
114 3
        		if( $returnNullIfBase &&
115 3
                    !is_dir('custom/include/SugarFields/Fields/'.$field) &&
116 3
                    !is_dir('include/SugarFields/Fields/'.$field) ) {
117 1
                    return null;
118
                }
119 3
        		$file = 'include/SugarFields/Fields/Base/SugarFieldBase.php';
120 3
                $type = 'Base';
121
        	}
122 3
			require_once($file);
123
124 3
			$class = 'SugarField' . $type;
125
			//could be a custom class check it
126 3
			$customClass = 'Custom' . $class;
127 3
        	if(class_exists($customClass)){
128
        		$sugarFieldObjects[$field] = new $customClass($field);
129
        	}else{
130 3
        		$sugarFieldObjects[$field] = new $class($field);
131
        	}
132
        }
133 5
        return $sugarFieldObjects[$field];
134
    }
135
136
    /**
137
     * Returns the smarty code to be used in a template built by TemplateHandler
138
     * The SugarField class is choosen dependant on the vardef's type field.
139
     *
140
     * @param parentFieldArray string name of the variable in the parent template for the bean's data
141
     * @param vardef vardef field defintion
142
     * @param displayType string the display type for the field (eg DetailView, EditView, etc)
143
     * @param displayParam parameters for displayin
144
     *      available paramters are:
145
     *      * labelSpan - column span for the label
146
     *      * fieldSpan - column span for the field
147
     */
148 4
    static function displaySmarty($parentFieldArray, $vardef, $displayType, $displayParams = array(), $tabindex = 1) {
149 4
        $string = '';
150 4
        $displayTypeFunc = 'get' . $displayType . 'Smarty'; // getDetailViewSmarty, getEditViewSmarty, etc...
151
152
		// This will handle custom type fields.
153
		// The incoming $vardef Array may have custom_type set.
154
		// If so, set $vardef['type'] to the $vardef['custom_type'] value
155 4
		if(isset($vardef['custom_type'])) {
156
		   $vardef['type'] = $vardef['custom_type'];
157
		}
158 4
		if(empty($vardef['type'])) {
159
			$vardef['type'] = 'varchar';
160
		}
161
162 4
		$field = self::getSugarField($vardef['type']);
163 4
		if ( !empty($vardef['function']) ) {
164 4
			$string = $field->displayFromFunc($displayType, $parentFieldArray, $vardef, $displayParams, $tabindex);
165
		} else {
166 4
			$string = $field->$displayTypeFunc($parentFieldArray, $vardef, $displayParams, $tabindex);
167
		}
168
169 4
        return $string;
170
    }
171
}
172
173
174
?>