]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - include/MVC/View/views/view.popup.php
Release 6.2.2
[Github/sugarcrm.git] / include / MVC / View / views / view.popup.php
1 <?php
2 /*********************************************************************************
3  * SugarCRM Community Edition is a customer relationship management program developed by
4  * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
5  * 
6  * This program is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU Affero General Public License version 3 as published by the
8  * Free Software Foundation with the addition of the following permission added
9  * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
10  * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
11  * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
12  * 
13  * This program is distributed in the hope that it will be useful, but WITHOUT
14  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15  * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
16  * details.
17  * 
18  * You should have received a copy of the GNU Affero General Public License along with
19  * this program; if not, see http://www.gnu.org/licenses or write to the Free
20  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21  * 02110-1301 USA.
22  * 
23  * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
24  * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
25  * 
26  * The interactive user interfaces in modified source and object code versions
27  * of this program must display Appropriate Legal Notices, as required under
28  * Section 5 of the GNU Affero General Public License version 3.
29  * 
30  * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
31  * these Appropriate Legal Notices must retain the display of the "Powered by
32  * SugarCRM" logo. If the display of the logo is not reasonably feasible for
33  * technical reasons, the Appropriate Legal Notices must display the words
34  * "Powered by SugarCRM".
35  ********************************************************************************/
36
37 class ViewPopup extends SugarView{
38         var $type ='list';
39         function ViewPopup(){
40                 parent::SugarView();
41         }
42         
43         function display(){             
44                 global $popupMeta, $mod_strings;
45         
46         if(($this->bean instanceOf SugarBean) && !$this->bean->ACLAccess('list')){
47             ACLController::displayNoAccess();
48             sugar_cleanup(true);
49         }  
50
51         
52                 if(isset($_REQUEST['metadata']) && strpos($_REQUEST['metadata'], "..") !== false)
53                         die("Directory navigation attack denied.");
54                 if(!empty($_REQUEST['metadata']) && $_REQUEST['metadata'] != 'undefined' 
55                         && file_exists('modules/' . $this->module . '/metadata/' . $_REQUEST['metadata'] . '.php')) // if custom metadata is requested
56                         require_once('modules/' . $this->module . '/metadata/' . $_REQUEST['metadata'] . '.php');
57                 elseif(file_exists('custom/modules/' . $this->module . '/metadata/popupdefs.php'))
58                 require_once('custom/modules/' . $this->module . '/metadata/popupdefs.php');
59             elseif(file_exists('modules/' . $this->module . '/metadata/popupdefs.php'))
60                 require_once('modules/' . $this->module . '/metadata/popupdefs.php');
61             
62             if(!empty($popupMeta) && !empty($popupMeta['listviewdefs'])){
63                 if(is_array($popupMeta['listviewdefs'])){
64                         //if we have an array, then we are not going to include a file, but rather the 
65                         //listviewdefs will be defined directly in the popupdefs file
66                         $listViewDefs[$this->module] = $popupMeta['listviewdefs'];
67                 }else{
68                         //otherwise include the file
69                         require_once($popupMeta['listviewdefs']);
70                 }
71             }elseif(file_exists('custom/modules/' . $this->module . '/metadata/listviewdefs.php')){
72                         require_once('custom/modules/' . $this->module . '/metadata/listviewdefs.php');
73                 }elseif(file_exists('modules/' . $this->module . '/metadata/listviewdefs.php')){
74                         require_once('modules/' . $this->module . '/metadata/listviewdefs.php');
75                 }
76                 
77                 //check for searchdefs as well
78                 if(!empty($popupMeta) && !empty($popupMeta['searchdefs'])){
79                 if(is_array($popupMeta['searchdefs'])){
80                         //if we have an array, then we are not going to include a file, but rather the 
81                         //searchdefs will be defined directly in the popupdefs file
82                         $searchdefs[$this->module]['layout']['advanced_search'] = $popupMeta['searchdefs'];
83                 }else{
84                         //otherwise include the file
85                         require_once($popupMeta['searchdefs']);
86                 }
87             }else if(empty($searchdefs) && file_exists('custom/modules/'.$this->module.'/metadata/searchdefs.php')){
88                         require_once('custom/modules/'.$this->module.'/metadata/searchdefs.php');
89                 }else if(empty($searchdefs) && file_exists('modules/'.$this->module.'/metadata/searchdefs.php')){
90                 require_once('modules/'.$this->module.'/metadata/searchdefs.php');
91                 }
92                 
93                 //if you click the pagination button, it will poplate the search criteria here
94         if(!empty($this->bean) && isset($_REQUEST[$this->module.'2_'.strtoupper($this->bean->object_name).'_offset'])) {
95             if(!empty($_REQUEST['current_query_by_page'])) {
96                 $blockVariables = array('mass', 'uid', 'massupdate', 'delete', 'merge', 'selectCount', 
97                         'lvso', 'sortOrder', 'orderBy', 'request_data', 'current_query_by_page');
98                 $current_query_by_page = unserialize(base64_decode($_REQUEST['current_query_by_page']));
99                 foreach($current_query_by_page as $search_key=>$search_value) {
100                     if($search_key != $this->module.'2_'.strtoupper($this->bean->object_name).'_offset' 
101                         && !in_array($search_key, $blockVariables)) 
102                     {
103                                                 if (!is_array($search_value)) {
104                                 $_REQUEST[$search_key] = $GLOBALS['db']->quoteForEmail($search_value);
105                                                 }
106                         else {
107                                 foreach ($search_value as $key=>&$val) {
108                                         $val = $GLOBALS['db']->quoteForEmail($val);
109                                 }
110                                 $_REQUEST[$search_key] = $search_value;
111                         }                        
112                     }
113                 }
114             }
115         }
116         
117                 if(!empty($listViewDefs) && !empty($searchdefs)){
118                         require_once('include/Popups/PopupSmarty.php');
119                         $displayColumns = array();
120                         $filter_fields = array();
121                         $popup = new PopupSmarty($this->bean, $this->module);
122                         foreach($listViewDefs[$this->module] as $col => $params) {
123                         $filter_fields[strtolower($col)] = true;
124                                  if(!empty($params['related_fields'])) {
125                     foreach($params['related_fields'] as $field) {
126                         //id column is added by query construction function. This addition creates duplicates
127                         //and causes issues in oracle. #10165
128                         if ($field != 'id') {
129                             $filter_fields[$field] = true;
130                         }
131                     }
132                 }
133                         if(!empty($params['default']) && $params['default'])
134                                 $displayColumns[$col] = $params;
135                 }
136                 $popup->displayColumns = $displayColumns;
137                 $popup->filter_fields = $filter_fields;
138                 $popup->mergeDisplayColumns = true;
139                 //check to see if popupdes contains searchdefs
140                 $popup->_popupMeta = $popupMeta;
141             $popup->listviewdefs = $listViewDefs;
142                 $popup->searchdefs = $searchdefs;
143                 
144                 if(isset($_REQUEST['query'])){
145                                 $popup->searchForm->populateFromRequest();      
146                 }
147                 
148                         $massUpdateData = '';
149                         if(isset($_REQUEST['mass'])) {
150                                 foreach(array_unique($_REQUEST['mass']) as $record) {
151                                         $massUpdateData .= "<input style='display: none' checked type='checkbox' name='mass[]' value='$record'>\n";
152                                 }               
153                         }
154                         $popup->massUpdateData = $massUpdateData;
155                         
156                         $popup->setup('include/Popups/tpls/PopupGeneric.tpl');
157                         
158             insert_popup_header();              
159                         echo $popup->display();
160
161                 }else{
162                         if(file_exists('modules/' . $this->module . '/Popup_picker.php')){
163                                 require_once('modules/' . $this->module . '/Popup_picker.php');
164                         }else{
165                                 require_once('include/Popups/Popup_picker.php');
166                         }
167                 
168                         $popup = new Popup_Picker();
169                         $popup->_hide_clear_button = true;
170                         echo $popup->process_page();
171                 }
172         }
173 }
174 ?>