<?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; } }