]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - modules/UpgradeWizard/end.php
Release 6.4.0
[Github/sugarcrm.git] / modules / UpgradeWizard / end.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  * Description:
41  * Portions created by SugarCRM are Copyright (C) SugarCRM, Inc. All Rights
42  * Reserved. Contributor(s): ______________________________________..
43  * *******************************************************************************/
44 logThis('[At end.php]');
45 global $unzip_dir;
46 global $path;
47 global $sugar_config;
48
49 if($unzip_dir == null ) {
50         $unzip_dir = $_SESSION['unzip_dir'];
51 }
52
53 //First repair the databse to ensure it is up to date with the new vardefs/tabledefs
54 logThis('About to repair the database.', $path);
55 //Use Repair and rebuild to update the database.
56 global $dictionary, $beanFiles;
57
58 require_once('modules/Trackers/TrackerManager.php');
59 $trackerManager = TrackerManager::getInstance();
60 $trackerManager->pause();
61 $trackerManager->unsetMonitors();
62
63 require_once("modules/Administration/QuickRepairAndRebuild.php");
64 $rac = new RepairAndClear();
65 $rac->clearVardefs();
66 $rac->rebuildExtensions();
67 //bug: 44431 - defensive check to ensure the method exists since upgrades to 6.2.0 may not have this method define yet.
68 if(method_exists($rac, 'clearExternalAPICache'))
69 {
70     $rac->clearExternalAPICache();
71 }
72
73 $repairedTables = array();
74
75 foreach ($beanFiles as $bean => $file) {
76         if(file_exists($file)){
77                 require_once ($file);
78                 unset($GLOBALS['dictionary'][$bean]);
79                 $focus = new $bean ();
80                 if (($focus instanceOf SugarBean))
81                 {
82                         if(!isset($repairedTables[$focus->table_name]))
83                         {
84                                 $sql = $GLOBALS['db']->repairTable($focus, true);
85                 if(trim($sql) != '')
86                 {
87                                     logThis('Running sql:' . $sql, $path);
88                 }
89                                 $repairedTables[$focus->table_name] = true;
90                         }
91
92                         //Check to see if we need to create the audit table
93                     if($focus->is_AuditEnabled() && !$focus->db->tableExists($focus->get_audit_table_name())){
94                        logThis('Creating audit table:' . $focus->get_audit_table_name(), $path);
95                $focus->create_audit_table();
96             }
97                 }
98         }
99 }
100
101 $olddictionary = $dictionary;
102
103 unset ($dictionary);
104 include ('modules/TableDictionary.php');
105 foreach ($dictionary as $meta) {
106         $tablename = $meta['table'];
107         if (isset($repairedTables[$tablename])) continue;
108         $fielddefs = $meta['fields'];
109         $indices = $meta['indices'];
110         $sql = $GLOBALS['db']->repairTableParams($tablename, $fielddefs, $indices, true);
111     if(trim($sql) != '')
112     {
113             logThis('Running sql:' . $sql, $path);
114     }
115         $repairedTables[$tablename] = true;
116 }
117
118                 $dictionary = $olddictionary;
119
120 logThis('database repaired', $path);
121
122 $ce_to_pro_ent = isset($_SESSION['upgrade_from_flavor']) && ($_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarPro' || $_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarEnt' || $_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarCorp' || $_SESSION['upgrade_from_flavor'] == 'SugarCE to SugarUlt');
123
124
125 logThis(" Start Rebuilding the config file again", $path);
126
127 //check and set the logger before rebuilding config
128 if(!isset($sugar_config['logger'])){
129         $sugar_config['logger'] =array (
130                 'level'=>'fatal',
131             'file' =>
132               array (
133                       'ext' => '.log',
134                       'name' => 'sugarcrm',
135                       'dateFormat' => '%c',
136                       'maxSize' => '10MB',
137                       'maxLogs' => 10,
138                       'suffix' => '%m_%Y',
139                   ),
140         );
141 }
142 //for upgraded version, set default lead conversion activity option to 'copy'
143 if(!isset($sugar_config['lead_conv_activity_opt'])) {
144     $sugar_config['lead_conv_activity_opt'] = 'copy';
145 }
146
147 if(!rebuildConfigFile($sugar_config, $sugar_version)) {
148         logThis('*** WARNING: could not write config.php!', $path);
149 }
150 logThis(" Finish Rebuilding the config file again", $path);
151
152 set_upgrade_progress('end','in_progress');
153
154
155 if(isset($_SESSION['current_db_version']) && isset($_SESSION['target_db_version'])){
156         if($_SESSION['current_db_version'] != $_SESSION['target_db_version']){
157                 logThis("Upgrading multienum data", $path);
158         if(file_exists("$unzip_dir/scripts/upgrade_multienum_data.php")) {
159             require_once("$unzip_dir/scripts/upgrade_multienum_data.php");
160             upgrade_multienum_data();
161         }
162          }
163
164
165          //keeping separate. making easily visible and readable
166          if($_SESSION['current_db_version'] == $_SESSION['target_db_version']){
167             $_REQUEST['upgradeWizard'] = true;
168             ob_start();
169                         include('modules/ACL/install_actions.php');
170                         include_once('include/Smarty/internals/core.write_file.php');
171                 ob_end_clean();
172                 $db =& DBManagerFactory::getInstance();
173                 if($ce_to_pro_ent){
174                 //Also set license information
175                         $admin = new Administration();
176                         $category = 'license';
177                         $value = '0';
178                         $admin->saveSetting($category, 'users', $value);
179                         $key = array('num_lic_oc','key','expire_date');
180                         $value = '';
181                         foreach($key as $k){
182                                 $admin->saveSetting($category, $k, $value);
183                         }
184                 }
185         }
186 }
187
188 // Mark the instance as having gone thru the admin wizard
189 $admin = new Administration();
190 $admin->saveSetting('system','adminwizard',1);
191
192  /////////////////////////Old Logger settings///////////////////////////////////////
193 ///////////////////////////////////////////////////////////////////////////////
194 if(file_exists('modules/Configurator/Configurator.php')){
195         require_once('include/utils/array_utils.php');
196         require_once('modules/Configurator/Configurator.php');
197         $Configurator = new Configurator();
198         $Configurator->parseLoggerSettings();
199 }
200 //unset the logger previously instantiated
201 if(file_exists('include/SugarLogger/LoggerManager.php')){
202
203         unset($GLOBALS['log']);
204         $GLOBALS['log'] = LoggerManager::getLogger('SugarCRM');
205 }
206
207
208 //Upgrade connectors
209 /*
210 if($_SESSION['current_db_version'] < '610' && function_exists('upgrade_connectors'))
211 {
212    upgrade_connectors($path);
213 }
214 */
215
216 // Enable the InsideView connector by default
217 if($_SESSION['current_db_version'] < '621' && function_exists('upgradeEnableInsideViewConnector')) {
218     upgradeEnableInsideViewConnector();
219 }
220
221 /*
222 if ($_SESSION['current_db_version'] < '620' && ($sugar_config['dbconfig']['db_type'] == 'mssql' || $sugar_config['dbconfig']['db_type'] == 'oci8'))
223 {
224     repair_long_relationship_names($path);
225 }
226 */
227
228 //Global search support
229 /*
230 if($_SESSION['current_db_version'] < '620' && function_exists('add_unified_search_to_custom_modules_vardefs'))
231 {
232    logThis('Add global search for custom modules start .', $path);
233    add_unified_search_to_custom_modules_vardefs();
234    logThis('Add global search for custom modules finished .', $path);
235 }
236 */
237
238 //Upgrade system displayed tabs and subpanels
239 if(function_exists('upgradeDisplayedTabsAndSubpanels'))
240 {
241         upgradeDisplayedTabsAndSubpanels($_SESSION['current_db_version']);
242 }
243
244
245 //Unlink files that have been removed
246 if(function_exists('unlinkUpgradeFiles'))
247 {
248         unlinkUpgradeFiles($_SESSION['current_db_version']);
249 }
250
251 if(function_exists('rebuildSprites') && function_exists('imagecreatetruecolor'))
252 {
253     rebuildSprites(true);
254 }
255
256 require_once('modules/Administration/upgrade_custom_relationships.php');
257 upgrade_custom_relationships();
258
259 require_once('modules/UpgradeWizard/uw_utils.php');
260
261 /*
262 if($_SESSION['current_db_version'] < '620')
263 {
264         upgradeDateTimeFields($path);
265         upgradeDocumentTypeFields($path);
266 }
267 */
268
269 //Update the license
270 logThis('Start Updating the license ', $path);
271 ob_start();
272
273    check_now(get_sugarbeat());
274 ob_end_clean();
275 logThis('End Updating the license ', $path);
276
277 set_upgrade_progress('end','done');
278
279 logThis('Cleaning up the session.  Goodbye.');
280 unlinkUWTempFiles();
281 logThis('Cleaning up the session.  Goodbye.');
282 resetUwSession();
283 // flag to say upgrade has completed
284 $_SESSION['upgrade_complete'] = true;
285
286 //Clear any third party caches
287 sugar_cache_reset_full();
288
289 //add the clean vardefs here
290 if(!class_exists('VardefManager')){
291
292 }
293 VardefManager::clearVardef();
294
295 require_once('include/TemplateHandler/TemplateHandler.php');
296 TemplateHandler::clearAll();
297
298 //also add the cache cleaning here.
299 if(function_exists('deleteCache')){
300         deleteCache();
301 }
302
303 global $mod_strings;
304 global $current_language;
305
306 if(!isset($current_language) || ($current_language == null)){
307         $current_language = 'en_us';
308 }
309 if(isset($GLOBALS['current_language']) && ($GLOBALS['current_language'] != null)){
310         $current_language = $GLOBALS['current_language'];
311 }
312 $mod_strings = return_module_language($current_language, 'UpgradeWizard');
313 $stop = false;
314
315
316 $httpHost               = $_SERVER['HTTP_HOST'];  // cn: 8472 - HTTP_HOST includes port in some cases
317 if($colon = strpos($httpHost, ':')) {
318         $httpHost       = substr($httpHost, 0, $colon);
319 }
320 $parsedSiteUrl  = parse_url($sugar_config['site_url']);
321 $host                   = ($parsedSiteUrl['host'] != $httpHost) ? $httpHost : $parsedSiteUrl['host'];
322
323 // aw: 9747 - use SERVER_PORT for users who don't plug in the site_url at install correctly
324 if ($_SERVER['SERVER_PORT'] != 80){
325         $port = ":".$_SERVER['SERVER_PORT'];
326 }
327 else if (isset($parsedSiteUrl['port']) && $parsedSiteUrl['port'] != 80){
328         $port = ":".$parsedSiteUrl['port'];
329 }
330 else{
331         $port = '';
332 }
333 $path                   = $parsedSiteUrl['path'];
334 $cleanUrl               = "{$parsedSiteUrl['scheme']}://{$host}{$port}{$path}/index.php";
335
336 $uwMain =<<<eoq
337 <table cellpadding="3" cellspacing="0" border="0">
338
339         <tr>
340                 <td align="left">
341                         <p>
342                         <br>
343                         {$mod_strings['LBL_UW_END_LOGOUT_PRE2']}
344                         <br>
345                         <br>
346             <b>{$mod_strings['LBL_UW_END_LOGOUT_PRE']}</b> {$mod_strings['LBL_UW_END_LOGOUT']}
347                         </p>
348                 </td>
349         </tr>
350 </table>
351
352 <script>
353  function deleteCacheAjax(){
354         //AJAX call for checking the file size and comparing with php.ini settings.
355         var callback = {
356                  success:function(r) {
357                      //alert(r.responseText);
358                  }
359         }
360         postData = '&module=UpgradeWizard&action=deleteCache&to_pdf=1';
361         YAHOO.util.Connect.asyncRequest('POST', 'index.php', callback, postData);
362 }
363 </script>
364 eoq;
365
366 $showBack               = false;
367 $showCancel             = false;
368 $showRecheck    = false;
369 $showNext               = false;
370 $showDone       = true;
371
372 $stepBack               = 0;
373 $stepNext               = 0;
374 $stepCancel     = 0;
375 $stepRecheck    = 0;
376
377 $_SESSION['step'][$steps['files'][$_REQUEST['step']]] = ($stop) ? 'failed' : 'success';
378 unset($_SESSION['current_db_version']);
379 unset($_SESSION['target_db_version']);