280 lines
7.6 KiB
PHP
280 lines
7.6 KiB
PHP
<?php
|
|
|
|
/**
|
|
* API for loading and interacting with plugins
|
|
* contains getters and setters.
|
|
*
|
|
* @author shubham meena mentored by Matthew Lagoe
|
|
*/
|
|
class Plugincache {
|
|
private $id;
|
|
private $plugin_name;
|
|
private $plugin_type;
|
|
private $plugin_permission;
|
|
private $plugin_status;
|
|
private $plugin_info = array();
|
|
private $update_info = array();
|
|
|
|
/**
|
|
* A constructor.
|
|
* Empty constructor
|
|
*/
|
|
public function __construct() {
|
|
}
|
|
|
|
public function set( $values ) {
|
|
$this -> setId( $values['Id'] );
|
|
$this -> setPluginName( $values['Name'] );
|
|
$this -> setPluginType( $values['Type'] );
|
|
$this -> setPluginPermission( $values['Permission'] );
|
|
$this -> setPluginStatus( $values['Status'] );
|
|
$this -> setPluginInfo( json_decode( $values['Info'] ) );
|
|
@$this -> setUpdateInfo( json_decode( $values['UpdateInfo'] ) );
|
|
}
|
|
|
|
/**
|
|
* loads the object's attributes.
|
|
*/
|
|
|
|
public function load_With_SID() {
|
|
$dbl = new DBLayer( "lib" );
|
|
$statement = $dbl -> executeWithoutParams( "SELECT * FROM plugins" );
|
|
$row = $statement -> fetch();
|
|
$this -> set( $row );
|
|
}
|
|
|
|
/**
|
|
* get plugin id attribute of the object.
|
|
*
|
|
* @return integer id
|
|
*/
|
|
public function getId() {
|
|
return $this -> Id;
|
|
}
|
|
|
|
/**
|
|
* get plugin permission attribute of the object.
|
|
*/
|
|
public function getPluginPermission() {
|
|
return $this -> plugin_permission;
|
|
}
|
|
|
|
/**
|
|
* get plugin Type attribute of the object.
|
|
*/
|
|
public function getPluginType() {
|
|
return $this -> plugin_version;
|
|
}
|
|
|
|
/**
|
|
* get plugin status attribute of the object.
|
|
*/
|
|
public function getPluginStatus() {
|
|
return $this -> plugin_status;
|
|
}
|
|
|
|
/**
|
|
* get plugin name attribute of the object.
|
|
*/
|
|
public function getPluginName() {
|
|
return $this -> plugin_name;
|
|
}
|
|
|
|
/**
|
|
* get plugin info array attribute of the object.
|
|
*/
|
|
public function getPluginInfo() {
|
|
return $this -> plugin_info;
|
|
}
|
|
|
|
/**
|
|
* set plugin id attribute of the object.
|
|
*
|
|
* @param $s integer id
|
|
*/
|
|
public function setId( $s ) {
|
|
$this -> Id = $s;
|
|
}
|
|
|
|
/**
|
|
* set plugin permission attribute of the object.
|
|
*
|
|
* @param $t type of the query, set permission
|
|
*/
|
|
public function setPluginPermission( $t ) {
|
|
$this -> plugin_permission = $t;
|
|
}
|
|
|
|
/**
|
|
* set plugin version attribute of the object.
|
|
*
|
|
* @param $q string to set plugin version
|
|
*/
|
|
public function setPluginType( $q ) {
|
|
$this -> plugin_version = $q;
|
|
}
|
|
|
|
/**
|
|
* set plugin status attribute of the object.
|
|
*
|
|
* @param $d status code type int
|
|
*/
|
|
public function setPluginStatus( $d ) {
|
|
$this -> plugin_status = $d;
|
|
}
|
|
|
|
/**
|
|
* set plugin name attribute of the object.
|
|
*
|
|
* @param $p_n string to set plugin name.
|
|
*/
|
|
public function setPluginName( $p_n ) {
|
|
$this -> plugin_name = $p_n;
|
|
}
|
|
|
|
/**
|
|
* set plugin info attribute array of the object.
|
|
*
|
|
* @param $p_n array
|
|
*/
|
|
public function setPluginInfo( $p_n ) {
|
|
$this -> plugin_info = $p_n;
|
|
}
|
|
|
|
/**
|
|
* functionalities for plugin updates
|
|
*/
|
|
|
|
/**
|
|
* set update info attribute array of the object.
|
|
*
|
|
* @param $p_n array
|
|
*/
|
|
public function setUpdateInfo( $p_n ) {
|
|
$this -> update_info = $p_n;
|
|
}
|
|
|
|
/**
|
|
* get plugin info array attribute of the object.
|
|
*/
|
|
public function getUpdateInfo() {
|
|
return $this -> update_info;
|
|
}
|
|
|
|
/**
|
|
* some more plugin function that requires during plugin operations
|
|
*/
|
|
|
|
/**
|
|
* function to remove a non empty directory
|
|
*
|
|
* @param $dir directory address
|
|
* @return boolean
|
|
*/
|
|
public static function rrmdir( $dir ) {
|
|
$result = array_diff( scandir( $dir ), array( '.', '..' ) );
|
|
foreach( $result as $item )
|
|
{
|
|
if ( !@unlink( $dir . '/' . $item ) )
|
|
Plugincache :: rrmdir( $dir . '/' . $item );
|
|
}
|
|
return rmdir( $dir );
|
|
}
|
|
|
|
/**
|
|
* function to unzip the zipped files
|
|
*
|
|
* @param $target_path path to the target zipped file
|
|
* @param $destination path to the destination
|
|
* @return boolean
|
|
*/
|
|
public static function zipExtraction( $target_path, $destination )
|
|
{
|
|
$zip = new ZipArchive();
|
|
$x = $zip -> open( $target_path );
|
|
if ( $x === true ) {
|
|
if ( $zip -> extractTo( $destination ) )
|
|
{
|
|
$zip -> close();
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
$zip -> close();
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns plugin information with respect to the id.
|
|
*
|
|
* @param $id plugin id.
|
|
* @param $fieldName string plugin field to return
|
|
*
|
|
* @return info field from the db.
|
|
*/
|
|
public static function pluginInfoUsingId( $id, $fieldName )
|
|
{
|
|
$db = new DBLayer( 'lib' );
|
|
$sth = $db -> selectWithParameter( $fieldName, 'plugins', array( 'id' => $id ), 'Id=:id' );
|
|
$row = $sth -> fetch();
|
|
return $row[$fieldName];
|
|
}
|
|
|
|
/**
|
|
* Function provides list of active plugins
|
|
*
|
|
* @return list of active plugins
|
|
*/
|
|
public static function activePlugins()
|
|
{
|
|
$db = new DBLayer( 'lib' );
|
|
$sth = $db -> selectWithParameter( 'Id', 'plugins', array( 'status' => 1 ), 'Status=:status' );
|
|
$row = $sth -> fetchAll();
|
|
return $row;
|
|
}
|
|
|
|
/**
|
|
* function to load hooks for the active plugins
|
|
* and return the contents get from them.
|
|
*
|
|
* -->Get the list of active plugins then call the global
|
|
* hooks exists in the plugins hook file ($pluginName.php).
|
|
* -->Collect the contents from the hooks and associate within
|
|
* array with key referenced plugin name.
|
|
* -->return the content to use with smarty template loader
|
|
*
|
|
* @return $content content get from hooks
|
|
*/
|
|
public static function loadHooks() {
|
|
$content = array();
|
|
$ac_arr = Plugincache::activePlugins();
|
|
foreach ($ac_arr as $key => $value) {
|
|
$plugin_path = Plugincache::pluginInfoUsingId($value['Id'], 'FileName');
|
|
$template_path = json_decode(Plugincache::pluginInfoUsingId($value['Id'], 'Info'))->TemplatePath;
|
|
$plugin_name = $plugin_path;
|
|
|
|
// calling hooks in the $pluginName.php
|
|
global $AMS_PLUGINS;
|
|
include $AMS_PLUGINS . '/' . $plugin_name . '/' . $plugin_name . '.php';
|
|
$arr = get_defined_functions();
|
|
|
|
foreach ($arr['user'] as $key => $value) {
|
|
switch (strtolower($value)) {
|
|
case strtolower($plugin_name).'_hook_display':
|
|
case strtolower($plugin_name).'_hook_call_rest':
|
|
case strtolower($plugin_name).'_hook_get_db':
|
|
case strtolower($plugin_name).'_hook_return_global':
|
|
case strtolower($plugin_name).'_hook_activate':
|
|
$content['hook_info'][$plugin_name] = call_user_func($value);
|
|
break;
|
|
}
|
|
}
|
|
// path for the template
|
|
$content['hook_info'][$plugin_name]['TemplatePath'] = $template_path;
|
|
}
|
|
|
|
return $content;
|
|
}
|
|
}
|