* include "pluginslib.php"; * * function wikiplugin_backlinks($data, $params) { * $plugin = new BackLinks(); * return $plugin->run($data, $params); * } * function wikiplugin_backlinks_help() { * $plugin = new BackLinks(); * return $plugin->getDescription(); * } * * @package wiki */ /** * @package wiki * @subpackage PluginsLib * @author Claudio Bustos * @version $Revision$ */ namespace Bitweaver\Wiki; use Bitweaver\KernelTools; class PluginsLib extends \Bitweaver\BitBase { public $_errors; public $_data; public $_params; /** * Array of params to be expanded as arrays. Explode the string with {@link $separator} * @var array */ public $expanded_params = []; /** * Separator used to explote params listed on {@link $expanded_params} * @var string */ public $separator = "|"; /** * List of fields retrieved from {@link BitBase::list_pages()} * Keys are the name of the fields and values the names for tra(); * @var array */ public $aInfoPresetNames = [ "hits" => "Hits", "last_modified" => "Last mod", "user" => "Last author", "len" => "Size", "comment" => "Com", "creator" => "Creator", "version" => "Last ver", "flag" => "Status", "versions" => "Vers", "links" => "Links", "backlinks" => "Backlinks", ]; /** * Process the params, in this order: * - default values, asigned on {@link PluginsLib::getDefaultArguments()} * - request values, sended by GET or POST method, if $request is put to true * - explicit values, asigned on the Wiki * @param array sended to wikiplugin_name($data, $params) * @param bool if set to true, accept values from $_REQUEST * @param bool if set to true, assign default values from {@link PluginsLib::getDefaultArguments()} * @return array list of params */ function getParams($params, $request = false, $defaults = false) { if ($defaults === false) { $defaults = $this->getDefaultArguments(); } $args = []; foreach ($defaults as $arg => $default_val) { if (isset($params[$arg])) { $args[$arg] = $params[$arg]; } elseif(isset($_REQUEST[$arg])) { $args[$arg] = $_REQUEST[$arg]; } else { // maybe this kind of transformation can be grouped on a external function if ($default_val==="[pagename]") { $default_val=$_REQUEST["page"]; } $args[$arg] = $default_val; } if (in_array($arg, $this->expanded_params)) { if ($args[$arg]) { $args[$arg] = explode($this->separator, $args[$arg]); foreach($args[$arg] as $id=>$value) { $args[$arg][$id]=trim($value); } } else { $args[$arg]=[]; } } } return $args; } /** * Returns the name of the Plugin * By default, erase the first 'WikiPlugin' * Made for overload it. * @return string */ function getName() { return preg_replace('/^WikiPlugin/', '', get_class($this)); } /** * Returns a description of the Plugin * Made for overload it. * @return string */ function getDescription() { return $this->getName(); } /** * Returns the version of the version * Made for overload it. * @return string */ function getVersion() { return KernelTools::tra("No version indicated"); //return preg_replace("/[Revision: $]/", '', // "\$Revision$"); } /** * Returns the default arguments for the plugin * Use keys as the arguments and values as ... the default values * @return array */ function getDefaultArguments() { return ['description' => $this->getDescription()]; } /** * Run the plugin * For sake of God, overload it! * @param string * @param array */ function run ($data, $params) { /** * UGLY ERROR!. */ return $this->error("PluginsLib::run: pure virtual function. Don't be so lazy!"); } function error ($message) { return "~np~Plugin ".$this->getName()." ".KernelTools::tra("failed")." : ".KernelTools::tra($message)."~/np~"; } function getErrorDetail() { return $this->_errors; } function _error($message) { $this->_errors = $message; return false; } } /** * Class with utilities for Plugins * * @package wiki * @subpackage PluginsLib * @author Claudio Bustos * @version $Revision$ */ class PluginsLibUtil { /** * Create a table with information from pages * @param array key ["data"] from one of the functions that retrieve informaci�n about pages * @param array list of keys to show. * @param array definition of the principal field. By default: * array("field"=>"title","name"=>"Page") * @return string */ public function createTable($aData,$aInfo=false,$aPrincipalField=false) { // contract if (!$aPrincipalField or !is_array($aPrincipalField)) { $aPrincipalField=["field"=>"title","name"=>"Page"]; } if (!is_array($aInfo)) { $aInfo=false; } // ~contract $sOutput=""; if ($aInfo) { $iNumCol=count($aInfo)+1; $sStyle=" style='width:".(floor(100/$iNumCol))."%' "; // Header for info $sOutput .= ""; foreach($aInfo as $iInfo => $sHeader) { $sOutput .= ""; } $sOutput .= ""; } $iCounter=1; foreach($aData as $aPage) { $sClass=($iCounter%2)?"odd":"even"; if (!$aInfo) { $sOutput .= "*((".$aPage[$aPrincipalField["field"]]."))\n"; } else { $sOutput .= ""; foreach($aInfo as $sInfo) { if (isset($aPage[$sInfo])) { $sOutput .= ""; } } } $iCounter++; } if ($aInfo) { $sOutput .= "
".KernelTools::tra($aPrincipalField["name"])."".KernelTools::tra($sHeader)."
((".$aPage[$aPrincipalField["field"]]."))".$aPage[$sInfo]."
"; } return $sOutput; } }