2020-04-07 13:03:04 +00:00
< ? php
/* Copyright 2014 - 2016 Presslabs SRL < ping @ presslabs . com >
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License , version 2 , as
published by the Free Software Foundation .
This program is distributed in the hope that it will be useful ,
but WITHOUT ANY WARRANTY ; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
GNU General Public License for more details .
You should have received a copy of the GNU General Public License
along with this program ; if not , write to the Free Software
Foundation , Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA
*/
class Gitium_Submenu_Configure extends Gitium_Menu {
public function __construct () {
parent :: __construct ( $this -> gitium_menu_slug , $this -> gitium_menu_slug );
if ( current_user_can ( GITIUM_MANAGE_OPTIONS_CAPABILITY ) ) {
add_action ( GITIUM_ADMIN_MENU_ACTION , array ( $this , 'admin_menu' ) );
add_action ( 'admin_init' , array ( $this , 'regenerate_keypair' ) );
add_action ( 'admin_init' , array ( $this , 'gitium_warning' ) );
add_action ( 'admin_init' , array ( $this , 'init_repo' ) );
add_action ( 'admin_init' , array ( $this , 'choose_branch' ) );
add_action ( 'admin_init' , array ( $this , 'disconnect_repository' ) );
}
}
public function admin_menu () {
add_menu_page (
__ ( 'Git Configuration' , 'gitium' ),
'Gitium' ,
GITIUM_MANAGE_OPTIONS_CAPABILITY ,
$this -> menu_slug ,
array ( $this , 'page' ),
plugins_url ( 'img/gitium.png' , dirname ( __FILE__ ) )
);
$submenu_hook = add_submenu_page (
$this -> menu_slug ,
__ ( 'Git Configuration' , 'gitium' ),
__ ( 'Configuration' , 'gitium' ),
GITIUM_MANAGE_OPTIONS_CAPABILITY ,
$this -> menu_slug ,
array ( $this , 'page' )
);
new Gitium_Help ( $submenu_hook , 'configuration' );
}
public function regenerate_keypair () {
2024-10-09 12:44:21 +00:00
$submit_keypair = filter_input ( INPUT_POST , 'GitiumSubmitRegenerateKeypair' , FILTER_SANITIZE_FULL_SPECIAL_CHARS );
2020-04-07 13:03:04 +00:00
if ( ! isset ( $submit_keypair ) ) {
return ;
}
check_admin_referer ( 'gitium-admin' );
gitium_get_keypair ( true );
$this -> success_redirect ( __ ( 'Keypair successfully regenerated.' , 'gitium' ) );
}
public function gitium_warning () {
2024-10-09 12:44:21 +00:00
$submit_warning = filter_input ( INPUT_POST , 'GitiumSubmitWarning' , FILTER_SANITIZE_FULL_SPECIAL_CHARS );
2020-04-07 13:03:04 +00:00
if ( ! isset ( $submit_warning ) ) {
return ;
}
check_admin_referer ( 'gitium-admin' );
$this -> git -> remove_wp_content_from_version_control ();
}
public function init_process ( $remote_url ) {
$git = $this -> git ;
$git -> init ();
$git -> add_remote_url ( $remote_url );
$git -> fetch_ref ();
if ( count ( $git -> get_remote_branches () ) == 0 ) {
$git -> add ( 'wp-content' , '.gitignore' );
$current_user = wp_get_current_user ();
$git -> commit ( __ ( 'Initial commit' , 'gitium' ), $current_user -> display_name , $current_user -> user_email );
if ( ! $git -> push ( 'master' ) ) {
$git -> cleanup ();
return false ;
}
}
return true ;
}
public function init_repo () {
2024-10-09 12:44:21 +00:00
$remote_url = filter_input ( INPUT_POST , 'remote_url' , FILTER_SANITIZE_FULL_SPECIAL_CHARS );
$gitium_submit_fetch = filter_input ( INPUT_POST , 'GitiumSubmitFetch' , FILTER_SANITIZE_FULL_SPECIAL_CHARS );
2020-04-07 13:03:04 +00:00
if ( ! isset ( $gitium_submit_fetch ) || ! isset ( $remote_url ) ) {
return ;
}
check_admin_referer ( 'gitium-admin' );
if ( empty ( $remote_url ) ) {
$this -> redirect ( __ ( 'Please specify a valid repo.' , 'gitium' ) );
}
if ( $this -> init_process ( $remote_url ) ) {
$this -> success_redirect ( __ ( 'Repository initialized successfully.' , 'gitium' ) );
} else {
global $git ;
$this -> redirect ( __ ( 'Could not push to remote: ' , 'gitium' ) . $remote_url . ' ERROR: ' . serialize ( $git -> get_last_error () ) );
}
}
public function choose_branch () {
2024-10-09 12:44:21 +00:00
$gitium_submit_merge_push = filter_input ( INPUT_POST , 'GitiumSubmitMergeAndPush' , FILTER_SANITIZE_FULL_SPECIAL_CHARS );
$tracking_branch = filter_input ( INPUT_POST , 'tracking_branch' , FILTER_SANITIZE_FULL_SPECIAL_CHARS );
2020-04-07 13:03:04 +00:00
if ( ! isset ( $gitium_submit_merge_push ) || ! isset ( $tracking_branch ) ) {
return ;
}
check_admin_referer ( 'gitium-admin' );
$this -> git -> add ();
$branch = $tracking_branch ;
set_transient ( 'gitium_remote_tracking_branch' , $branch );
$current_user = wp_get_current_user ();
$commit = $this -> git -> commit ( __ ( 'Merged existing code from ' , 'gitium' ) . get_home_url (), $current_user -> display_name , $current_user -> user_email );
if ( ! $commit ) {
$this -> git -> cleanup ();
$this -> redirect ( __ ( 'Could not create initial commit -> ' , 'gitium' ) . $this -> git -> get_last_error () );
}
if ( ! $this -> git -> merge_initial_commit ( $commit , $branch ) ) {
$this -> git -> cleanup ();
$this -> redirect ( __ ( 'Could not merge the initial commit -> ' , 'gitium' ) . $this -> git -> get_last_error () );
}
$this -> git -> push ( $branch );
$this -> success_redirect ( __ ( 'Branch selected successfully.' , 'gitium' ) );
}
private function setup_step_1_remote_url () {
?>
< tr >
< th scope = " row " >< label for = " remote_url " >< ? php _e ( 'Remote URL' , 'gitium' ); ?> </label></th>
< td >
< input type = " text " class = " regular-text " name = " remote_url " id = " remote_url " placeholder = " git@github.com:user/example.git " value = " " >
< p class = " description " >< ? php _e ( 'This URL provide access to a Git repository via SSH, HTTPS, or Subversion.' , 'gitium' ); ?> <br />
< ? php _e ( 'If you need to authenticate over "https://" instead of SSH use: <code>https://user:pass@github.com/user/example.git</code>' , 'gitium' ); ?> </p>
</ td >
</ tr >
< ? php
}
private function setup_step_1_key_pair () {
if ( ! defined ( 'GIT_KEY_FILE' ) || GIT_KEY_FILE == '' ) :
list ( $git_public_key , ) = gitium_get_keypair (); ?>
< tr >
< th scope = " row " >< label for = " key_pair " >< ? php _e ( 'Key pair' , 'gitium' ); ?> </label></th>
< td >
< p >
< input type = " text " class = " regular-text " name = " key_pair " id = " key_pair " value = " <?php echo esc_attr( $git_public_key ); ?> " readonly = " readonly " >
< input type = " submit " name = " GitiumSubmitRegenerateKeypair " class = " button " value = " <?php _e( 'Regenerate Key', 'gitium' ); ?> " />
</ p >
< p class = " description " >< ? php _e ( 'If your code use ssh keybased authentication for git you need to allow write access to your repository using this key.' , 'gitium' ); ?> <br />
< ? php _e ( 'Checkout instructions for <a href="https://help.github.com/articles/generating-ssh-keys#step-3-add-your-ssh-key-to-github" target="_blank">github</a> or <a href="https://confluence.atlassian.com/display/BITBUCKET/Add+an+SSH+key+to+an+account#AddanSSHkeytoanaccount-HowtoaddakeyusingSSHforOSXorLinux" target="_blank">bitbucket</a>.' , 'gitium' ); ?>
</ p >
</ td >
</ tr >
< ? php endif ;
}
private function setup_warning () {
?>
< div class = " wrap " >
< h2 >< ? php _e ( 'Warning!' , 'gitium' ); ?> </h2>
< form name = " gitium_form_warning " id = " gitium_form_warning " action = " " method = " POST " >
< ? php wp_nonce_field ( 'gitium-admin' ); ?>
< p >< code > wp - content </ code > is already under version control . You < a onclick = " document.getElementById('gitium_form_warning').submit(); " style = " color:red; " href = " # " > must remove it from version control </ a > in order to continue .</ p >
< p >< strong > NOTE </ strong > by doing this you WILL LOSE commit history , but NOT the actual files .</ p >
< input type = " hidden " name = " GitiumSubmitWarning " class = " button-primary " value = " 1 " />
</ form >
</ div >
< ? php
}
private function setup_step_1 () {
?>
< div class = " wrap " >
< h2 >< ? php _e ( 'Configuration step 1' , 'gitium' ); ?> </h2>
< p >< ? php _e ( 'If you need help to set this up, please click on the "Help" button from the top right corner of this screen.' ); ?> </p>
< form action = " " method = " POST " >
< ? php wp_nonce_field ( 'gitium-admin' ); ?>
< table class = " form-table " >
< ? php $this -> setup_step_1_remote_url (); ?>
< ? php $this -> setup_step_1_key_pair (); ?>
</ table >
< p class = " submit " >
< input type = " submit " name = " GitiumSubmitFetch " class = " button-primary " value = " <?php _e( 'Fetch', 'gitium' ); ?> " />
</ p >
</ form >
</ div >
< ? php
}
private function setup_step_2 () {
$git = $this -> git ; ?>
< div class = " wrap " >
< h2 >< ? php _e ( 'Configuration step 2' , 'gitium' ); ?> </h2>
< p >< ? php _e ( 'If you need help to set this up, please click on the "Help" button from the top right corner of this screen.' ); ?> </p>
< form action = " " method = " POST " >
< ? php wp_nonce_field ( 'gitium-admin' ); ?>
< table class = " form-table " >
< tr >
< th scope = " row " >< label for = " tracking_branch " >< ? php _e ( 'Choose tracking branch' , 'gitium' ); ?> </label></th>
< td >
< select name = " tracking_branch " id = " tracking_branch " >
< ? php foreach ( $git -> get_remote_branches () as $branch ) : ?>
< option value = " <?php echo esc_attr( $branch ); ?> " >< ? php echo esc_html ( $branch ); ?> </option>
< ? php endforeach ; ?>
</ select >
< p class = " description " >< ? php _e ( 'Your code origin is set to' , 'gitium' ); ?> <code><?php echo esc_html( $git->get_remote_url() ); ?></code></p>
</ td >
</ tr >
</ table >
< p class = " submit " >
< input type = " submit " name = " GitiumSubmitMergeAndPush " class = " button-primary " value = " <?php _e( 'Merge & Push', 'gitium' ); ?> " />
</ p >
</ form >
< ? php
$this -> show_disconnect_repository_button ();
?>
</ div >
< ? php
}
public function page () {
$this -> show_message ();
if ( wp_content_is_versioned () ) {
return $this -> setup_warning ();
}
if ( ! $this -> git -> is_status_working () || ! $this -> git -> get_remote_url () ) {
return $this -> setup_step_1 ();
}
if ( ! $this -> git -> get_remote_tracking_branch () ) {
return $this -> setup_step_2 ();
}
_gitium_status ( true );
gitium_update_is_status_working ();
gitium_update_remote_tracking_branch ();
}
}