2016-04-26 03:30:23 +02:00
< ? php
/*
FusionPBX
Version : MPL 1.1
The contents of this file are subject to the Mozilla Public License Version
1.1 ( the " License " ); you may not use this file except in compliance with
the License . You may obtain a copy of the License at
http :// www . mozilla . org / MPL /
Software distributed under the License is distributed on an " AS IS " basis ,
WITHOUT WARRANTY OF ANY KIND , either express or implied . See the License
for the specific language governing rights and limitations under the
License .
The Original Code is FusionPBX
The Initial Developer of the Original Code is
Mark J Crane < markjcrane @ fusionpbx . com >
2022-09-21 03:01:32 +02:00
Portions created by the Initial Developer are Copyright ( C ) 2008 - 2022
2016-04-26 03:30:23 +02:00
the Initial Developer . All Rights Reserved .
Contributor ( s ) :
Mark J Crane < markjcrane @ fusionpbx . com >
*/
2016-09-11 01:26:14 +02:00
//set a timeout
2017-06-03 06:38:15 +02:00
set_time_limit ( 15 * 60 ); //15 minutes
2016-04-26 03:30:23 +02:00
2022-10-11 00:35:14 +02:00
//set the include path
$conf = glob ( " { /usr/local/etc,/etc}/fusionpbx/config.conf " , GLOB_BRACE );
set_include_path ( parse_ini_file ( $conf [ 0 ])[ 'document.root' ]);
//includes files
2016-09-11 01:26:14 +02:00
require_once " resources/require.php " ;
require_once " resources/check_auth.php " ;
2016-04-26 03:30:23 +02:00
//check the permission
2016-09-11 01:26:14 +02:00
if (
! permission_exists ( 'upgrade_source' ) &&
! permission_exists ( 'upgrade_schema' ) &&
! permission_exists ( 'upgrade_apps' ) &&
! permission_exists ( 'menu_restore' ) &&
! permission_exists ( 'group_edit' )
) {
echo " access denied " ;
exit ;
}
2016-04-26 03:30:23 +02:00
//add multi-lingual support
$language = new text ;
$text = $language -> get ();
2017-06-03 06:38:15 +02:00
//set a default message_timeout
$message_timeout = 4 * 1000 ;
2016-09-11 01:26:14 +02:00
//process the http post
if ( sizeof ( $_POST ) > 0 ) {
2022-09-21 03:01:32 +02:00
//get the action options: source, schema, app_defaults, menu_defaults, permisisons
$action = $_POST [ 'action' ];
2016-09-11 01:26:14 +02:00
2022-09-21 03:01:32 +02:00
//run source update
if ( $action [ " upgrade_source " ] && permission_exists ( " upgrade_source " ) && ! is_dir ( " /usr/share/examples/fusionpbx " )) {
2017-06-03 06:38:15 +02:00
$cwd = getcwd ();
2016-09-11 01:26:14 +02:00
chdir ( $_SERVER [ " PROJECT_ROOT " ]);
2016-11-20 21:54:57 +01:00
exec ( " git pull 2>&1 " , $response_source_update );
2016-09-11 01:26:14 +02:00
$update_failed = true ;
if ( sizeof ( $response_source_update ) > 0 ) {
2017-06-08 17:39:50 +02:00
$_SESSION [ " response " ][ " upgrade_source " ] = $response_source_update ;
2016-09-11 01:26:14 +02:00
foreach ( $response_source_update as $response_line ) {
2023-02-20 19:43:51 +01:00
if ( substr_count ( $response_line , " Updating " ) > 0 || substr_count ( $response_line , " Already up-to-date. " ) > 0 || substr_count ( $response_line , " Already up to date. " ) > 0 ) {
2016-09-11 01:26:14 +02:00
$update_failed = false ;
}
2016-11-20 21:54:57 +01:00
2016-11-26 08:21:31 +01:00
if ( substr_count ( $response_line , " error " ) > 0 ) {
2016-11-20 21:54:57 +01:00
$update_failed = true ;
break ;
2016-11-26 08:21:31 +01:00
}
2016-04-26 03:30:23 +02:00
}
}
2017-06-03 06:38:15 +02:00
chdir ( $cwd );
2017-06-08 17:39:50 +02:00
if ( $update_failed ) {
2018-08-31 05:09:01 +02:00
message :: add ( $text [ 'message-upgrade_source_failed' ], 'negative' , $message_timeout );
2017-06-08 17:39:50 +02:00
}
else {
2018-08-31 05:09:01 +02:00
message :: add ( $text [ 'message-upgrade_source' ], null , $message_timeout );
2017-06-08 17:39:50 +02:00
}
2016-04-26 03:30:23 +02:00
}
2016-09-11 01:26:14 +02:00
2022-09-21 03:01:32 +02:00
//load an array of the database schema and compare it with the active database
if ( $action [ " upgrade_schema " ] && permission_exists ( " upgrade_schema " )) {
2016-09-11 01:26:14 +02:00
require_once " resources/classes/schema.php " ;
$obj = new schema ();
2022-09-21 03:01:32 +02:00
if ( isset ( $action [ " data_types " ]) && $action [ " data_types " ] == 'true' ) {
2020-10-21 22:38:04 +02:00
$obj -> data_types = true ;
}
2017-06-03 06:38:15 +02:00
$_SESSION [ " response " ][ " schema " ] = $obj -> schema ( " html " );
2018-08-31 05:09:01 +02:00
message :: add ( $text [ 'message-upgrade_schema' ], null , $message_timeout );
2016-04-26 03:30:23 +02:00
}
2022-09-21 03:01:32 +02:00
//process the apps defaults
if ( $action [ " app_defaults " ] && permission_exists ( " upgrade_apps " )) {
2016-09-11 01:26:14 +02:00
require_once " resources/classes/domains.php " ;
$domain = new domains ;
$domain -> upgrade ();
2018-08-31 05:09:01 +02:00
message :: add ( $text [ 'message-upgrade_apps' ], null , $message_timeout );
2016-09-11 01:26:14 +02:00
}
2016-04-26 03:30:23 +02:00
2022-09-21 03:01:32 +02:00
//restore defaults of the selected menu
if ( $action [ " menu_defaults " ] && permission_exists ( " menu_restore " )) {
2016-09-11 01:26:14 +02:00
$sel_menu = explode ( '|' , check_str ( $_POST [ " sel_menu " ]));
$menu_uuid = $sel_menu [ 0 ];
$menu_language = $sel_menu [ 1 ];
$included = true ;
require_once ( " core/menu/menu_restore_default.php " );
unset ( $sel_menu );
2018-08-31 05:09:01 +02:00
message :: add ( $text [ 'message-upgrade_menu' ], null , $message_timeout );
2016-09-11 01:26:14 +02:00
}
2016-04-26 03:30:23 +02:00
2022-09-21 03:01:32 +02:00
//restore default permissions
if ( $action [ " permission_defaults " ] && permission_exists ( " group_edit " )) {
2016-09-11 01:26:14 +02:00
$included = true ;
2016-10-05 18:29:30 +02:00
require_once ( " core/groups/permissions_default.php " );
2018-08-31 05:09:01 +02:00
message :: add ( $text [ 'message-upgrade_permissions' ], null , $message_timeout );
2016-09-11 01:26:14 +02:00
}
2022-09-21 03:01:32 +02:00
//redirect the browser
2016-09-11 01:26:14 +02:00
header ( " Location: " . PROJECT_PATH . " /core/upgrade/index.php " );
exit ;
2020-02-11 05:54:04 +01:00
}
2016-09-11 01:26:14 +02:00
2020-04-11 23:53:38 +02:00
//adjust color and initialize step counter
$step = 1 ;
2020-04-13 19:56:32 +02:00
$step_color = $_SESSION [ 'theme' ][ 'upgrade_step_color' ][ 'text' ] ? $_SESSION [ 'theme' ][ 'upgrade_step_color' ][ 'text' ] : color_adjust (( $_SESSION [ 'theme' ][ 'form_table_label_background_color' ][ 'text' ] != '' ? $_SESSION [ 'theme' ][ 'form_table_label_background_color' ][ 'text' ] : '#e5e9f0' ), - 0.1 );
2020-04-11 23:53:38 +02:00
$step_container_style = " width: 30px; height: 30px; border: 2px solid " . $step_color . " ; border-radius: 50%; float: left; text-align: center; vertical-align: middle; " ;
$step_number_style = " font-size: 150%; font-weight: 600; color: " . $step_color . " ; " ;
2016-09-11 01:26:14 +02:00
//include the header and set the title
$document [ 'title' ] = $text [ 'title-upgrade' ];
2020-02-11 05:54:04 +01:00
require_once " resources/header.php " ;
2016-09-11 01:26:14 +02:00
//show the content
2020-03-05 18:01:09 +01:00
echo " <form name='frm' id='frm' method='post'> \n " ;
2020-02-11 05:54:04 +01:00
echo " <div class='action_bar' id='action_bar'> \n " ;
echo " <div class='heading'><b> " . $text [ 'header-upgrade' ] . " </b></div> \n " ;
echo " <div class='actions'> \n " ;
2020-03-05 18:01:09 +01:00
echo button :: create ([ 'type' => 'submit' , 'label' => $text [ 'button-upgrade_execute' ], 'icon' => $_SESSION [ 'theme' ][ 'button_icon_save' ], 'id' => 'btn_save' , 'collapse' => 'never' ]);
2020-02-11 05:54:04 +01:00
echo " </div> \n " ;
echo " <div style='clear: both;'></div> \n " ;
echo " </div> \n " ;
2016-09-11 01:26:14 +02:00
echo $text [ 'description-upgrade' ];
2017-06-03 06:38:15 +02:00
echo " <br /><br /> " ;
2016-10-05 18:29:30 +02:00
2016-09-11 01:26:14 +02:00
if ( permission_exists ( " upgrade_source " ) && ! is_dir ( " /usr/share/examples/fusionpbx " ) && is_writeable ( $_SERVER [ " PROJECT_ROOT " ] . " /.git " )) {
echo " <table width='100%' border='0' cellpadding='0' cellspacing='0'> \n " ;
2023-02-23 16:23:00 +01:00
echo " <tr onclick= \" document.getElementById('do_source').checked = !document.getElementById('do_source').checked; \" > \n " ;
2016-09-11 01:26:14 +02:00
echo " <td width='30%' class='vncell' style='vertical-align:middle;'> \n " ;
2020-04-11 23:53:38 +02:00
echo " <div style=' " . $step_container_style . " '><span style=' " . $step_number_style . " '> " . $step ++. " </span></div> " ;
2016-09-11 01:26:14 +02:00
echo " " . $text [ 'label-upgrade_source' ];
echo " </td> \n " ;
2023-02-23 16:23:00 +01:00
echo " <td width='70%' class='vtable' style='height: 50px; cursor: pointer;'> \n " ;
echo " <input type='checkbox' name='action[upgrade_source]' id='do_source' value='1' onclick= \" event.stopPropagation(); \" > " . $text [ 'description-upgrade_source' ] . " <br /> \n " ;
2016-11-26 08:21:31 +01:00
// show current git version info
chdir ( $_SERVER [ " PROJECT_ROOT " ]);
exec ( " git rev-parse --abbrev-ref HEAD 2>&1 " , $git_current_branch , $branch_return_value );
$git_current_branch = $git_current_branch [ 0 ];
exec ( " git log --pretty=format:'%H' -n 1 2>&1 " , $git_current_commit , $commit_return_value );
$git_current_commit = $git_current_commit [ 0 ];
if (( $branch_return_value == 0 ) && ( $commit_return_value == 0 )) {
echo $text [ 'label-git_branch' ] . ' ' . $git_current_branch . " \n " ;
//echo $text['label-git_commit'].' '." ";
echo " <a href='https://github.com/fusionpbx/fusionpbx/compare/ " ;
2023-02-23 16:23:00 +01:00
echo $git_current_commit . " ... " . " $git_current_branch ' target='_blank' onclick= \" event.stopPropagation(); \" > \n " ;
2016-11-26 08:21:31 +01:00
echo $git_current_commit . " </a><br /> \n " ;
echo " </a> " ;
}
2016-09-11 01:26:14 +02:00
echo " </td> \n " ;
echo " </tr> \n " ;
echo " </table> \n " ;
2016-04-26 03:30:23 +02:00
}
2016-10-05 18:29:30 +02:00
2016-09-11 01:26:14 +02:00
if ( permission_exists ( " upgrade_schema " )) {
echo " <table width='100%' border='0' cellpadding='0' cellspacing='0'> \n " ;
2023-02-23 16:23:00 +01:00
echo " <tr onclick= \" document.getElementById('do_schema').checked = !document.getElementById('do_schema').checked; (!document.getElementById('do_schema').checked ? $ ('#do_data_types').prop('checked', false) : null); $ ('#tr_data_types').slideToggle('fast'); \" > \n " ;
2016-09-11 01:26:14 +02:00
echo " <td width='30%' class='vncell' style='vertical-align:middle;'> \n " ;
2020-05-06 20:40:59 +02:00
echo " <div style=' " . $step_container_style . " '><span style=' " . $step_number_style . " '> " . $step . " </span></div> " ;
2016-09-11 01:26:14 +02:00
echo " " . $text [ 'label-upgrade_schema' ];
echo " </td> \n " ;
2023-02-23 16:23:00 +01:00
echo " <td width='70%' class='vtable' style='height: 50px; cursor: pointer;'> \n " ;
echo " <input type='checkbox' name='action[upgrade_schema]' id='do_schema' value='1' onclick= \" event.stopPropagation(); $ ('#tr_data_types').slideToggle('fast'); (!document.getElementById('do_schema').checked ? $ ('#do_data_types').prop('checked', false) : null); \" > " . $text [ 'description-upgrade_schema' ] . " \n " ;
2016-09-11 01:26:14 +02:00
echo " </td> \n " ;
echo " </tr> \n " ;
echo " </table> \n " ;
2016-10-05 18:29:30 +02:00
2016-09-11 01:26:14 +02:00
echo " <div id='tr_data_types' style='display: none;'> \n " ;
echo " <table width='100%' border='0' cellpadding='0' cellspacing='0'> \n " ;
2023-02-23 16:23:00 +01:00
echo " <tr onclick= \" document.getElementById('do_data_types').checked = !document.getElementById('do_data_types').checked; \" > \n " ;
2016-09-11 01:26:14 +02:00
echo " <td width='30%' class='vncell' style='vertical-align:middle;'> \n " ;
2020-05-06 20:40:59 +02:00
echo " <div style=' " . $step_container_style . " '><span style=' " . $step_number_style . " letter-spacing: -0.06em;'> " . $step ++. " B</span></div> " ;
2016-09-11 01:26:14 +02:00
echo " " . $text [ 'label-upgrade_data_types' ];
echo " </td> \n " ;
2023-02-23 16:23:00 +01:00
echo " <td width='70%' class='vtable' style='height: 50px; cursor: pointer;'> \n " ;
echo " <input type='checkbox' name='action[data_types]' id='do_data_types' value='true' onclick= \" event.stopPropagation(); \" > " . $text [ 'description-upgrade_data_types' ] . " \n " ;
2016-09-11 01:26:14 +02:00
echo " </td> \n " ;
echo " </tr> \n " ;
echo " </table> \n " ;
echo " </div> \n " ;
2016-04-26 03:30:23 +02:00
}
2016-10-05 18:29:30 +02:00
2016-09-11 01:26:14 +02:00
if ( permission_exists ( " upgrade_apps " )) {
echo " <table width='100%' border='0' cellpadding='0' cellspacing='0'> \n " ;
2023-02-23 16:23:00 +01:00
echo " <tr onclick= \" document.getElementById('do_apps').checked = !document.getElementById('do_apps').checked; \" > \n " ;
2016-09-11 01:26:14 +02:00
echo " <td width='30%' class='vncell' style='vertical-align:middle;'> \n " ;
2020-04-11 23:53:38 +02:00
echo " <div style=' " . $step_container_style . " '><span style=' " . $step_number_style . " '> " . $step ++. " </span></div> " ;
2016-09-11 01:26:14 +02:00
echo " " . $text [ 'label-upgrade_apps' ];
echo " </td> \n " ;
2023-02-23 16:23:00 +01:00
echo " <td width='70%' class='vtable' style='height: 50px; cursor: pointer;'> \n " ;
echo " <input type='checkbox' name='action[app_defaults]' id='do_apps' value='1' onclick= \" event.stopPropagation(); \" > " . $text [ 'description-upgrade_apps' ] . " \n " ;
2016-09-11 01:26:14 +02:00
echo " </td> \n " ;
echo " </tr> \n " ;
echo " </table> \n " ;
2016-04-26 03:30:23 +02:00
}
2016-10-05 18:29:30 +02:00
2016-09-11 01:26:14 +02:00
if ( permission_exists ( " menu_restore " )) {
echo " <table width='100%' border='0' cellpadding='0' cellspacing='0'> \n " ;
2023-02-23 16:23:00 +01:00
echo " <tr onclick= \" document.getElementById('do_menu').checked = !document.getElementById('do_menu').checked; $ ('#sel_menu').fadeToggle('fast'); \" > \n " ;
2016-09-11 01:26:14 +02:00
echo " <td width='30%' class='vncell' style='vertical-align:middle;'> \n " ;
2020-04-11 23:53:38 +02:00
echo " <div style=' " . $step_container_style . " '><span style=' " . $step_number_style . " '> " . $step ++. " </span></div> " ;
2016-09-11 01:26:14 +02:00
echo " " . $text [ 'label-upgrade_menu' ];
echo " </td> \n " ;
2023-02-23 16:23:00 +01:00
echo " <td width='70%' class='vtable' style='height: 50px; cursor: pointer;'> \n " ;
echo " <input type='checkbox' name='action[menu_defaults]' id='do_menu' value='1' onclick= \" event.stopPropagation(); $ ('#sel_menu').fadeToggle('fast'); \" > " ;
echo " <select name='sel_menu' id='sel_menu' class='formfld' style='display: none; vertical-align: middle; margin-left: 5px;' onclick= \" event.stopPropagation(); \" > " ;
2016-09-11 01:26:14 +02:00
$sql = " select * from v_menus " ;
2019-07-19 23:05:18 +02:00
$database = new database ;
$result = $database -> select ( $sql , null , 'all' );
if ( is_array ( $result ) && sizeof ( $result ) != 0 ) {
foreach ( $result as & $row ) {
echo " <option value=' " . $row [ " menu_uuid " ] . " | " . $row [ " menu_language " ] . " '> " . $row [ " menu_name " ] . " </option> " ;
}
2016-09-11 01:26:14 +02:00
}
2019-07-19 23:05:18 +02:00
unset ( $sql , $result );
2023-02-23 16:23:00 +01:00
echo " </select> " ;
echo " " . $text [ 'description-upgrade_menu' ];
2016-09-11 01:26:14 +02:00
echo " </td> \n " ;
echo " </tr> \n " ;
echo " </table> \n " ;
}
2016-10-05 18:29:30 +02:00
2016-09-11 01:26:14 +02:00
if ( permission_exists ( " group_edit " )) {
echo " <table width='100%' border='0' cellpadding='0' cellspacing='0'> \n " ;
2023-02-23 16:23:00 +01:00
echo " <tr onclick= \" document.getElementById('do_permissions').checked = !document.getElementById('do_permissions').checked; \" > \n " ;
2016-09-11 01:26:14 +02:00
echo " <td width='30%' class='vncell' style='vertical-align:middle;'> \n " ;
2020-04-11 23:53:38 +02:00
echo " <div style=' " . $step_container_style . " '><span style=' " . $step_number_style . " '> " . $step ++. " </span></div> " ;
2016-09-11 01:26:14 +02:00
echo " " . $text [ 'label-upgrade_permissions' ];
echo " </td> \n " ;
2023-02-23 16:23:00 +01:00
echo " <td width='70%' class='vtable' style='height: 50px; cursor: pointer;'> \n " ;
echo " <input type='checkbox' name='action[permission_defaults]' id='do_permissions' value='1' onclick= \" event.stopPropagation(); \" > " . $text [ 'description-upgrade_permissions' ] . " \n " ;
2016-09-11 01:26:14 +02:00
echo " </td> \n " ;
echo " </tr> \n " ;
echo " </table> \n " ;
}
2016-10-05 18:29:30 +02:00
2016-09-11 01:26:14 +02:00
echo " </form> \n " ;
2016-10-05 18:29:30 +02:00
2017-06-03 06:38:15 +02:00
echo " <br /><br /> " ;
2019-09-25 00:41:15 +02:00
if ( ! empty ( $_SESSION [ " response " ]) && is_array ( $_SESSION [ " response " ])) {
2018-04-14 23:17:49 +02:00
foreach ( $_SESSION [ " response " ] as $part => $response ){
echo " <b> " . $text [ " label-results " ] . " - " . $text [ " label- ${ part } " ] . " </b> " ;
echo " <br /><br /> " ;
if ( is_array ( $response )) {
echo " <pre> " ;
echo implode ( " \n " , $response );
echo " </pre> " ;
}
else {
echo $response ;
}
echo " <br /><br /> " ;
2017-06-03 06:38:15 +02:00
}
2018-04-14 23:17:49 +02:00
unset ( $_SESSION [ " response " ]);
2016-09-11 01:26:14 +02:00
}
//include the footer
require_once " resources/footer.php " ;
2018-02-25 09:28:09 +01:00
2020-10-21 22:38:04 +02:00
?>