]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - include/utils/layout_utils.php
Release 6.4.0
[Github/sugarcrm.git] / include / utils / layout_utils.php
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-2011 SugarCRM Inc.
6  * 
7  * This program is free software; you can redistribute it and/or modify it under
8  * the terms of the GNU Affero General Public License version 3 as published by the
9  * Free Software Foundation with the addition of the following permission added
10  * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
11  * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
12  * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
13  * 
14  * This program is distributed in the hope that it will be useful, but WITHOUT
15  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
17  * details.
18  * 
19  * You should have received a copy of the GNU Affero General Public License along with
20  * this program; if not, see http://www.gnu.org/licenses or write to the Free
21  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22  * 02110-1301 USA.
23  * 
24  * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
25  * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
26  * 
27  * The interactive user interfaces in modified source and object code versions
28  * of this program must display Appropriate Legal Notices, as required under
29  * Section 5 of the GNU Affero General Public License version 3.
30  * 
31  * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
32  * these Appropriate Legal Notices must retain the display of the "Powered by
33  * SugarCRM" logo. If the display of the logo is not reasonably feasible for
34  * technical reasons, the Appropriate Legal Notices must display the words
35  * "Powered by SugarCRM".
36  ********************************************************************************/
37
38
39 /**
40  * Contains a variety of utility functions used to display UI components such as form headers and footers.
41  *
42  * @todo refactor out these functions into the base UI objects as indicated
43  */
44
45 /**
46  * Create HTML to display formatted form title.
47  *
48  * @param  $form_title string to display as the title in the header
49  * @param  $other_text string to next to the title.  Typically used for form buttons.
50  * @param  $show_help  boolean which determines if the print and help links are shown.
51  * @return string HTML
52  */
53 function get_form_header(
54     $form_title,
55     $other_text,
56     $show_help
57     )
58 {
59     global $sugar_version, $sugar_flavor, $server_unique_key, $current_language, $current_module, $current_action;
60     global $app_strings;
61
62     $blankImageURL = SugarThemeRegistry::current()->getImageURL('blank.gif');
63     $printImageURL = SugarThemeRegistry::current()->getImageURL("print.gif");
64     $helpImageURL  = SugarThemeRegistry::current()->getImageURL("help.gif");
65
66     $is_min_max = strpos($other_text,"_search.gif");
67     if($is_min_max !== false)
68         $form_title = "{$other_text}&nbsp;{$form_title}";
69
70     $the_form = <<<EOHTML
71 <table width="100%" cellpadding="0" cellspacing="0" border="0" class="formHeader h3Row">
72 <tr>
73 <td nowrap><h3><span>{$form_title}</span></h3></td>
74 EOHTML;
75
76     $keywords = array("/class=\"button\"/","/class='button'/","/class=button/","/<\/form>/");
77     $match="";
78     foreach ($keywords as $left)
79         if (preg_match($left,$other_text))
80             $match = true;
81
82     if ($other_text && $match) {
83         $the_form .= <<<EOHTML
84 <td colspan='10' width='100%'><IMG height='1' width='1' src='$blankImageURL' alt=''></td>
85 </tr>
86 <tr>
87 <td align='left' valign='middle' nowrap style='padding-bottom: 2px;'>$other_text</td>
88 <td width='100%'><IMG height='1' width='1' src='$blankImageURL' alt=''></td>
89 EOHTML;
90         if ($show_help) {
91             $the_form .= "<td align='right' nowrap>";
92             if ($_REQUEST['action'] != "EditView") {
93                 $the_form .= <<<EOHTML
94     <a href='index.php?{$GLOBALS['request_string']}' class='utilsLink'>
95     <img src='{$printImageURL}' alt='{$app_strings["LBL_PRINT"]}' border='0' align='absmiddle'>
96     </a>&nbsp;
97     <a href='index.php?{$GLOBALS['request_string']}' class='utilsLink'>
98     {$app_strings['LNK_PRINT']}
99     </a>
100 EOHTML;
101             }
102             $the_form .= <<<EOHTML
103 &nbsp;
104     <a href='index.php?module=Administration&action=SupportPortal&view=documentation&version={$sugar_version}&edition={$sugar_flavor}&lang={$current_language}&help_module={$current_module}&help_action={$current_action}&key={$server_unique_key}'
105        class='utilsLink' target='_blank'>
106     <img src='{$helpImageURL}' alt='Help' border='0' align='absmiddle'>
107     </a>&nbsp;
108     <a href='index.php?module=Administration&action=SupportPortal&view=documentation&version={$sugar_version}&edition={$sugar_flavor}&lang={$current_language}&help_module={$current_module}&help_action={$current_action}&key={$server_unique_key}'
109         class='utilsLink' target='_blank'>
110     {$app_strings['LNK_HELP']}
111     </a>
112 </td>
113 EOHTML;
114         }
115     } 
116     else {
117         if ($other_text && $is_min_max === false) {
118             $the_form .= <<<EOHTML
119 <td width='20'><img height='1' width='20' src='$blankImageURL' alt=''></td>
120 <td valign='middle' nowrap width='100%'>$other_text</td>
121 EOHTML;
122         }
123         else {
124             $the_form .= <<<EOHTML
125 <td width='100%'><IMG height='1' width='1' src='$blankImageURL' alt=''></td>
126 EOHTML;
127         }
128
129         if ($show_help) {
130             $the_form .= "<td align='right' nowrap>";
131             if ($_REQUEST['action'] != "EditView") {
132                 $the_form .= <<<EOHTML
133     <a href='index.php?{$GLOBALS['request_string']}' class='utilsLink'>
134     <img src='{$printImageURL}' alt='{$app_strings['LBL_PRINT']}' border='0' align='absmiddle'>
135     </a>&nbsp;
136     <a href='index.php?{$GLOBALS['request_string']}' class='utilsLink'>
137     {$app_strings['LNK_PRINT']}</a>
138 EOHTML;
139             }
140             $the_form .= <<<EOHTML
141     &nbsp;
142     <a href='index.php?module=Administration&action=SupportPortal&view=documentation&version={$sugar_version}&edition={$sugar_flavor}&lang={$current_language}&help_module={$current_module}&help_action={$current_action}&key={$server_unique_key}'
143        class='utilsLink' target='_blank'>
144     <img src='{$helpImageURL}' alt='{$app_strings['LBL_HELP']}' border='0' align='absmiddle'>
145     </a>&nbsp;
146     <a href='index.php?module=Administration&action=SupportPortal&view=documentation&version={$sugar_version}&edition={$sugar_flavor}&lang={$current_language}&help_module={$current_module}&help_action={$current_action}&key={$server_unique_key}'
147         class='utilsLink' target='_blank'>{$app_strings['LNK_HELP']}</a>
148 </td>
149 EOHTML;
150         }
151     }
152
153     $the_form .= <<<EOHTML
154 </tr>
155 </table>
156 EOHTML;
157
158     return $the_form;
159 }
160
161 /**
162  * Wrapper function for the get_module_title function, which is mostly used for pre-MVC modules.
163  *
164  * @deprecated use SugarView::getModuleTitle() for MVC modules, or getClassicModuleTitle() for non-MVC modules
165  *
166  * @param  $module       string  to next to the title.  Typically used for form buttons.
167  * @param  $module_title string  to display as the module title
168  * @param  $show_help    boolean which determines if the print and help links are shown.
169  * @return string HTML
170  */
171 function get_module_title(
172     $module,
173     $module_title,
174     $show_create,
175     $count=0
176     )
177 {
178     global $sugar_version, $sugar_flavor, $server_unique_key, $current_language, $action;
179     global $app_strings;
180
181     $the_title = "<div class='moduleTitle'>\n";
182     $module = preg_replace("/ /","",$module);
183     $iconPath = "";
184     if(is_file(SugarThemeRegistry::current()->getImageURL('icon_'.$module.'_32.png',false)))
185     {
186         $iconPath = SugarThemeRegistry::current()->getImageURL('icon_'.$module.'_32.png');
187     } else if (is_file(SugarThemeRegistry::current()->getImageURL('icon_'.ucfirst($module).'_32.png',false)))
188     {
189         $iconPath = SugarThemeRegistry::current()->getImageURL('icon_'.ucfirst($module).'_32.png');
190     }
191     if (!empty($iconPath)) {
192         $the_title .= '<h2>';
193         if (SugarThemeRegistry::current()->directionality == "ltr") {
194                 $the_title .= "<a href='index.php?module={$module}&action=index'><img src='{$iconPath}' " . "alt='".$module."' title='".$module."' align='absmiddle'></a>";
195                 $the_title .= ($count >= 1) ? SugarView::getBreadCrumbSymbol() : "";
196                 $the_title .=  $module_title.'';
197         } else {
198                 $the_title .= $module_title;
199                 $the_title .= ($count > 1) ? SugarView::getBreadCrumbSymbol() : "";
200                 $the_title .= "<a href='index.php?module={$module}&action=index'><img src='{$iconPath}' "  . "alt='".$module."' title='".$module."' align='absmiddle'></a>";
201         }
202         $the_title .= '</h2>';
203     } else {
204                 $the_title .="<h2> $module_title </h2>";
205         }
206     $the_title .= "\n";
207     
208     if ($show_create) {
209         $the_title .= "<span class='utils'>";
210         $createRecordURL = SugarThemeRegistry::current()->getImageURL('create-record.gif');
211         $the_title .= <<<EOHTML
212 &nbsp;
213 <a href="index.php?module={$module}&action=EditView&return_module={$module}&return_action=DetailView" class="utilsLink">
214 <img src='{$createRecordURL}' alt='{$GLOBALS['app_strings']['LNK_CREATE']}'></a>
215 <a href="index.php?module={$module}&action=EditView&return_module={$module}&return_action=DetailView" class="utilsLink">
216 {$GLOBALS['app_strings']['LNK_CREATE']}
217 </a>
218 EOHTML;
219
220         $the_title .= '</span>';
221     }
222
223     $the_title .= "</div>\n";
224     return $the_title;
225 }
226
227 /**
228  * Handles displaying the header for classic view modules
229  *
230  * @param $module String value of the module to create the title section for
231  * @param $params Array of arguments used to create the title label.  Typically this is just the current language string label for the section
232  * These should be in the form of array('label' => '<THE LABEL>', 'link' => '<HREF TO LINK TO>');
233  * the first breadcrumb should be index at 0, and built from there e.g.
234  * <code>
235  * array(
236  *    '<a href="index.php?module=Contacts&amp;action=index">Contacts</a>',
237  *    '<a href="index.php?module=Contacts&amp;action=DetailView&amp;record=123">John Smith</a>',
238  *    'Edit',
239  *    );
240  * </code>
241  * would display as:
242  * <a href='index.php?module=Contacts&amp;action=index'>Contacts</a> >> <a href='index.php?module=Contacts&amp;action=DetailView&amp;record=123'>John Smith</a> >> Edit
243  * @param $show_create boolean flag indicating whether or not to display the create link (defaults to false)
244  * @param $index_url_override String value of url to override for module index link (defaults to module's index action if none supplied)
245  * @param $create_url_override String value of url to override for module create link (defaults to EditView action if none supplied)
246  *
247  * @return String HTML content for a classic module title section
248  */
249 function getClassicModuleTitle($module, $params, $show_create=false, $index_url_override='', $create_url_override='')
250 {
251         global $sugar_version, $sugar_flavor, $server_unique_key, $current_language, $action;
252     global $app_strings;
253
254         $module_title = '';
255         $count = count($params);
256         $index = 0;
257
258     $module = preg_replace("/ /","",$module);
259     $iconPath = "";
260     $the_title = "<div class='moduleTitle'>\n";
261
262     if(is_file(SugarThemeRegistry::current()->getImageURL('icon_'.$module.'_32.png',false)))
263     {
264         $iconPath = SugarThemeRegistry::current()->getImageURL('icon_'.$module.'_32.png');
265     } else if (is_file(SugarThemeRegistry::current()->getImageURL('icon_'.ucfirst($module).'_32.png',false)))
266     {
267         $iconPath = SugarThemeRegistry::current()->getImageURL('icon_'.ucfirst($module).'_32.png');
268     }
269     if (!empty($iconPath)) {
270         $url = (!empty($index_url_override)) ? $index_url_override : "index.php?module={$module}&action=index";
271         array_unshift ($params,"<a href='{$url}'><img src='{$iconPath}' ". "alt='".$module."' title='".$module."' align='absmiddle'></a>");
272         }
273
274         $new_params = array();
275         $i = 0;
276         foreach ($params as $value) {
277           if ((!is_null($value)) && ($value !== "")) {
278             $new_params[$i] = $value;
279             $i++;
280           }
281         }
282
283         if(SugarThemeRegistry::current()->directionality == "rtl") {
284                 $new_params = array_reverse($new_params);
285         }
286
287         $module_title = join(SugarView::getBreadCrumbSymbol(),$new_params);
288     if(!empty($module_title)){
289         $the_title .= "<h2>".$module_title."</h2>\n";//removing empty H2 tag for 508 compliance
290     }
291
292
293     if ($show_create) {
294         $the_title .= "<span class='utils'>";
295         $createRecordImage = SugarThemeRegistry::current()->getImageURL('create-record.gif');
296         if(empty($create_url_override))
297         {
298             $create_url_override = "index.php?module={$module}&action=EditView&return_module={$module}&return_action=DetailView";
299         }
300
301         $the_title .= <<<EOHTML
302 &nbsp;
303 <a href="{$create_url_override}" class="utilsLink">
304 <img src='{$createRecordImage}' alt='{$GLOBALS['app_strings']['LNK_CREATE']}'></a>
305 <a href="{$create_url_override}" class="utilsLink">
306 {$GLOBALS['app_strings']['LNK_CREATE']}
307 </a>
308 EOHTML;
309
310         $the_title .= '</span>';
311     }
312
313     $the_title .= "</div>\n";
314     return $the_title;
315
316 }
317
318 /**
319  * Create a header for a popup.
320  *
321  * @todo refactor this into the base Popup_Picker class
322  *
323  * @param  $theme string the name of the current theme, ignorred to use SugarThemeRegistry::current() instead.
324  * @return string HTML
325  */
326 function insert_popup_header(
327     $theme = null,
328     $includeJS = true
329     )
330 {
331     global $app_strings, $sugar_config;
332
333     $charset = isset($app_strings['LBL_CHARSET'])
334         ? $app_strings['LBL_CHARSET'] : $sugar_config['default_charset'];
335
336     $themeCSS = SugarThemeRegistry::current()->getCSS();
337
338     $langHeader = get_language_header();
339
340     //The SugarView will insert the header now, this function should no longer do the actual head element.
341     if ($includeJS)
342     {
343         echo <<<EOHTML
344 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
345 <html {$langHeader}>
346 <head>
347 <meta http-equiv="Content-Type" content="text/html; charset="{$charset}">
348 EOHTML;
349     }
350     echo "<title>{$app_strings['LBL_BROWSER_TITLE']}</title>" . $themeCSS;
351     if ($includeJS)
352     {
353         echo '<script type="text/javascript" src="' . getJSPath('cache/include/javascript/sugar_grp1_yui.js') . '"></script>';
354         echo '<script type="text/javascript" src="' . getJSPath('cache/include/javascript/sugar_grp1.js') . '"></script>';
355         echo '</head>';
356     }
357     echo  '<body class="popupBody">';
358 }
359
360 /**
361  * Create a footer for a popup.
362  *
363  * @todo refactor this into the base Popup_Picker class
364  *
365  * @return string HTML
366  */
367 function insert_popup_footer()
368 {
369     echo <<<EOQ
370 </body>
371 </html>
372 EOQ;
373 }
374 ?>