* * * @author: ReiniUrban */ class WikiPlugin_SqlResult extends WikiPlugin { var $_args; function getName () { return _("SqlResult"); } function getDescription () { return _("Display arbitrary SQL result tables"); } function getVersion() { return preg_replace("/[Revision: $]/", '', "\$Revision: 1.3 $"); } function getDefaultArguments() { return array( 'alias' => false, // DSN database specification 'ordered' => false, // if to display as
    list: single col only without template 'template' => false, // use a custom /template.tmpl 'where' => false, // custom filter for the query 'sortby' => false, // for paging, default none 'limit' => false, // for paging, default: only the first 50 ); } function getDsn($alias) { $ini = parse_ini_file(FindFile("lib/plugin/SqlResult.ini")); return $ini[$alias]; } /** Get the SQL statement from the rest of the lines */ function handle_plugin_args_cruft($argstr, $args) { $this->_sql = str_replace("\n"," ",$argstr); return; } function run($dbi, $argstr, &$request, $basepage) { global $DBParams; //$request->setArg('nocache','1'); extract($this->getArgs($argstr, $request)); if (!$alias) return $this->error(_("No DSN alias for SqlResult.ini specified")); $sql = $this->_sql; // apply custom filters if ($where and strstr($sql,"%%where%%")) $sql = str_replace("%%where%%", $where, $sql); if (strstr($sql,"%%limit%%")) // default: only the first 50 $sql = str_replace("%%limit%%", $limit ? $limit : "0,50", $sql); else { if (strstr($sql,"LIMIT")) // default: only the first 50 $sql = str_replace("%%limit%%", $limit ? $limit : "0,50", $sql); else $sql .= " LIMIT 0,50"; } if (strstr($sql,"%%sortby%%")) { if (!$sortby) $sql = preg_replace("/ORDER BY .*%%sortby%%\s/m", "", $sql); else $sql = str_replace("%%sortby%%", $sortby, $sql); } $inidsn = $this->getDsn($alias); if (!$inidsn) return $this->error(sprintf(_("No DSN for alias %s in SqlResult.ini found"), $alias)); // adodb or pear? adodb as default, since we distribute per default it. // for pear there may be overrides. if ($DBParams['dbtype'] == 'SQL') { $dbh = DB::connect($inidsn); $all = $dbh->getAll($sql); } else { if ($DBParams['dbtype'] != 'ADODB') { // require_once('lib/WikiDB/adodb/adodb-errorhandler.inc.php'); require_once('lib/WikiDB/adodb/adodb.inc.php'); } $parsed = parseDSN($inidsn); $dbh = &ADONewConnection($parsed['phptype']); $conn = $dbh->Connect($parsed['hostspec'],$parsed['username'], $parsed['password'], $parsed['database']); $GLOBALS['ADODB_FETCH_MODE'] = ADODB_FETCH_ASSOC; $dbh->SetFetchMode(ADODB_FETCH_ASSOC); $all = $dbh->getAll($sql); $GLOBALS['ADODB_FETCH_MODE'] = ADODB_FETCH_NUM; $dbh->SetFetchMode(ADODB_FETCH_NUM); } // if ($limit) ; // TODO: fill paging vars (see PageList) if ($template) { $args = array('SqlResult' => $all, // the resulting array of rows 'ordered' => $ordered, // whether to display as