%PDF- %PDF-
| Direktori : /www/loslex_o/tracker/ |
| Current File : /www/loslex_o/tracker/manage_plugin_page.php |
<?php
# MantisBT - A PHP based bugtracking system
# MantisBT 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 2 of the License, or
# (at your option) any later version.
#
# MantisBT 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 MantisBT. If not, see <http://www.gnu.org/licenses/>.
/**
* Plugin Configuration
*
* @package MantisBT
* @copyright Copyright 2002 MantisBT Team - mantisbt-dev@lists.sourceforge.net
* @link http://www.mantisbt.org
*
* @uses core.php
* @uses access_api.php
* @uses authentication_api.php
* @uses config_api.php
* @uses form_api.php
* @uses helper_api.php
* @uses html_api.php
* @uses lang_api.php
* @uses plugin_api.php
* @uses print_api.php
* @uses string_api.php
* @uses utility_api.php
*/
require_once( 'core.php' );
require_api( 'access_api.php' );
require_api( 'authentication_api.php' );
require_api( 'config_api.php' );
require_api( 'form_api.php' );
require_api( 'helper_api.php' );
require_api( 'html_api.php' );
require_api( 'lang_api.php' );
require_api( 'plugin_api.php' );
require_api( 'print_api.php' );
require_api( 'string_api.php' );
require_api( 'utility_api.php' );
auth_reauthenticate();
access_ensure_global_level( config_get( 'manage_plugin_threshold' ) );
layout_page_header( lang_get( 'manage_plugin_link' ) );
layout_page_begin( 'manage_overview_page.php' );
print_manage_menu( 'manage_plugin_page.php' );
$t_plugins = new ListPluginsForDisplay();
?>
<div class="col-md-12 col-xs-12">
<?php
# Installed plugins section
if( $t_plugins->countInstalled() ) {
?>
<div class="space-10"></div>
<a id="installed"></a>
<div class="form-container">
<form action="manage_plugin_update.php" method="post">
<div class="widget-box widget-color-blue2">
<div class="widget-header widget-header-small">
<h4 class="widget-title lighter">
<?php print_icon( 'fa-cubes', 'ace-icon' ); ?>
<?php echo lang_get('plugins_installed') ?>
</h4>
</div>
<div class="widget-body">
<div class="widget-main no-padding">
<fieldset>
<?php echo form_security_field( 'manage_plugin_update' ) ?>
<div class="table-responsive">
<table class="table table-striped table-bordered table-condensed table-hover">
<colgroup>
<col style="width:20%" />
<col style="width:35%" />
<col style="width:20%" />
<col style="width:7%" />
<col style="width:8%" />
<col style="width:10%" />
</colgroup>
<thead>
<tr>
<th><?php echo lang_get( 'plugin' ) ?></th>
<th><?php echo lang_get( 'plugin_description' ) ?></th>
<th><?php echo lang_get( 'plugin_depends' ) ?></th>
<th><?php echo lang_get( 'plugin_priority' ) ?></th>
<th><?php echo lang_get( 'plugin_protected' ) ?></th>
<th><?php echo lang_get( 'plugin_actions' ) ?></th>
</tr>
</thead>
<tbody>
<?php $t_plugins->printInstalled(); ?>
</tbody>
</table>
</div>
<div class="widget-toolbox padding-8 clearfix">
<input type="submit" class="btn btn-sm btn-primary btn-white btn-round" value="<?php echo lang_get( 'update' ) ?>"/>
</div>
</fieldset>
</div>
</div>
</div>
</form>
</div>
<?php
} # End Installed plugins section
# Invalid plugins section
if( $t_plugins->countInvalid() ) {
?>
<div class="space-10"></div>
<a id="invalid"></a>
<div class="widget-box widget-color-blue2">
<div class="widget-header widget-header-small">
<h4 class="widget-title lighter">
<?php print_icon( 'fa-exclamation-triangle', 'ace-icon' ); ?>
<?php echo lang_get( 'plugins_missing' ) ?>
</h4>
</div>
<div class="widget-toolbox padding-8 clearfix">
<?php
printf(
lang_get( 'plugins_missing_description' ),
string_attribute( config_get_global( 'plugin_path' ) )
);
?>
</div>
<div class="widget-body">
<div class="widget-main no-padding">
<div class="table-responsive">
<table class="table table-striped table-bordered table-condensed table-hover">
<colgroup>
<col>
<col>
<col style="width:10%">
</colgroup>
<thead>
<tr>
<th><?php echo lang_get( 'plugin' ) ?></th>
<th><?php echo lang_get( 'plugin_problem_description' ) ?></th>
<th><?php echo lang_get( 'plugin_actions' ) ?></th>
</tr>
</thead>
<tbody>
<?php $t_plugins->printInvalid(); ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<?php
} # End Invalid plugins section
# Available plugins section
if( $t_plugins->countAvailable() ) {
?>
<a id="available"></a>
<div class="space-10"></div>
<div class="widget-box widget-color-blue2">
<div class="widget-header widget-header-small">
<h4 class="widget-title lighter">
<?php print_icon( 'fa-cube', 'ace-icon' ); ?>
<?php echo lang_get('plugins_available') ?>
</h4>
</div>
<div class="widget-body">
<div class="widget-main no-padding">
<div class="table-responsive">
<table class="table table-striped table-bordered table-condensed table-hover">
<colgroup>
<col style="width:25%" />
<col style="width:45%" />
<col style="width:20%" />
<col style="width:10%" />
</colgroup>
<thead>
<tr>
<th><?php echo lang_get( 'plugin' ) ?></th>
<th><?php echo lang_get( 'plugin_description' ) ?></th>
<th><?php echo lang_get( 'plugin_depends' ) ?></th>
<th><?php echo lang_get( 'plugin_actions' ) ?></th>
</tr>
</thead>
<tbody>
<?php $t_plugins->printAvailable(); ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
<?php
} # End Available plugins section
# Plugin dependencies color key
?>
<div class="center">
<div class="space-10"></div>
<div class="well well-sm">
<?php print_icon( 'fa-key', 'ace-icon' ); ?>
<?php echo lang_get('plugin_key_label') ?>
<span class='dependency_met'><?php echo lang_get( 'plugin_key_met' ) ?></span>,
<span class='dependency_unmet'><?php echo lang_get( 'plugin_key_unmet' ) ?></span>,
<span class='dependency_dated'><?php echo lang_get( 'plugin_key_dated' ) ?></span>,
<span class='dependency_upgrade'><?php echo lang_get( 'plugin_key_upgrade' ) ?></span>.
</div>
</div>
</div>
<?php
layout_page_end();
/**
* Class ListPluginsForDisplay
*
* Collects all Plugins and dispatches them in 3 categories: available,
* installed and invalid. Provides functions to print each sub-list in the
* appropriate format, depending on the category.
*/
class ListPluginsForDisplay {
/**
* @var AvailablePlugin[] List of available plugins (i.e. valid and not installed)
*/
protected $available = array();
/**
* @var InstalledPlugin[] List of installed (registered) plugins
*/
protected $installed = array();
/**
* @var InvalidPluginForDisplay[] List of invalid plugins
*/
protected $invalid = array();
/**
* PluginsListForDisplay constructor.
*/
public function __construct() {
# Get list of all available and installed plugins, sorted by name
$t_plugins = plugin_find_all();
uasort( $t_plugins,
function ( $p_p1, $p_p2 ) {
return strcasecmp( $p_p1->name, $p_p2->name );
}
);
foreach( $t_plugins as $t_basename => $t_plugin ) {
if( !$t_plugin->isValid() ) {
$this->invalid[$t_basename] = new InvalidPluginForDisplay( $t_plugin );
} elseif( plugin_is_registered( $t_basename ) ) {
$this->installed[$t_basename] = new InstalledPlugin( $t_plugin );
} else {
$this->available[$t_basename] = new AvailablePlugin( $t_plugin );
}
}
}
/**
* @return int Number of available plugins
*/
public function countAvailable() {
return count( $this->available );
}
/**
* @return int Number of installed plugins
*/
public function countInstalled() {
return count( $this->installed );
}
/**
* @return int Number of invalid plugins
*/
public function countInvalid() {
return count( $this->invalid );
}
/**
* Prints the list of available plugins
*/
public function printAvailable() {
foreach( $this->available as $t_plugin ) {
$t_plugin->render();
}
}
/**
* Prints the list of installed plugins
*/
public function printInstalled() {
foreach( $this->installed as $t_plugin ) {
$t_plugin->render();
}
}
/**
* Print the list of invalid plugins
*/
public function printInvalid() {
foreach( $this->invalid as $t_plugin ) {
$t_plugin->render();
}
}
}
abstract class PluginForDisplay {
protected $basename = '';
protected $name = '';
protected $description = '';
protected $page = '';
public function __construct( MantisPlugin $p_plugin ) {
$this->basename = $p_plugin->basename;
$this->name = $p_plugin->name;
if( $p_plugin->version ) {
$this->name .= ' ' . $p_plugin->version;
}
$this->page = $p_plugin->page;
}
public function render() {
echo "<tr>\n";
$this->renderColumns();
echo "</tr>\n";
}
protected function renderColumns() {
echo "<td>" . $this->pluginName() . "</td>\n";
echo "<td>$this->description</td>\n";
}
protected function pluginName() {
return string_attribute( $this->name );
}
}
class InvalidPluginForDisplay extends PluginForDisplay {
protected $can_remove = false;
public function __construct( MantisPlugin $p_plugin ) {
parent::__construct( $p_plugin );
# Descriptions from InvalidPlugin classes are trusted input
$this->description = $p_plugin->description;
if( $p_plugin->status_message ) {
$this->description .= '<br>' . $p_plugin->status_message;
}
$this->can_remove = $p_plugin->removable;
}
protected function renderColumns() {
parent::renderColumns();
# Actions
echo '<td class="center">';
if( $this->can_remove ) {
print_link_button(
'manage_plugin_uninstall.php?name=' . $this->basename
. form_security_param( 'manage_plugin_uninstall'
),
lang_get( 'remove_link' ),
'btn-xs'
);
} else {
echo lang_get( 'plugin_manual_fix' );
}
echo '</td>', "\n";
}
}
class AvailablePlugin extends PluginForDisplay {
protected $dependencies = array();
protected $upgrade_needed = false;
protected $can_install = false;
public function __construct( MantisPlugin $p_plugin ) {
parent::__construct( $p_plugin );
$t_plugin_name = $p_plugin->name . ' ' . $p_plugin->version;
# Plugin Author
$t_author = $p_plugin->author;
if( !empty( $t_author ) ) {
if( is_array( $t_author ) ) {
$t_author = implode( ', ', $t_author );
}
if( !is_blank( $p_plugin->contact ) ) {
$t_subject = lang_get( 'plugin' ) . ' - ' . $t_plugin_name;
$t_author = '<br>'
. sprintf( lang_get( 'plugin_author' ),
prepare_email_link( $p_plugin->contact, $t_author, $t_subject )
);
} else {
$t_author = '<br>' . string_display_line( sprintf( lang_get( 'plugin_author' ), $t_author ) );
}
}
# Plugin Website URL
$t_url = $p_plugin->url;
if( !is_blank( $t_url ) ) {
$t_url = '<br>'
. lang_get( 'plugin_url' )
. lang_get( 'word_separator' )
. '<a href="' . $t_url . '">' . $t_url . '</a>';
}
# Description
$this->description = string_display_line_links( (string)$p_plugin->description )
. '<span class="small">' . $t_author . $t_url . '</span>';
# Dependencies
if( is_array( $p_plugin->requires ) ) {
$_all_plugins = plugin_find_all();
foreach( $p_plugin->requires as $t_required_basename => $t_version ) {
$this->can_install = false;
switch( plugin_dependency( $t_required_basename, $t_version ) ) {
case 1:
$t_upgrade_needed = plugin_is_registered( $t_required_basename )
&& plugin_needs_upgrade( plugin_get( $t_required_basename ) );
if( $t_upgrade_needed ) {
$t_class = 'dependency_upgrade';
$t_tooltip = lang_get( 'plugin_key_upgrade' );
} else {
$t_class = 'dependency_met';
$t_tooltip = lang_get( 'plugin_key_met' );
$this->can_install = true;
}
break;
case -1:
$t_class = 'dependency_dated';
$t_tooltip = lang_get( 'plugin_key_dated' );
break;
case 0:
default:
$t_class = 'dependency_unmet';
$t_tooltip = lang_get( 'plugin_key_unmet' );
break;
}
$t_dependency_name = array_key_exists( $t_required_basename, $_all_plugins )
? $_all_plugins[$t_required_basename]->name
: $t_required_basename;
$t_dependency_name .= ' ' . $t_version;
$this->dependencies[] = sprintf( '<span class="%s" title="%s">%s</span>',
$t_class,
$t_tooltip,
string_display_line( $t_dependency_name )
);
}
} else {
$this->dependencies[] = '<span class="dependency_met">'
. lang_get( 'plugin_no_depends' )
. '</span>';
}
$this->upgrade_needed = plugin_needs_upgrade( $p_plugin );
}
protected function renderColumns() {
parent::renderColumns();
# Dependencies
echo '<td>', implode( '<br>', $this->dependencies ), '</td>', "\n";
# Actions
# Only displayed if current object is of AvailablePlugin class
if( get_class( $this ) == 'AvailablePlugin' ) {
echo '<td class="center">';
if( $this->can_install ) {
print_small_button(
'manage_plugin_install.php?name=' . $this->basename
. form_security_param( 'manage_plugin_install' ),
lang_get( 'plugin_install' )
);
}
echo '</td>', "\n";
}
}
}
class InstalledPlugin extends AvailablePlugin {
protected $priority;
protected $protected;
public function __construct( MantisPlugin $p_plugin ) {
parent::__construct( $p_plugin );
$this->priority = plugin_priority( $p_plugin->basename );
$this->protected = plugin_protected( $p_plugin->basename );
}
protected function renderColumns() {
parent::renderColumns();
if( $this->basename == 'MantisCore' ) {
echo "<td> </td>\n<td> </td>\n";
} else {
echo '<input type="hidden" name="change_', $this->basename, '" value="1"/>';
# Priority
echo '<td class="center">',
'<select name="priority_' . $this->basename . '" class="input-sm">';
print_plugin_priority_list( $this->priority );
echo '</select>', '</td>', "\n";
# Protected
echo '<td class="center">';
echo '<label>',
'<input type="checkbox" class="ace" name="protected_' . $this->basename . '"';
check_checked( $this->protected );
echo ' />',
'<span class="lbl"></span>',
'</label>';
echo '</td>', "\n";
}
# Actions
echo '<td class="center">';
if( $this->upgrade_needed ) {
print_link_button(
'manage_plugin_upgrade.php?name=' . $this->basename
. form_security_param( 'manage_plugin_upgrade' ),
lang_get( 'plugin_upgrade' ),
'btn-xs'
);
}
if( !$this->protected ) {
print_link_button(
'manage_plugin_uninstall.php?name=' . $this->basename
. form_security_param( 'manage_plugin_uninstall' ),
lang_get( 'plugin_uninstall' ),
'btn-xs'
);
}
echo '</td>', "\n";
}
protected function pluginName() {
# If plugin has a config page, we create a link to it
if( !is_blank( $this->page ) ) {
return '<a href="'
. string_attribute( plugin_page( $this->page, false, $this->basename ) )
. '">'
. string_display_line( $this->name )
. '</a>';
}
return parent::pluginName();
}
}