This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point'); |
||
3 | /********************************************************************************* |
||
4 | * SugarCRM Community Edition is a customer relationship management program developed by |
||
5 | * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc. |
||
6 | |||
7 | * SuiteCRM is an extension to SugarCRM Community Edition developed by Salesagility Ltd. |
||
8 | * Copyright (C) 2011 - 2014 Salesagility Ltd. |
||
9 | * |
||
10 | * This program is free software; you can redistribute it and/or modify it under |
||
11 | * the terms of the GNU Affero General Public License version 3 as published by the |
||
12 | * Free Software Foundation with the addition of the following permission added |
||
13 | * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK |
||
14 | * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY |
||
15 | * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS. |
||
16 | * |
||
17 | * This program is distributed in the hope that it will be useful, but WITHOUT |
||
18 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS |
||
19 | * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more |
||
20 | * details. |
||
21 | * |
||
22 | * You should have received a copy of the GNU Affero General Public License along with |
||
23 | * this program; if not, see http://www.gnu.org/licenses or write to the Free |
||
24 | * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA |
||
25 | * 02110-1301 USA. |
||
26 | * |
||
27 | * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road, |
||
28 | * SW2-130, Cupertino, CA 95014, USA. or at email address [email protected]. |
||
29 | * |
||
30 | * The interactive user interfaces in modified source and object code versions |
||
31 | * of this program must display Appropriate Legal Notices, as required under |
||
32 | * Section 5 of the GNU Affero General Public License version 3. |
||
33 | * |
||
34 | * In accordance with Section 7(b) of the GNU Affero General Public License version 3, |
||
35 | * these Appropriate Legal Notices must retain the display of the "Powered by |
||
36 | * SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not |
||
37 | * reasonably feasible for technical reasons, the Appropriate Legal Notices must |
||
38 | * display the words "Powered by SugarCRM" and "Supercharged by SuiteCRM". |
||
39 | ********************************************************************************/ |
||
40 | |||
41 | |||
42 | |||
43 | |||
44 | class SugarWidgetFieldDateTime extends SugarWidgetReportField |
||
45 | { |
||
46 | var $reporter; |
||
47 | var $assigned_user=null; |
||
48 | |||
49 | function __construct($layout_manager) |
||
50 | { |
||
51 | parent::__construct($layout_manager); |
||
52 | } |
||
53 | |||
54 | /** |
||
55 | * @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 |
||
56 | */ |
||
57 | function SugarWidgetFieldDateTime($layout_manager){ |
||
58 | $deprecatedMessage = 'PHP4 Style Constructors are deprecated and will be remove in 7.8, please update your code'; |
||
59 | if(isset($GLOBALS['log'])) { |
||
60 | $GLOBALS['log']->deprecated($deprecatedMessage); |
||
61 | } |
||
62 | else { |
||
63 | trigger_error($deprecatedMessage, E_USER_DEPRECATED); |
||
64 | } |
||
65 | self::__construct($layout_manager); |
||
66 | } |
||
67 | |||
68 | |||
69 | // get the reporter attribute |
||
70 | // deprecated, now called in the constructor |
||
71 | /** |
||
72 | * @deprecated |
||
73 | */ |
||
74 | function getReporter() { |
||
75 | } |
||
76 | |||
77 | // get the assigned user of the report |
||
78 | function getAssignedUser() |
||
79 | { |
||
80 | $json_obj = getJSONobj(); |
||
81 | |||
82 | $report_def_str = $json_obj->decode($this->reporter->report_def_str); |
||
83 | |||
84 | if(empty($report_def_str['assigned_user_id'])) return null; |
||
85 | |||
86 | $this->assigned_user = new User(); |
||
87 | $this->assigned_user->retrieve($report_def_str['assigned_user_id']); |
||
88 | return $this->assigned_user; |
||
89 | } |
||
90 | |||
91 | function queryFilterOn($layout_def) |
||
92 | { |
||
93 | global $timedate; |
||
94 | $begin = $layout_def['input_name0']; |
||
95 | $hasTime = $this->hasTime($begin); |
||
96 | $date = $timedate->fromString($begin); |
||
97 | |||
98 | if (!$hasTime) { |
||
99 | return $this->queryDay( |
||
100 | $layout_def, |
||
101 | $date |
||
102 | ); |
||
103 | } |
||
104 | |||
105 | return $this->queryDateOp( |
||
106 | $this->_get_column_select($layout_def), |
||
107 | $date, |
||
108 | '=', |
||
109 | "datetime" |
||
110 | ); |
||
111 | } |
||
112 | |||
113 | /** |
||
114 | * expandDate |
||
115 | * |
||
116 | * This function helps to convert a date only value to have a time value as well. It first checks |
||
117 | * to see if a time value exists. If a time value exists, the function just returns the date value |
||
118 | * passed in. If the date value is the 'Today' macro then some special processing occurs as well. |
||
119 | * Finally the time portion is applied depending on whether or not this date should be for the end |
||
120 | * in which case the 23:59:59 time value is applied otherwise 00:00:00 is used. |
||
121 | * |
||
122 | * @param $date String value of the date value to expand |
||
123 | * @param bool $end Boolean value indicating whether or not this is for an end time period or not |
||
124 | * @return $date TimeDate object with time value applied |
||
0 ignored issues
–
show
|
|||
125 | */ |
||
126 | protected function expandDate($date, $end = false) |
||
127 | { |
||
128 | global $timedate; |
||
129 | if($this->hasTime($date)) { |
||
130 | return $date; |
||
131 | } |
||
132 | |||
133 | //C.L. Bug 48616 - If the $date is set to the Today macro, then adjust accordingly |
||
134 | if(strtolower($date) == 'today') |
||
135 | { |
||
136 | $startEnd = $timedate->getDayStartEndGMT($timedate->getNow(true)); |
||
137 | return $end ? $startEnd['end'] : $startEnd['start']; |
||
138 | } |
||
139 | |||
140 | $parsed = $timedate->fromDbDate($date); |
||
141 | $date = $timedate->tzUser(new SugarDateTime()); |
||
142 | $date->setDate($parsed->year, $parsed->month, $parsed->day); |
||
143 | |||
144 | if($end) { |
||
145 | return $date->setTime(23, 59, 59); |
||
146 | } else { |
||
147 | return $date->setTime(0, 0, 0); |
||
148 | } |
||
149 | } |
||
150 | |||
151 | function queryFilterBefore($layout_def) |
||
152 | { |
||
153 | $begin = $this->expandDate($layout_def['input_name0']); |
||
154 | return $this->queryDateOp($this->_get_column_select($layout_def), $begin, '<', "datetime"); |
||
155 | } |
||
156 | |||
157 | function queryFilterAfter($layout_def) |
||
158 | { |
||
159 | $begin = $this->expandDate($layout_def['input_name0'], true); |
||
160 | return $this->queryDateOp($this->_get_column_select($layout_def), $begin, '>', "datetime"); |
||
161 | } |
||
162 | |||
163 | function queryFilterBetween_Dates($layout_def) |
||
164 | { |
||
165 | $begin = $this->expandDate($layout_def['input_name0']); |
||
166 | $end = $this->expandDate($layout_def['input_name1'], true); |
||
167 | $column = $this->_get_column_select($layout_def); |
||
168 | return "(".$this->queryDateOp($column, $begin, ">=", "datetime")." AND ". |
||
169 | $this->queryDateOp($column, $end, "<=", "datetime").")\n"; |
||
170 | } |
||
171 | |||
172 | function queryFilterNot_Equals_str($layout_def) |
||
173 | { |
||
174 | global $timedate; |
||
175 | |||
176 | $column = $this->_get_column_select($layout_def); |
||
177 | $begin = $layout_def['input_name0']; |
||
178 | $hasTime = $this->hasTime($begin); |
||
179 | if(!$hasTime){ |
||
180 | $end = $this->expandDate($begin, true); |
||
181 | $begin = $this->expandDate($begin); |
||
182 | $cond = $this->queryDateOp($column, $begin, "<", "datetime")." OR ". |
||
183 | $this->queryDateOp($column, $end, ">", "datetime"); |
||
184 | } else { |
||
185 | $cond = $this->queryDateOp($column, $begin, "!=", "datetime"); |
||
186 | } |
||
187 | return "($column IS NULL OR $cond)"; |
||
188 | } |
||
189 | |||
190 | /** |
||
191 | * Get assigned or logged in user's current date and time value. |
||
192 | * @param boolean $timestamp Format of return value, if set to true, return unix like timestamp , else a formatted date. |
||
193 | */ |
||
194 | function get_users_current_date_time($timestamp=false) |
||
195 | { |
||
196 | global $current_user; |
||
197 | global $timedate; |
||
198 | |||
199 | $begin = TimeDate::getInstance()->nowDb(); |
||
200 | //kbrill bug #13884 |
||
201 | //$begin = $timedate->to_display_date_time($begin,true,true,$this->assigned_user); |
||
202 | $begin = $timedate->handle_offset($begin, $timedate->get_db_date_time_format(), false, $this->assigned_user); |
||
203 | |||
204 | if (!$timestamp) { |
||
205 | return $begin; |
||
206 | } else { |
||
207 | $begin_parts = explode(' ', $begin); |
||
208 | $date_parts=explode('-', $begin_parts[0]); |
||
209 | $time_parts=explode(':', $begin_parts[1]); |
||
210 | $curr_timestamp=mktime($time_parts[0],$time_parts[1],0,$date_parts[1], $date_parts[2],$date_parts[0]); |
||
211 | return $curr_timestamp; |
||
212 | } |
||
213 | |||
214 | } |
||
215 | /** |
||
216 | * Get specified date and time for a particalur day, in current user's timezone. |
||
217 | * @param int $days Adjust date by this number of days, negative values are valid. |
||
218 | * @param time string falg for desired time value, start: minimum time, end: maximum time, default: current time |
||
219 | */ |
||
220 | function get_db_date($days,$time) { |
||
221 | global $timedate; |
||
222 | |||
223 | $begin = date($GLOBALS['timedate']->get_db_date_time_format(), time()+(86400 * $days)); //gmt date with day adjustment applied. |
||
224 | //kbrill bug #13884 |
||
225 | //$begin = $timedate->to_display_date_time($begin,true,true,$this->assigned_user); |
||
226 | $begin = $timedate->handle_offset($begin, $timedate->get_db_date_time_format(), false, $this->assigned_user); |
||
227 | |||
228 | if ($time=='start') { |
||
229 | $begin_parts = explode(' ', $begin); |
||
230 | $be = $begin_parts[0] . ' 00:00:00'; |
||
231 | } |
||
232 | else if ($time=='end') { |
||
233 | $begin_parts = explode(' ', $begin); |
||
234 | $be = $begin_parts[0] . ' 23:59:59'; |
||
235 | } else { |
||
236 | $be=$begin; |
||
237 | } |
||
238 | |||
239 | //convert date to db format without converting to GMT. |
||
240 | $begin = $timedate->handle_offset($be, $timedate->get_db_date_time_format(), false, $this->assigned_user); |
||
241 | |||
242 | return $begin; |
||
243 | } |
||
244 | |||
245 | /** |
||
246 | * Get filter string for a date field. |
||
247 | * @param array layout_def field def for field being filtered |
||
248 | * @param string $begin start date value (in DB format) |
||
249 | * @param string $end End date value (in DB format) |
||
250 | */ |
||
251 | function get_start_end_date_filter(& $layout_def, $begin,$end) |
||
252 | { |
||
253 | if (isset ($layout_def['rel_field'])) { |
||
254 | $field_name = $this->reporter->db->convert( |
||
255 | $this->reporter->db->convert($this->_get_column_select($layout_def), 'date_format', '%Y-%m-%d'), |
||
256 | "CONCAT", |
||
257 | array("' '", $this->reporter->db->convert($layout_def['rel_field'], 'time_format')) |
||
258 | ); |
||
259 | } else { |
||
260 | $field_name = $this->_get_column_select($layout_def); |
||
261 | } |
||
262 | return $field_name.">=".$this->reporter->db->quoted($begin)." AND ".$field_name."<=".$this->reporter->db->quoted($end)."\n"; |
||
263 | } |
||
264 | |||
265 | /** |
||
266 | * Create query for binary operation of field of certain type |
||
267 | * Produces query like: |
||
268 | * arg1 op to_date(arg2), e.g.: |
||
269 | * date_closed < '2009-12-01' |
||
270 | * @param string $arg1 1st arg - column name |
||
271 | * @param string|DateTime $arg2 2nd arg - value to be converted |
||
272 | * @param string $op |
||
273 | * @param string $type |
||
274 | */ |
||
275 | protected function queryDateOp($arg1, $arg2, $op, $type) |
||
276 | { |
||
277 | global $timedate; |
||
278 | if($arg2 instanceof DateTime) { |
||
279 | $arg2 = $timedate->asDbType($arg2, $type); |
||
280 | } |
||
281 | return "$arg1 $op ".$this->reporter->db->convert($this->reporter->db->quoted($arg2), $type)."\n"; |
||
282 | } |
||
283 | |||
284 | /** |
||
285 | * Return current date in required user's TZ |
||
286 | * @return SugarDateTime |
||
287 | */ |
||
288 | protected function now() |
||
289 | { |
||
290 | global $timedate; |
||
291 | return $timedate->tzUser($timedate->getNow(), $this->getAssignedUser()); |
||
292 | } |
||
293 | |||
294 | /** |
||
295 | * Create query from the beginning to the end of certain day |
||
296 | * @param array $layout_def |
||
297 | * @param SugarDateTime $day |
||
298 | */ |
||
299 | protected function queryDay($layout_def, SugarDateTime $day) |
||
300 | { |
||
301 | $begin = $day->get_day_begin(); |
||
302 | $end = $day->get_day_end(); |
||
303 | return $this->get_start_end_date_filter($layout_def,$begin->asDb(),$end->asDb()); |
||
304 | } |
||
305 | |||
306 | function queryFilterTP_yesterday($layout_def) |
||
307 | { |
||
308 | global $timedate; |
||
309 | return $this->queryDay($layout_def, $this->now()->get("-1 day")); |
||
310 | } |
||
311 | |||
312 | function queryFilterTP_today($layout_def) |
||
313 | { |
||
314 | global $timedate; |
||
315 | return $this->queryDay($layout_def, $this->now()); |
||
316 | } |
||
317 | |||
318 | function queryFilterTP_tomorrow(& $layout_def) |
||
319 | { |
||
320 | global $timedate; |
||
321 | return $this->queryDay($layout_def, $this->now()->get("+1 day")); |
||
322 | } |
||
323 | |||
324 | function queryFilterTP_last_7_days($layout_def) |
||
325 | { |
||
326 | global $timedate; |
||
327 | |||
328 | $begin = $this->now()->get("-6 days")->get_day_begin(); |
||
329 | $end = $this->now()->get_day_end(); |
||
330 | |||
331 | return $this->get_start_end_date_filter($layout_def,$begin->asDb(),$end->asDb()); |
||
332 | } |
||
333 | |||
334 | function queryFilterTP_next_7_days($layout_def) |
||
335 | { |
||
336 | global $timedate; |
||
337 | |||
338 | $begin = $this->now()->get_day_begin(); |
||
339 | $end = $this->now()->get("+6 days")->get_day_end(); |
||
340 | |||
341 | return $this->get_start_end_date_filter($layout_def,$begin->asDb(),$end->asDb()); |
||
342 | } |
||
343 | |||
344 | /** |
||
345 | * Create query from the beginning to the end of certain month |
||
346 | * @param array $layout_def |
||
347 | * @param SugarDateTime $month |
||
348 | */ |
||
349 | protected function queryMonth($layout_def, $month) |
||
350 | { |
||
351 | $begin = $month->setTime(0, 0, 0); |
||
352 | $end = clone($begin); |
||
353 | $end->setDate($begin->year, $begin->month, $begin->days_in_month)->setTime(23, 59, 59); |
||
0 ignored issues
–
show
The property
year does not exist on object<SugarDateTime> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() The property
month does not exist on object<SugarDateTime> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() The property
days_in_month does not exist on object<SugarDateTime> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
354 | return $this->get_start_end_date_filter($layout_def,$begin->asDb(),$end->asDb()); |
||
355 | } |
||
356 | |||
357 | function queryFilterTP_last_month($layout_def) |
||
358 | { |
||
359 | global $timedate; |
||
360 | $month = $this->now(); |
||
361 | return $this->queryMonth($layout_def, $month->setDate($month->year, $month->month-1, 1)); |
||
0 ignored issues
–
show
The property
year does not exist on object<SugarDateTime> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() The property
month does not exist on object<SugarDateTime> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
362 | } |
||
363 | |||
364 | function queryFilterTP_this_month($layout_def) |
||
365 | { |
||
366 | global $timedate; |
||
367 | |||
368 | //Bug 62414 - take timezone into account when determining current month |
||
369 | $now = $this->now(); |
||
370 | $timezoneOffset = $timedate->getUserUTCOffset(); |
||
371 | $timezoneOffset = "$timezoneOffset minutes"; |
||
372 | $now->modify($timezoneOffset); |
||
373 | |||
374 | return $this->queryMonth($layout_def, $now->get_day_by_index_this_month(0)); |
||
375 | } |
||
376 | |||
377 | function queryFilterTP_next_month($layout_def) |
||
378 | { |
||
379 | global $timedate; |
||
380 | $month = $this->now(); |
||
381 | return $this->queryMonth($layout_def, $month->setDate($month->year, $month->month+1, 1)); |
||
0 ignored issues
–
show
The property
year does not exist on object<SugarDateTime> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() The property
month does not exist on object<SugarDateTime> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
382 | } |
||
383 | |||
384 | function queryFilterTP_last_30_days($layout_def) |
||
385 | { |
||
386 | global $timedate; |
||
387 | $begin = $this->now()->get("-29 days")->get_day_begin(); |
||
388 | $end = $this->now()->get_day_end(); |
||
389 | return $this->get_start_end_date_filter($layout_def,$begin->asDb(),$end->asDb()); |
||
390 | } |
||
391 | |||
392 | function queryFilterTP_next_30_days($layout_def) |
||
393 | { |
||
394 | global $timedate; |
||
395 | $begin = $this->now()->get_day_begin(); |
||
396 | $end = $this->now()->get("+29 days")->get_day_end(); |
||
397 | return $this->get_start_end_date_filter($layout_def,$begin->asDb(),$end->asDb()); |
||
398 | } |
||
399 | |||
400 | /** |
||
401 | * Return the between WHERE query for Quarter filter |
||
402 | * |
||
403 | * Find quarter for given date, modify the start/end with $modifyFilter parameter |
||
404 | * |
||
405 | * @param $layout_def - Filter layout_def |
||
406 | * @param string $modifyFilter - Modification to start/end date, used to select previous/next quarter |
||
407 | * @param string $date - Date for which to find the quarter filter, if not set uses current date |
||
408 | * @return string - BETWEEN WHERE query for quarter filter |
||
409 | */ |
||
410 | protected function getQuarterFilter($layout_def, $modifyFilter, $date = '') |
||
411 | { |
||
412 | $timedate = TimeDate::getInstance(); |
||
413 | |||
414 | // See if date is set, if not, use current date |
||
415 | if (empty($date)) { |
||
416 | $begin = $timedate->getNow(true); |
||
417 | } else { |
||
418 | $begin = $timedate->fromString($date); |
||
419 | } |
||
420 | |||
421 | $begin->setDate( |
||
422 | $begin->year, |
||
0 ignored issues
–
show
The property
year does not exist on object<SugarDateTime> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
423 | floor(($begin->month - 1) / 3) * 3 + 1, // Find starting month of quarter |
||
0 ignored issues
–
show
The property
month does not exist on object<SugarDateTime> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
424 | 1 |
||
425 | )->setTime(0, 0); |
||
426 | |||
427 | $end = $begin->get("+3 month")->setTime(23, 59, 59)->get("-1 day"); |
||
428 | |||
429 | // Modify begin/end if filter is set |
||
430 | if (!empty($modifyFilter)) { |
||
431 | $begin->modify($modifyFilter); |
||
432 | $end->modify($modifyFilter); |
||
433 | } |
||
434 | |||
435 | return $this->get_start_end_date_filter($layout_def, $begin->asDb(), $end->asDb()); |
||
436 | } |
||
437 | |||
438 | /** |
||
439 | * Returns part of query for select |
||
440 | * |
||
441 | * @param array $layout_def for field |
||
442 | * @return string part of select query with last quarter only |
||
443 | */ |
||
444 | public function queryFilterTP_last_quarter($layout_def) |
||
445 | { |
||
446 | return $this->getQuarterFilter($layout_def, '-3 month'); |
||
447 | } |
||
448 | |||
449 | /** |
||
450 | * Returns part of query for select |
||
451 | * |
||
452 | * @param array $layout_def for field |
||
453 | * @return string part of select query with this quarter only |
||
454 | */ |
||
455 | public function queryFilterTP_this_quarter($layout_def) |
||
456 | { |
||
457 | return $this->getQuarterFilter($layout_def, ''); |
||
458 | } |
||
459 | |||
460 | /** |
||
461 | * Returns part of query for select |
||
462 | * |
||
463 | * @param array $layout_def for field |
||
464 | * @return string part of select query with next quarter only |
||
465 | */ |
||
466 | public function queryFilterTP_next_quarter($layout_def) |
||
467 | { |
||
468 | return $this->getQuarterFilter($layout_def, '+3 month'); |
||
469 | } |
||
470 | |||
471 | function queryFilterTP_last_year($layout_def) |
||
472 | { |
||
473 | global $timedate; |
||
474 | $begin = $this->now(); |
||
475 | $begin->setDate($begin->year-1, 1, 1)->setTime(0, 0); |
||
0 ignored issues
–
show
The property
year does not exist on object<SugarDateTime> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
476 | $end = clone $begin; |
||
477 | $end->setDate($end->year, 12, 31)->setTime(23, 59, 59); |
||
0 ignored issues
–
show
The property
year does not exist on object<SugarDateTime> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
478 | return $this->get_start_end_date_filter($layout_def,$begin->asDb(),$end->asDb()); |
||
479 | } |
||
480 | |||
481 | function queryFilterTP_this_year($layout_def) |
||
482 | { |
||
483 | global $timedate; |
||
484 | $begin = $this->now(); |
||
485 | $begin->setDate($begin->year, 1, 1)->setTime(0, 0); |
||
0 ignored issues
–
show
The property
year does not exist on object<SugarDateTime> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
486 | $end = clone $begin; |
||
487 | $end->setDate($end->year, 12, 31)->setTime(23, 59, 59); |
||
0 ignored issues
–
show
The property
year does not exist on object<SugarDateTime> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
488 | return $this->get_start_end_date_filter($layout_def,$begin->asDb(),$end->asDb()); |
||
489 | } |
||
490 | |||
491 | function queryFilterTP_next_year(& $layout_def) |
||
492 | { |
||
493 | global $timedate; |
||
494 | $begin = $this->now(); |
||
495 | $begin->setDate($begin->year+1, 1, 1)->setTime(0, 0); |
||
0 ignored issues
–
show
The property
year does not exist on object<SugarDateTime> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
496 | $end = clone $begin; |
||
497 | $end->setDate($end->year, 12, 31)->setTime(23, 59, 59); |
||
0 ignored issues
–
show
The property
year does not exist on object<SugarDateTime> . Since you implemented __get , maybe consider adding a @property annotation.
Since your code implements the magic getter <?php
/**
* @property int $x
* @property int $y
* @property string $text
*/
class MyLabel
{
private $properties;
private $allowedProperties = array('x', 'y', 'text');
public function __get($name)
{
if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
return $properties[$name];
} else {
return null;
}
}
public function __set($name, $value)
{
if (in_array($name, $this->allowedProperties)) {
$properties[$name] = $value;
} else {
throw new \LogicException("Property $name is not defined.");
}
}
}
If the property has read access only, you can use the @property-read annotation instead. Of course, you may also just have mistyped another name, in which case you should fix the error. See also the PhpDoc documentation for @property. ![]() |
|||
498 | return $this->get_start_end_date_filter($layout_def,$begin->asDb(),$end->asDb()); |
||
499 | } |
||
500 | |||
501 | function queryGroupBy($layout_def) |
||
502 | { |
||
503 | // i guess qualifier and column_function are the same.. |
||
504 | if (!empty ($layout_def['qualifier'])) { |
||
505 | $func_name = 'queryGroupBy'.$layout_def['qualifier']; |
||
506 | if (method_exists($this, $func_name)) { |
||
507 | return $this-> $func_name ($layout_def)." \n"; |
||
508 | } |
||
509 | } |
||
510 | return parent :: queryGroupBy($layout_def)." \n"; |
||
511 | } |
||
512 | |||
513 | function queryOrderBy($layout_def) |
||
514 | { |
||
515 | if (!empty ($layout_def['qualifier'])) { |
||
516 | $func_name ='queryOrderBy'.$layout_def['qualifier']; |
||
517 | if (method_exists($this, $func_name)) { |
||
518 | return $this-> $func_name ($layout_def)."\n"; |
||
519 | } |
||
520 | } |
||
521 | $order_by = parent :: queryOrderBy($layout_def)."\n"; |
||
522 | return $order_by; |
||
523 | } |
||
524 | |||
525 | function displayListPlain($layout_def) { |
||
526 | global $timedate; |
||
527 | $content = parent:: displayListPlain($layout_def); |
||
528 | // awu: this if condition happens only in Reports where group by month comes back as YYYY-mm format |
||
529 | if (count(explode('-',$content)) == 2){ |
||
530 | return $content; |
||
531 | // if date field |
||
532 | }elseif(substr_count($layout_def['type'], 'date') > 0){ |
||
533 | // if date time field |
||
534 | if(substr_count($layout_def['type'], 'time') > 0 && $this->get_time_part($content)!= false){ |
||
535 | $td = $timedate->to_display_date_time($content); |
||
536 | return $td; |
||
537 | }else{// if date only field |
||
538 | $td = $timedate->to_display_date($content, false); // Avoid PHP notice of returning by reference. |
||
539 | return $td; |
||
540 | } |
||
541 | } |
||
542 | } |
||
543 | |||
544 | function get_time_part($date_time_value) |
||
545 | { |
||
546 | global $timedate; |
||
547 | |||
548 | $date_parts=$timedate->split_date_time($date_time_value); |
||
549 | if (count($date_parts) > 1) { |
||
550 | return $date_parts[1]; |
||
551 | } else { |
||
552 | return false; |
||
553 | } |
||
554 | } |
||
555 | |||
556 | function displayList($layout_def) { |
||
557 | global $timedate; |
||
558 | // i guess qualifier and column_function are the same.. |
||
559 | if (!empty ($layout_def['column_function'])) { |
||
560 | $func_name = 'displayList'.$layout_def['column_function']; |
||
561 | if (method_exists($this, $func_name)) { |
||
562 | return $this-> $func_name ($layout_def); |
||
563 | } |
||
564 | } |
||
565 | $content = parent :: displayListPlain($layout_def); |
||
566 | return $timedate->to_display_date_time($content); |
||
567 | } |
||
568 | |||
569 | function querySelect(& $layout_def) { |
||
570 | // i guess qualifier and column_function are the same.. |
||
571 | if (!empty ($layout_def['column_function'])) { |
||
572 | $func_name = 'querySelect'.$layout_def['column_function']; |
||
573 | if (method_exists($this, $func_name)) { |
||
574 | return $this-> $func_name ($layout_def)." \n"; |
||
575 | } |
||
576 | } |
||
577 | return parent :: querySelect($layout_def)." \n"; |
||
578 | } |
||
579 | function & displayListday(& $layout_def) { |
||
580 | $value = parent:: displayListPlain($layout_def); |
||
581 | return $value; |
||
582 | } |
||
583 | |||
584 | function & displayListyear(& $layout_def) { |
||
585 | global $app_list_strings; |
||
586 | $value = parent:: displayListPlain($layout_def); |
||
587 | return $value; |
||
588 | } |
||
589 | |||
590 | function displayListmonth($layout_def) |
||
591 | { |
||
592 | global $app_list_strings; |
||
593 | $display = ''; |
||
594 | $match = array(); |
||
595 | if (preg_match('/(\d{4})-(\d\d)/', $this->displayListPlain($layout_def), $match)) { |
||
596 | $match[2] = preg_replace('/^0/', '', $match[2]); |
||
597 | $display = $app_list_strings['dom_cal_month_long'][$match[2]]." {$match[1]}"; |
||
598 | } |
||
599 | return $display; |
||
600 | |||
601 | } |
||
602 | |||
603 | /** |
||
604 | * Returns part of query for select |
||
605 | * |
||
606 | * @param array $layout_def for field |
||
607 | * @return string part of select query with year & month only |
||
608 | */ |
||
609 | function querySelectmonth($layout_def) |
||
610 | { |
||
611 | $return = $this->_get_column_select($layout_def); |
||
612 | if ($layout_def['type'] == 'datetime') |
||
613 | { |
||
614 | $return = $this->reporter->db->convert($return, 'add_tz_offset'); |
||
615 | } |
||
616 | return $this->reporter->db->convert($return, "date_format", array('%Y-%m')) . ' ' . $this->_get_column_alias($layout_def) . "\n"; |
||
617 | } |
||
618 | |||
619 | /** |
||
620 | * Returns part of query for group by |
||
621 | * |
||
622 | * @param array $layout_def for field |
||
623 | * @return string part of group by query with year & month only |
||
624 | */ |
||
625 | function queryGroupByMonth($layout_def) |
||
626 | { |
||
627 | $return = $this->_get_column_select($layout_def); |
||
628 | if ($layout_def['type'] == 'datetime') |
||
629 | { |
||
630 | $return = $this->reporter->db->convert($return, 'add_tz_offset'); |
||
631 | } |
||
632 | return $this->reporter->db->convert($return, "date_format", array('%Y-%m')) . "\n"; |
||
633 | } |
||
634 | |||
635 | /** |
||
636 | * For oracle we have to return order by string like group by string instead of return field alias |
||
637 | * |
||
638 | * @param array $layout_def definition of field |
||
639 | * @return string order by string for field |
||
640 | */ |
||
641 | function queryOrderByMonth($layout_def) |
||
642 | { |
||
643 | $return = $this->_get_column_select($layout_def); |
||
644 | if ($layout_def['type'] == 'datetime') |
||
645 | { |
||
646 | $return = $this->reporter->db->convert($return, 'add_tz_offset'); |
||
647 | } |
||
648 | $orderBy = $this->reporter->db->convert($return, "date_format", array('%Y-%m')); |
||
649 | |||
650 | if (empty($layout_def['sort_dir']) || $layout_def['sort_dir'] == 'a') |
||
651 | { |
||
652 | return $orderBy . " ASC\n"; |
||
653 | } |
||
654 | else |
||
655 | { |
||
656 | return $orderBy . " DESC\n"; |
||
657 | } |
||
658 | } |
||
659 | |||
660 | /** |
||
661 | * Returns part of query for select |
||
662 | * |
||
663 | * @param array $layout_def for field |
||
664 | * @return string part of select query with year & month & day |
||
665 | */ |
||
666 | function querySelectday($layout_def) |
||
667 | { |
||
668 | $return = $this->_get_column_select($layout_def); |
||
669 | if ($layout_def['type'] == 'datetime') |
||
670 | { |
||
671 | $return = $this->reporter->db->convert($return, 'add_tz_offset'); |
||
672 | } |
||
673 | return $this->reporter->db->convert($return, "date_format", array('%Y-%m-%d')) . ' ' . $this->_get_column_alias($layout_def) . "\n"; |
||
674 | } |
||
675 | |||
676 | /** |
||
677 | * Returns part of query for group by |
||
678 | * |
||
679 | * @param array $layout_def for field |
||
680 | * @return string part of group by query with year & month & day |
||
681 | */ |
||
682 | function queryGroupByDay($layout_def) |
||
683 | { |
||
684 | $return = $this->_get_column_select($layout_def); |
||
685 | if ($layout_def['type'] == 'datetime') |
||
686 | { |
||
687 | $return = $this->reporter->db->convert($return, 'add_tz_offset'); |
||
688 | } |
||
689 | return $this->reporter->db->convert($return, "date_format", array('%Y-%m-%d')) . "\n"; |
||
690 | } |
||
691 | |||
692 | /** |
||
693 | * Returns part of query for select |
||
694 | * |
||
695 | * @param array $layout_def for field |
||
696 | * @return string part of select query with year only |
||
697 | */ |
||
698 | function querySelectyear($layout_def) |
||
699 | { |
||
700 | $return = $this->_get_column_select($layout_def); |
||
701 | if ($layout_def['type'] == 'datetime') |
||
702 | { |
||
703 | $return = $this->reporter->db->convert($return, 'add_tz_offset'); |
||
704 | } |
||
705 | return $this->reporter->db->convert($return, "date_format", array('%Y')) . ' ' . $this->_get_column_alias($layout_def) . "\n"; |
||
706 | } |
||
707 | |||
708 | /** |
||
709 | * Returns part of query for group by |
||
710 | * |
||
711 | * @param array $layout_def for field |
||
712 | * @return string part of group by query with year only |
||
713 | */ |
||
714 | function queryGroupByYear($layout_def) |
||
715 | { |
||
716 | $return = $this->_get_column_select($layout_def); |
||
717 | if ($layout_def['type'] == 'datetime') |
||
718 | { |
||
719 | $return = $this->reporter->db->convert($return, 'add_tz_offset'); |
||
720 | } |
||
721 | return $this->reporter->db->convert($return, "date_format", array('%Y')) . "\n"; |
||
722 | } |
||
723 | |||
724 | function querySelectquarter($layout_def) |
||
725 | { |
||
726 | $column = $this->_get_column_select($layout_def); |
||
727 | return $this->reporter->db->convert($this->reporter->db->convert($column, "date_format", array('%Y')), |
||
728 | 'CONCAT', |
||
729 | array("'-'", $this->reporter->db->convert($column, "quarter"))) |
||
730 | ." ".$this->_get_column_alias($layout_def)."\n"; |
||
731 | } |
||
732 | |||
733 | function displayListquarter(& $layout_def) { |
||
734 | $match = array(); |
||
735 | if (preg_match('/(\d{4})-(\d)/', $this->displayListPlain($layout_def), $match)) { |
||
736 | return "Q".$match[2]." ".$match[1]; |
||
737 | } |
||
738 | return ''; |
||
739 | |||
740 | } |
||
741 | |||
742 | function queryGroupByQuarter($layout_def) |
||
743 | { |
||
744 | $this->getReporter(); |
||
0 ignored issues
–
show
|
|||
745 | $column = $this->_get_column_select($layout_def); |
||
746 | return $this->reporter->db->convert($this->reporter->db->convert($column, "date_format", array('%Y')), |
||
747 | 'CONCAT', |
||
748 | array("'-'", $this->reporter->db->convert($column, "quarter"))); |
||
749 | } |
||
750 | |||
751 | /** |
||
752 | * For oracle we have to return order by string like group by string instead of return field alias |
||
753 | * |
||
754 | * @param array $layout_def definition of field |
||
755 | * @return string order by string for field |
||
756 | */ |
||
757 | public function queryOrderByQuarter($layout_def) |
||
758 | { |
||
759 | $column = $this->_get_column_select($layout_def); |
||
760 | $orderBy = $this->reporter->db->convert( |
||
761 | $this->reporter->db->convert($column, "date_format", array('%Y')), |
||
762 | 'CONCAT', |
||
763 | array("'-'", $this->reporter->db->convert($column, "quarter")) |
||
764 | ); |
||
765 | |||
766 | |||
767 | if (empty($layout_def['sort_dir']) || $layout_def['sort_dir'] == 'a') |
||
768 | { |
||
769 | return $orderBy . " ASC\n"; |
||
770 | } |
||
771 | else |
||
772 | { |
||
773 | return $orderBy . " DESC\n"; |
||
774 | } |
||
775 | } |
||
776 | |||
777 | function displayInput(&$layout_def) { |
||
778 | global $timedate, $current_language, $app_strings; |
||
779 | $home_mod_strings = return_module_language($current_language, 'Home'); |
||
780 | $filterTypes = array(' ' => $app_strings['LBL_NONE'], |
||
781 | 'TP_today' => $home_mod_strings['LBL_TODAY'], |
||
782 | 'TP_yesterday' => $home_mod_strings['LBL_YESTERDAY'], |
||
783 | 'TP_tomorrow' => $home_mod_strings['LBL_TOMORROW'], |
||
784 | 'TP_this_month' => $home_mod_strings['LBL_THIS_MONTH'], |
||
785 | 'TP_this_year' => $home_mod_strings['LBL_THIS_YEAR'], |
||
786 | 'TP_last_30_days' => $home_mod_strings['LBL_LAST_30_DAYS'], |
||
787 | 'TP_last_7_days' => $home_mod_strings['LBL_LAST_7_DAYS'], |
||
788 | 'TP_last_month' => $home_mod_strings['LBL_LAST_MONTH'], |
||
789 | 'TP_last_year' => $home_mod_strings['LBL_LAST_YEAR'], |
||
790 | 'TP_next_30_days' => $home_mod_strings['LBL_NEXT_30_DAYS'], |
||
791 | 'TP_next_7_days' => $home_mod_strings['LBL_NEXT_7_DAYS'], |
||
792 | 'TP_next_month' => $home_mod_strings['LBL_NEXT_MONTH'], |
||
793 | 'TP_next_year' => $home_mod_strings['LBL_NEXT_YEAR'], |
||
794 | ); |
||
795 | |||
796 | $cal_dateformat = $timedate->get_cal_date_format(); |
||
797 | $str = "<select name='type_{$layout_def['name']}'>"; |
||
798 | $str .= get_select_options_with_id($filterTypes, (empty($layout_def['input_name0']) ? '' : $layout_def['input_name0'])); |
||
799 | // foreach($filterTypes as $value => $label) { |
||
800 | // $str .= '<option value="' . $value . '">' . $label. '</option>'; |
||
801 | // } |
||
802 | $str .= "</select>"; |
||
803 | |||
804 | |||
805 | return $str; |
||
806 | } |
||
807 | |||
808 | /** |
||
809 | * @param $date |
||
810 | * @return bool false if the date is a only a date, true if the date includes time. |
||
811 | */ |
||
812 | protected function hasTime($date) |
||
813 | { |
||
814 | return strlen(trim($date)) < 11 ? false : true; |
||
815 | } |
||
816 | |||
817 | } |
||
818 |
This check marks PHPDoc comments that could not be parsed by our parser. To see which comment annotations we can parse, please refer to our documentation on supported doc-types.