]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - modules/UpgradeWizard/index.php
Release 6.4.0
[Github/sugarcrm.git] / modules / UpgradeWizard / index.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
45 if(!is_admin($current_user)) {
46         sugar_die($app_strings['ERR_NOT_ADMIN']);
47 }
48
49 require_once('include/utils/db_utils.php');
50 require_once('include/utils/zip_utils.php');
51 require_once('modules/UpgradeWizard/uw_utils.php');
52 require_once('modules/Administration/UpgradeHistory.php');
53
54 $GLOBALS['top_message'] = '';
55
56 if(!isset($locale) || empty($locale)) {
57         $locale = new Localization();
58 }
59 global $sugar_config;
60 global $sugar_flavor;
61
62 ///////////////////////////////////////////////////////////////////////////////
63 ////    SYSTEM PREP
64 list($base_upgrade_dir, $base_tmp_upgrade_dir) = getUWDirs();
65 $subdirs = array('full', 'langpack', 'module', 'patch', 'theme');
66
67 global $sugar_flavor;
68
69 prepSystemForUpgrade();
70
71 $uwMain = '';
72 $steps = array();
73 $step = 0;
74 $showNext = '';
75 $showCancel = '';
76 $showBack = '';
77 $showRecheck = '';
78 $stepNext = '';
79 $stepCancel = '';
80 $stepBack = '';
81 $stepRecheck = '';
82 $showDone = '';
83 $showExit = '';
84 $disableNextForLicense='';
85
86 if(!isset($_SESSION['step']) || !is_array($_SESSION['step'])){
87         $_SESSION['step'] = array();
88 }
89
90 ////    END SYSTEM PREP
91 ///////////////////////////////////////////////////////////////////////////////
92
93 ///////////////////////////////////////////////////////////////////////////////
94 ////    LOGIC
95 $uh = new UpgradeHistory();
96 $smarty = new Sugar_Smarty();
97 set_upgrade_vars();
98 //Initialize the session variables. If upgrade_progress.php is already created
99 //look for session vars there and restore them
100 initialize_session_vars();
101
102 $deletedPackage =false;
103 $cancelUpgrade = false;
104 $backOrRecheckUpgrade = false;
105
106 // this flag set in pre_install.php->UWUpgrade();
107
108 //ADDING A SESSION VARIBALE FOR KEEPING TRACK OF TOTAL UPGRADE TIME.
109 if(!isset($_SESSION['totalUpgradeTime'])){
110   $_SESSION['totalUpgradeTime'] = 0;
111 }
112
113 if(!isset($mod_strings['LBL_UW_ACCEPT_THE_LICENSE']) || $mod_strings['LBL_UW_ACCEPT_THE_LICENSE'] == null){
114         $mod_strings['LBL_UW_ACCEPT_THE_LICENSE'] = 'Accept License';
115 }
116 if(!isset($mod_strings['LBL_UW_CONVERT_THE_LICENSE']) || $mod_strings['LBL_UW_CONVERT_THE_LICENSE'] == null){
117         $mod_strings['LBL_UW_CONVERT_THE_LICENSE'] = 'Convert License';
118 }
119
120 $license_title = $mod_strings['LBL_UW_ACCEPT_THE_LICENSE'];
121 if((isset($sugar_flavor) && $sugar_flavor != null) && ($sugar_flavor=='OS' || $sugar_flavor=='CE')){
122         $license_title = $mod_strings['LBL_UW_CONVERT_THE_LICENSE'];
123 }
124
125 if(isset($_REQUEST['delete_package']) && $_REQUEST['delete_package'] == 'true') {
126                 logThis('running delete old package');
127         $error = '';
128         if(!isset($_REQUEST['install_file']) || ($_REQUEST['install_file'] == "")) {
129                 logThis('ERROR: trying to delete non-existent file: ['.$_REQUEST['install_file'].']');
130             $error .= $mod_strings['ERR_UW_NO_FILE_UPLOADED'].'<br>';
131         }
132
133         // delete file in upgrades/patch
134         $delete_me = 'upload://upgrades/patch/'.basename(urldecode( $_REQUEST['install_file'] ));
135         if(is_file($delete_me) && !@unlink($delete_me)) {
136                 logThis('ERROR: could not delete: '.$delete_me);
137             $error .= $mod_strings['ERR_UW_FILE_NOT_DELETED'].$delete_me.'<br>';
138         }
139
140         // delete back up instance
141         $delete_dir = 'upload://upgrades/patch/'.remove_file_extension(urldecode($_REQUEST['install_file'])) . "-restore";
142         if(is_dir($delete_dir) && !@rmdir_recursive($delete_dir)) {
143                 logThis('ERROR: could not delete: '.$delete_dir);
144                 $error .= $mod_strings['ERR_UW_FILE_NOT_DELETED'].$delete_dir.'<br>';
145         }
146
147         if(!empty($error)) {
148                         $out = "<b><span class='error'>{$error}</span></b><br />";
149                         if(!empty($GLOBALS['top_message'])){
150                             $GLOBALS['top_message'] .= "<br />{$out}";
151                         }
152                         else{
153                             $GLOBALS['top_message'] = $out;
154                         }
155         }
156 }
157
158 //redirect to the new upgradewizard
159 if(isset($_SESSION['Upgraded451Wizard']) && $_SESSION['Upgraded451Wizard']==true){
160         if(!isset($_SESSION['Initial_451to500_Step'])){
161                         //redirect to the new upgradewizard
162                         $redirect_new_wizard = $sugar_config['site_url' ].'/index.php?module=UpgradeWizard&action=index';
163                         //'<form name="redirect" action="' .$redirect_new_wizard. '" >';
164                         //echo "<meta http-equiv='refresh' content='0; url={$redirect_new_wizard}'>";
165                         $_SESSION['Initial_451to500_Step'] = true;
166                          //unset($_SESSION['step']);
167                         $_REQUEST['step'] = 0;
168          }
169                 $steps = array(
170                 'files' => array(
171                     'license_fiveO',
172                     'preflight',
173                     'commit',
174                     'end',
175                     'cancel',
176                 ),
177                 'desc' => array (
178                     $license_title,
179                     $mod_strings['LBL_UW_TITLE_PREFLIGHT'],
180                     $mod_strings['LBL_UW_TITLE_COMMIT'],
181                     $mod_strings['LBL_UW_TITLE_END'],
182                     $mod_strings['LBL_UW_TITLE_CANCEL'],
183                 ),
184                 );
185 }
186 else{
187         if(isset($_SESSION['UpgradedUpgradeWizard']) && $_SESSION['UpgradedUpgradeWizard'] == true) {
188                 // Upgrading from 5.0 upwards and upload already performed.
189                 $steps = array(
190                         'files' => array(
191                             'start',
192                             'systemCheck',
193                             'preflight',
194                                 'commit',
195                             'end',
196                             'cancel',
197                     ),
198                     'desc' => array (
199                             $mod_strings['LBL_UW_TITLE_START'],
200                             $mod_strings['LBL_UW_TITLE_SYSTEM_CHECK'],
201                             $mod_strings['LBL_UW_TITLE_PREFLIGHT'],
202                                         $mod_strings['LBL_UW_TITLE_COMMIT'],
203                             $mod_strings['LBL_UW_TITLE_END'],
204                             $mod_strings['LBL_UW_TITLE_CANCEL'],
205                     ),
206                 );
207         }
208         else{
209         if (empty($mod_strings['LBL_UW_TITLE_LAYOUTS']))
210             $mod_strings['LBL_UW_TITLE_LAYOUTS'] = 'Layouts';
211         /* END TEMP FIX */
212
213         // Upgrading from 5.0 upwards and upload not performed yet.
214                 $steps = array(
215                         'files' => array(
216                             'start',
217                             'systemCheck',
218                             'upload',
219                             'preflight',
220                             'commit',
221                             'layouts',
222                             'end',
223                             'cancel',
224                     ),
225                     'desc' => array (
226                             $mod_strings['LBL_UW_TITLE_START'],
227                             $mod_strings['LBL_UW_TITLE_SYSTEM_CHECK'],
228                             $mod_strings['LBL_UPLOAD_UPGRADE'],
229                             $mod_strings['LBL_UW_TITLE_PREFLIGHT'],
230                             $mod_strings['LBL_UW_TITLE_COMMIT'],
231                             $mod_strings['LBL_UW_TITLE_LAYOUTS'],
232                             $mod_strings['LBL_UW_TITLE_END'],
233                             $mod_strings['LBL_UW_TITLE_CANCEL'],
234                     ),
235                 );
236
237         }
238 }
239
240 $upgradeStepFile = '';
241 if(isset($_REQUEST['step']) && $_REQUEST['step'] !=null){
242     if($_REQUEST['step'] == -1) {
243             $_REQUEST['step'] = count($steps['files']) - 1;
244     } elseif($_REQUEST['step'] >= count($steps['files'])) {
245             $_REQUEST['step'] = 0;
246     }
247    $upgradeStepFile = $steps['files'][$_REQUEST['step']];
248 } else {
249         //check if upgrade was run before. If so then resume from there
250         $previouUpgradeRun = get_upgrade_progress();
251         if($previouUpgradeRun != null){
252                 //echo 'Previous run '.$previouUpgradeRun.'</br>';
253                 $upgradeStepFile = $previouUpgradeRun;
254                 //reset REQUEST
255                 for($i=0;$i<sizeof($steps['files']);$i++){
256                         if($steps['files'][$i]== $previouUpgradeRun){
257                                 $_REQUEST['step']=$i;
258                                 break;
259                         }
260            }
261         }
262         else{
263                 // first time through - kill off old sessions
264             unset($_SESSION['step']);
265             $_REQUEST['step'] = 0;
266             $upgradeStepFile = $steps['files'][$_REQUEST['step']];
267         }
268 }
269
270 if($upgradeStepFile == 'license_fiveO'){
271         $disableNextForLicense = 'disabled = "disabled"';
272 }
273 if($upgradeStepFile == 'end'){
274     //if(isset($_SESSION['current_db_version']) && substr($_SESSION['current_db_version'],0,1) == 4){
275             ob_start();
276                  include('modules/ACL/install_actions.php');
277                  $old_mod_strings = $mod_strings;
278                  $mod_strings = return_module_language($current_language, 'Administration');
279                  include('modules/Administration/RebuildRelationship.php');
280                  $mod_strings = $old_mod_strings;
281                  //also add the cache cleaning here.
282                 if(function_exists('deleteCache')){
283                         deleteCache();
284                 }
285                 ob_end_clean();
286        if(isset($_SESSION['current_db_version']) && substr($_SESSION['current_db_version'],0,1) == 4){
287                    //Remove footer from themes except default, love and link themes
288                     logThis('Start removing footer.php file from themes...');
289                         $deleteNot =array('themes/default/footer.php','themes/Love/footer.php','themes/Links/footer.php');
290                         removeFileFromPath('footer.php','themes', $deleteNot);
291                     logThis('End removing footer.php file from themes...');
292        }
293     //}
294 }
295
296 require('modules/UpgradeWizard/'.$upgradeStepFile.'.php');
297
298 $afterCurrentStep = $_REQUEST['step'] + 1;
299
300 ////    END LOGIC
301 ///////////////////////////////////////////////////////////////////////////////
302
303 ///////////////////////////////////////////////////////////////////////////////
304 ////    UPGRADE HISTORY
305 // Reload language strings after copy
306 if(empty($GLOBALS['current_language'])) {
307     $GLOBALS['current_language'] = 'en_us';
308 }
309 LanguageManager::loadModuleLanguage('UpgradeWizard', $GLOBALS['current_language'], true);
310 // display installed pieces and versions
311 $installeds = $uh->getAll();
312 $upgrades_installed = 0;
313
314 $uwHistory  = '<table width="100%" border="0" cellspacing="0" cellpadding="0" class="edit view"><tr><td>'.$mod_strings['LBL_UW_DESC_MODULES_INSTALLED']."<br>\n";
315 $uwHistory .= "<ul>\n";
316 $uwHistory .= "<table class=\"edit view\" cellspacing=5>\n";
317 $uwHistory .= <<<eoq
318         <tr>
319                 <td></td>
320                 <td align=left>
321                         <b>{$mod_strings['LBL_ML_NAME']}</b>
322                 </td>
323                 <td align=left>
324                         <b>{$mod_strings['LBL_ML_TYPE']}</b>
325                 </td>
326                 <td align=left>
327                         <b>{$mod_strings['LBL_ML_VERSION']}</b>
328                 </td>
329                 <td align=left>
330                         <b>{$mod_strings['LBL_ML_INSTALLED']}</b>
331                 </td>
332                 <td align=left>
333                         <b>{$mod_strings['LBL_ML_DESCRIPTION']}</b>
334                 </td>
335                 <td align=left>
336                         <b>{$mod_strings['LBL_ML_ACTION']}</b>
337                 </td>
338         </tr>
339 eoq;
340
341 foreach($installeds as $installed) {
342         $form_action = '';
343         $filename = from_html($installed->filename);
344         $date_entered = $installed->date_entered;
345         $type = $installed->type;
346         //rrs only display patches here
347         if($type == 'patch'){
348                 $version = $installed->version;
349                 $upgrades_installed++;
350                 $link = is_file($filename)? '   <input type="hidden" name="module" value="UpgradeWizard">
351                                         <input type="hidden" name="action" value="index">
352                                         <input type="hidden" name="step" value="'.$_REQUEST['step'].'">
353                                         <input type="hidden" name="delete_package" value="true">
354                                 <input type=hidden name="install_file" value="'.$filename.'" />
355                                 <input type=submit value="'.$mod_strings['LBL_BUTTON_DELETE'].'" />':'';
356
357                 $view = 'default';
358
359                 $target_manifest = remove_file_extension( $filename ) . "-manifest.php";
360
361                 // cn: bug 9174 - cleared out upgrade dirs, or corrupt entries in upgrade_history give us bad file paths
362                 if(is_file($target_manifest)) {
363                         require_once(getUploadRelativeName($target_manifest) );
364                         $name = empty($manifest['name']) ? $filename : $manifest['name'];
365                         $description = empty($manifest['description']) ? $mod_strings['LBL_UW_NONE'] : $manifest['description'];
366
367                         if(isset($manifest['icon']) && $manifest['icon'] != "") {
368                                 $manifest_copy_files_to_dir = isset($manifest['copy_files']['to_dir']) ? clean_path($manifest['copy_files']['to_dir']) : "";
369                                 $manifest_copy_files_from_dir = isset($manifest['copy_files']['from_dir']) ? clean_path($manifest['copy_files']['from_dir']) : "";
370                                 $manifest_icon = clean_path($manifest['icon']);
371                                 $icon = "<!--not_in_theme!--><img src=\"" . $manifest_copy_files_to_dir . ($manifest_copy_files_from_dir != "" ? substr($manifest_icon, strlen($manifest_copy_files_from_dir)+1) : $manifest_icon ) . "\">";
372                         } else {
373                                 $icon = getImageForType( $manifest['type'] );
374                         }
375
376                         $uwHistory .= "<form action=\"index.php\" method=\"post\">\n".
377                                 "<tr><td align=left>$icon</td><td align=left>$name</td><td align=left>$type</td><td align=left>$version</td><td align=left>$date_entered</td><td align=left>$description</td><td align=left>$link</td></tr>\n".
378                                 "</form>\n";
379                 }
380         }
381 }
382
383
384 if($upgrades_installed == 0) {
385         $uwHistory .= "<td colspan='6'>";
386         $uwHistory .= $mod_strings['LBL_UW_NO_INSTALLED_UPGRADES'];
387         $uwHistory .= "</td></tr>";
388 }
389
390 $uwHistory .= "</table></td></tr>
391 </table>\n";
392 $uwHistory .= "</ul>\n";
393 ////    END UPGRADE HISTORY
394 ///////////////////////////////////////////////////////////////////////////////
395
396 ///////////////////////////////////////////////////////////////////////////////
397 ////    PAGE OUTPUT
398
399 if($upgradeStepFile=='preflight' || $upgradeStepFile=='commit' || $upgradeStepFile=='end'){
400 $UW_510RC_PACKAGE_MESSAGE=<<<eoq
401 <table cellpadding="3" cellspacing="0" border="0">
402         <tr>
403                 <th colspan="2" align="center">
404                         <h1><span class='error'><b>We do not recommended upgrading your production system to 5.1.0 RC. We recommend upgrading a development system for testing purposes.</b></span></h1>
405                 </th>
406         </tr>
407 </table>
408 eoq;
409 }
410 $js=<<<eoq
411 <script type="text/javascript" language="Javascript">
412         function toggleNwFiles(target) {
413                 var div = document.getElementById(target);
414
415                 if(div.style.display == "none") {
416                         div.style.display = "";
417                 } else {
418                         div.style.display = "none";
419                 }
420         }
421
422
423
424 function handlePreflight(step) {
425                 if(step == 'preflight') {
426                         if(document.getElementById('select_schema_change') != null){
427                                 document.getElementById('schema').value = document.getElementById('select_schema_change').value;
428                         }
429                         if(document.getElementById('diffs') != null) {
430                                 /* preset the hidden var for defaults */
431                                 checkSqlStatus(false);
432
433                                 theForm = document.getElementById('diffs');
434                                 var serial = '';
435                                 for(i=0; i<theForm.elements.length; i++) {
436                                                 if(theForm.elements[i].type == 'checkbox' && theForm.elements[i].checked == false) {
437                                                 // we only want "DON'T OVERWRITE" files
438                                                 if(serial != '') {
439                                                         serial += "::";
440                                                 }
441                                                 serial += theForm.elements[i].value;
442                                         }
443                                 }                               document.getElementById('overwrite_files_serial').value = serial;
444
445                                 if(document.getElementById('addTask').checked == true) {
446                                         document.getElementById('addTaskReminder').value = 'remind';
447                                 }
448                                 if(document.getElementById('addEmail').checked == true) {
449                                         document.getElementById('addEmailReminder').value = 'remind';
450                                 }
451                         }
452                 }
453
454                 var merge_necessary = true;
455                 if(step == 'layouts')
456                    merge_necessary = getSelectedModulesForLayoutMerge();
457
458                 if(!merge_necessary){
459                         document.getElementById('step').value = '{$afterCurrentStep}';
460                 }
461
462                 return;
463         }
464
465 function handleUploadCheck(step, u_allow) {
466         if(step == 'upload' && !u_allow) {
467                 document.getElementById('top_message').innerHTML = '<span class="error"><b>{$mod_strings['LBL_UW_FROZEN']}</b></span>';
468         }
469
470         return;
471 }
472
473
474 function getSelectedModulesForLayoutMerge()
475 {
476         var found_one = false;
477     var results = new Array();
478     var table = document.getElementById('layoutSelection');
479     var moduleCheckboxes = table.getElementsByTagName('input');
480     for (var i = 0; i < moduleCheckboxes.length; i++)
481     {
482         var singleCheckbox = moduleCheckboxes[i];
483         if( typeof(singleCheckbox.type) != 'undefined' && singleCheckbox.type == 'checkbox'
484             && singleCheckbox.name.substring(0,2) == 'lm' && singleCheckbox.checked )
485         {
486             found_one = true;
487             results.push(singleCheckbox.name.substring(3)); //remove the 'lm_' key
488         }
489     }
490
491     var selectedModules = results.join('^,^');
492
493     var selectedModulesElement = document.createElement('input');
494     selectedModulesElement.setAttribute('type', 'hidden');
495     selectedModulesElement.setAttribute('name', 'layoutSelectedModules');
496     selectedModulesElement.setAttribute('value', selectedModules);
497
498     var upgradeForms = document.getElementsByName('UpgradeWizardForm');
499     upgradeForms[0].appendChild(selectedModulesElement);
500     return found_one;
501 }
502 </script>
503 eoq;
504
505 $smarty->assign('UW_MAIN', $uwMain);
506 $smarty->assign('UW_JS', $js);
507 $smarty->assign('CHECKLIST', getChecklist($steps, $step));
508 $smarty->assign('UW_TITLE', getClassicModuleTitle($mod_strings['LBL_UW_TITLE'], array($mod_strings['LBL_UW_TITLE'],$steps['desc'][$_REQUEST['step']]), false));
509 $smarty->assign('MOD', $mod_strings);
510 $smarty->assign('APP', $app_strings);
511 $smarty->assign('GRIDLINE', $current_user->getPreference('gridline'));
512 $smarty->assign('showNext', $showNext);
513 $smarty->assign('showCancel', $showCancel);
514 $smarty->assign('showBack', $showBack);
515 $smarty->assign('showRecheck', $showRecheck);
516 $smarty->assign('showDone', $showDone);
517 $smarty->assign('showExit', $showExit);
518 $smarty->assign('STEP_NEXT', $stepNext);
519 $smarty->assign('STEP_CANCEL', $stepCancel);
520 $smarty->assign('STEP_BACK', $stepBack);
521 $smarty->assign('STEP_RECHECK', $stepRecheck);
522 $smarty->assign('step', $steps['files'][$_REQUEST['step']]);
523 $smarty->assign('UW_HISTORY', $uwHistory);
524 $smarty->assign('disableNextForLicense',$disableNextForLicense);
525 $u_allow='true';
526 if(isset($stop) && $stop == true) {
527         $frozen = (isset($frozen)) ? "<br />".$frozen : '';
528         $smarty->assign('frozen', $frozen);
529         if($step == 'upload')
530             $u_allow = 'false';
531 }
532 $smarty->assign('u_allow', $u_allow);
533 if(!empty($GLOBALS['top_message'])){
534         $smarty->assign('top_message', $GLOBALS['top_message']);
535 }
536
537 if ($sugar_config['sugar_version'] < '5.5') {
538         $smarty->assign('includeContainerCSS', true);
539 } else {
540         $smarty->assign('includeContainerCSS', false);
541 } // else
542 $smarty->display('modules/UpgradeWizard/uw_main.tpl');
543 ////    END PAGE OUTPUT
544 ///////////////////////////////////////////////////////////////////////////////
545
546 ?>