* * Gitium is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * Gitium 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 Gitium. If not, see . * * @package Gitium */ define( 'GITIUM_LAST_COMMITS', 20 ); define( 'GITIUM_MIN_GIT_VER', '1.7' ); define( 'GITIUM_MIN_PHP_VER', '5.6' ); if ( is_multisite() ) { define( 'GITIUM_ADMIN_MENU_ACTION', 'network_admin_menu' ); define( 'GITIUM_ADMIN_NOTICES_ACTION', 'network_admin_notices' ); define( 'GITIUM_MANAGE_OPTIONS_CAPABILITY', 'manage_network_options' ); } else { define( 'GITIUM_ADMIN_MENU_ACTION', 'admin_menu' ); define( 'GITIUM_ADMIN_NOTICES_ACTION', 'admin_notices' ); define( 'GITIUM_MANAGE_OPTIONS_CAPABILITY', 'manage_options' ); } require_once __DIR__ . '/functions.php'; require_once __DIR__ . '/inc/class-git-wrapper.php'; require_once __DIR__ . '/inc/class-gitium-requirements.php'; require_once __DIR__ . '/inc/class-gitium-admin.php'; require_once __DIR__ . '/inc/class-gitium-help.php'; require_once __DIR__ . '/inc/class-gitium-menu.php'; require_once __DIR__ . '/inc/class-gitium-menu-bubble.php'; require_once __DIR__ . '/inc/class-gitium-submenu-configure.php'; require_once __DIR__ . '/inc/class-gitium-submenu-status.php'; require_once __DIR__ . '/inc/class-gitium-submenu-commits.php'; require_once __DIR__ . '/inc/class-gitium-submenu-settings.php'; function gitium_load_textdomain() { load_plugin_textdomain( 'gitium', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); } add_action( 'plugins_loaded', 'gitium_load_textdomain' ); function _gitium_make_ssh_git_file_exe() { $ssh_wrapper = dirname( __FILE__ ) . '/inc/ssh-git'; $process = proc_open( "chmod -f +x $ssh_wrapper", array( 0 => array( 'pipe', 'r' ), // stdin 1 => array( 'pipe', 'w' ), // stdout ), $pipes ); if ( is_resource( $process ) ) { fclose( $pipes[0] ); proc_close( $process ); } } register_activation_hook( __FILE__, '_gitium_make_ssh_git_file_exe' ); function gitium_deactivation() { delete_transient( 'gitium_git_version' ); } register_deactivation_hook( __FILE__, 'gitium_deactivation' ); function gitium_uninstall_hook() { delete_transient( 'gitium_remote_tracking_branch' ); delete_transient( 'gitium_remote_disconnected' ); delete_transient( 'gitium_uncommited_changes' ); delete_transient( 'gitium_git_version' ); delete_transient( 'gitium_versions' ); delete_transient( 'gitium_menu_bubble' ); delete_transient( 'gitium_is_status_working' ); delete_option( 'gitium_keypair' ); delete_option( 'gitium_webhook_key' ); } register_uninstall_hook( __FILE__, 'gitium_uninstall_hook' ); /* Array ( [themes] => Array ( [twentytwelve] => `Twenty Twelve` version 1.3 ) [plugins] => Array ( [cron-view/cron-gui.php] => `Cron GUI` version 1.03 [hello-dolly/hello.php] => `Hello Dolly` version 1.6 ) ) */ function gitium_update_versions() { $new_versions = []; // get all themes from WP $all_themes = wp_get_themes( array( 'allowed' => true ) ); foreach ( $all_themes as $theme_name => $theme ) : $theme_versions[ $theme_name ] = array( 'name' => $theme->Name, 'version' => null, 'msg' => '', ); $theme_versions[ $theme_name ]['msg'] = '`' . $theme->Name . '`'; $version = $theme->Version; if ( ! empty( $version ) ) { $theme_versions[ $theme_name ]['msg'] .= " version $version"; $theme_versions[ $theme_name ]['version'] .= $version; } endforeach; if ( ! empty( $theme_versions ) ) { $new_versions['themes'] = $theme_versions; } // get all plugins from WP if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } $all_plugins = get_plugins(); foreach ( $all_plugins as $name => $data ) : $plugin_versions[ $name ] = array( 'name' => $data['Name'], 'version' => null, 'msg' => '', ); $plugin_versions[ $name ]['msg'] = "`{$data['Name']}`"; if ( ! empty( $data['Version'] ) ) { $plugin_versions[ $name ]['msg'] .= ' version ' . $data['Version']; $plugin_versions[ $name ]['version'] .= $data['Version']; } endforeach; if ( ! empty( $plugin_versions ) ) { $new_versions['plugins'] = $plugin_versions; } set_transient( 'gitium_versions', $new_versions ); return $new_versions; } add_action( 'load-plugins.php', 'gitium_update_versions', 999 ); function gitium_upgrader_post_install( $res, $hook_extra, $result ) { _gitium_make_ssh_git_file_exe(); $action = null; $type = null; // install logic if ( isset( $hook_extra['type'] ) && ( 'plugin' === $hook_extra['type'] ) ) { $action = 'installed'; $type = 'plugin'; } else if ( isset( $hook_extra['type'] ) && ( 'theme' === $hook_extra['type'] ) ) { $action = 'installed'; $type = 'theme'; } // update/upgrade logic if ( isset( $hook_extra['plugin'] ) ) { $action = 'updated'; $type = 'plugin'; } else if ( isset( $hook_extra['theme'] ) ) { $action = 'updated'; $type = 'theme'; } // get action if missed above if ( isset( $hook_extra['action'] ) ) { $action = $hook_extra['action']; if ( 'install' === $action ) { $action = 'installed'; } if ( 'update' === $action ) { $action = 'updated'; } } if ( WP_DEBUG ) { error_log( __FUNCTION__ . ':hook_extra:' . serialize( $hook_extra ) ); error_log( __FUNCTION__ . ':action:type:' . $action . ':' . $type ); } $git_dir = $result['destination']; $version = ''; if ( ABSPATH == substr( $git_dir, 0, strlen( ABSPATH ) ) ) { $git_dir = substr( $git_dir, strlen( ABSPATH ) ); } switch ( $type ) { case 'theme': wp_clean_themes_cache(); $theme_data = wp_get_theme( $result['destination_name'] ); $name = $theme_data->get( 'Name' ); $version = $theme_data->get( 'Version' ); break; case 'plugin': foreach ( $result['source_files'] as $file ) : if ( '.php' != substr( $file, -4 ) ) { continue; } // every .php file is a possible plugin so we check if it's a plugin $filepath = trailingslashit( $result['destination'] ) . $file; $plugin_data = get_plugin_data( $filepath ); if ( $plugin_data['Name'] ) : $name = $plugin_data['Name']; $version = $plugin_data['Version']; // We get info from the first plugin in the package break; endif; endforeach; break; } if ( empty( $name ) ) { $name = $result['destination_name']; } $commit_message = _gitium_format_message( $name,$version,"$action $type" ); $commit = _gitium_commit_changes( $commit_message, $git_dir, false ); gitium_merge_and_push( $commit ); return $res; } add_filter( 'upgrader_post_install', 'gitium_upgrader_post_install', 10, 3 ); // Checks for local changes, tries to group them by plugin/theme and pushes the changes function gitium_auto_push( $msg_prepend = '' ) { global $git; list( , $git_private_key ) = gitium_get_keypair(); if ( ! $git_private_key ) return; $git->set_key( $git_private_key ); $commits = gitium_group_commit_modified_plugins_and_themes( $msg_prepend ); gitium_merge_and_push( $commits ); gitium_update_versions(); } add_action( 'upgrader_process_complete', 'gitium_auto_push', 11, 0 ); function gitium_check_after_activate_modifications( $plugin ) { gitium_check_after_event( $plugin ); } add_action( 'activated_plugin', 'gitium_check_after_activate_modifications', 999 ); function gitium_check_after_deactivate_modifications( $plugin ) { gitium_check_after_event( $plugin, 'deactivation' ); } add_action( 'deactivated_plugin', 'gitium_check_after_deactivate_modifications', 999 ); function gitium_check_for_plugin_deletions() { // Handle plugin deletion // $_GET['deleted'] used to resemble if a plugin has been deleted (true) // ...meanwhile commit b28dd45f3dad19f0e06c546fdc89ed5b24bacd72 in github.com/WordPress/WordPress... // Now it resembles the number of deleted plugins (a number). Thanks WP if ( isset( $_GET['deleted'] ) && ( 1 <= (int) $_GET['deleted'] || 'true' == $_GET['deleted'] ) ) { gitium_auto_push(); } } add_action( 'load-plugins.php', 'gitium_check_for_plugin_deletions' ); add_action( 'wp_ajax_wp-plugin-delete-success', 'gitium_auto_push' ); add_action( 'wp_ajax_wp-theme-delete-success', 'gitium_auto_push' ); function gitium_wp_plugin_delete_success() { ?> =' ) ) add_action( 'wp_ajax_edit-theme-plugin-file', 'add_filter_for_ajax_save', 1, 0 ); else add_action( 'admin_enqueue_scripts', 'gitium_hook_plugin_and_theme_editor_page' ); function gitium_options_page_check() { global $git; if ( ! $git->can_exec_git() ) { wp_die( 'Cannot exec git' ); } return true; } function gitium_remote_disconnected_notice() { if ( current_user_can( GITIUM_MANAGE_OPTIONS_CAPABILITY ) && $message = get_transient( 'gitium_remote_disconnected' ) ) : ?>

Could not connect to remote repository.