118 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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_Requirements {
 | 
						|
 | 
						|
	private $req = array();
 | 
						|
	private $msg = array();
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Gitium requires:
 | 
						|
	 * git min version
 | 
						|
	 * the function proc_open available
 | 
						|
	 * PHP min version
 | 
						|
	 * can exec the file inc/ssh-git
 | 
						|
	 */
 | 
						|
	public function __construct() {
 | 
						|
		$this->_check_req();
 | 
						|
		add_action( GITIUM_ADMIN_NOTICES_ACTION, array( $this, 'admin_notices' ) );
 | 
						|
	}
 | 
						|
 | 
						|
	private function _check_req() {
 | 
						|
		list($this->req['is_git_version'],       $this->msg['is_git_version']       ) = $this->is_git_version();
 | 
						|
		list($this->req['is_proc_open'],         $this->msg['is_proc_open']         ) = $this->is_proc_open();
 | 
						|
		list($this->req['is_php_verion'],        $this->msg['is_php_verion']        ) = $this->is_php_version();
 | 
						|
		list($this->req['can_exec_ssh_git_file'],$this->msg['can_exec_ssh_git_file']) = $this->can_exec_ssh_git_file();
 | 
						|
 | 
						|
		return $this->req;
 | 
						|
	}
 | 
						|
 | 
						|
	public function admin_notices() {
 | 
						|
		if ( ! current_user_can( GITIUM_MANAGE_OPTIONS_CAPABILITY ) ) {
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		foreach ( $this->req as $key => $value ) {
 | 
						|
			if ( false === $value ) {
 | 
						|
				echo "<div class='error-nag error'><p>Gitium Requirement: {$this->msg[$key]}</p></div>";
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	public function get_status() {
 | 
						|
		$requirements = $this->req;
 | 
						|
 | 
						|
		foreach ( $requirements as $req ) :
 | 
						|
			if ( false === $req ) :
 | 
						|
				return false;
 | 
						|
			endif;
 | 
						|
		endforeach;
 | 
						|
 | 
						|
		return true;
 | 
						|
	}
 | 
						|
 | 
						|
	private function is_git_version() {
 | 
						|
		$git_version = get_transient( 'gitium_git_version' );
 | 
						|
 | 
						|
		if ( GITIUM_MIN_GIT_VER > substr( $git_version, 0, 3 ) ) {
 | 
						|
			global $git;
 | 
						|
			$git_version = $git->get_version();
 | 
						|
			set_transient( 'gitium_git_version', $git_version );
 | 
						|
			if ( empty( $git_version ) ) {
 | 
						|
				return array( false, 'There is no git installed on this server.' );
 | 
						|
			} else if ( GITIUM_MIN_GIT_VER > substr( $git_version, 0, 3 ) ) {
 | 
						|
				return array( false, "The git version is `$git_version` and must be greater than `" . GITIUM_MIN_GIT_VER . "`!" );
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		return array( true, "The git version is `$git_version`." );
 | 
						|
	}
 | 
						|
 | 
						|
	private function is_proc_open() {
 | 
						|
		if ( ! function_exists( 'proc_open' ) ) {
 | 
						|
			return array( false, 'The function `proc_open` is disabled!' );
 | 
						|
		} else {
 | 
						|
			return array( true, 'The function `proc_open` is enabled!' );
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	private function is_php_version() {
 | 
						|
		if ( ! function_exists( 'phpversion' ) ) {
 | 
						|
			return array( false, 'The function `phpversion` is disabled!' );
 | 
						|
		} else {
 | 
						|
			$php_version = phpversion();
 | 
						|
			if ( GITIUM_MIN_PHP_VER <= substr( $php_version, 0, 3 ) ) {
 | 
						|
				return array( true, "The PHP version is `$php_version`." );
 | 
						|
			} else {
 | 
						|
				return array( false, "The PHP version is `$php_version` and is not greater or equal to " . GITIUM_MIN_PHP_VER );
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	private function can_exec_ssh_git_file() {
 | 
						|
		$filepath = dirname( __FILE__ ) . '/ssh-git';
 | 
						|
 | 
						|
		if ( ! function_exists( 'is_executable' ) ) {
 | 
						|
			return array( false, 'The function `is_executable` is disabled!' );
 | 
						|
		} else if ( is_executable( $filepath ) ) {
 | 
						|
			return array( true, "The `$filepath` file can be executed!" );
 | 
						|
		} else {
 | 
						|
			return array( false, "The `$filepath` file is not executable" );
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |