Compare commits

..

2 Commits

Author SHA1 Message Date
digitalduke 500e0103a8
Change LICENSE 2019-01-24 09:21:56 +05:00
digitalduke 7a069cc899
Delete LICENSE 2019-01-24 09:21:16 +05:00
14 changed files with 158 additions and 162 deletions

35
.github/ISSUE_TEMPLATE/Bug_report.md vendored Normal file
View File

@ -0,0 +1,35 @@
---
name: Bug report
about: Create a report to help us improve
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Smartphone (please complete the following information):**
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
**Additional context**
Add any other context about the problem here.

View File

@ -0,0 +1,17 @@
---
name: Feature request
about: Suggest an idea for this project
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

1
.gitignore vendored
View File

@ -1 +0,0 @@
*~

19
README
View File

@ -1,22 +1,8 @@
sqlquery Plugin for DokuWiki
Processing queries to databases and display results as a table.
Processing query to mysql database and display results as a table.
This is a improved version which can connect to different hosts
and databases. The defaults are set in the plugin configuration.
Different types, hosts and databases can be set inside the tag:
<sql type=mysql host=myhost db=mydb>
SELECT foo FROM bar ORDER BY baz
<sql>
For security reasons the credentials for database access are only
stored in the main plugin configuration. At the moment there is
only one user configurable so for access to multiple servers.
So the user and password mast be the same across the servers.
Based on sqlquery-plugin from George Pirogov, original documentation
for that base plugin can be found at
All documentation for this plugin can be found at
https://www.dokuwiki.org/plugin:sqlquery
If you install this plugin manually, make sure it is installed in
@ -27,7 +13,6 @@ Please refer to http://www.dokuwiki.org/plugins for additional info
on how to install plugins in DokuWiki.
----
Copyright (C) Thomas Hooge <thomas@hoogi.de>
Copyright (C) George Pirogov <i1557@yandex.ru>
This program is free software; you can redistribute it and/or modify

4
README.md Normal file
View File

@ -0,0 +1,4 @@
# sqlquery
A dokuwiki plugin for processing query to MySQL databases and display results as a table.
More information at https://www.dokuwiki.org/plugin:sqlquery

View File

@ -7,7 +7,6 @@
//$conf['fixme'] = 'FIXME';
$conf['type'] = 'mysql';
$conf['Host'] = 'localhost';
$conf['DB'] = '';
$conf['user'] = '';

View File

@ -5,7 +5,7 @@
* @author George Pirogov <i1557@yandex.ru>
*/
$meta['type'] = array('multichoice', '_choices' => array('mysql', 'dblib'));
$meta['Host'] = array('string');
$meta['DB'] = array('string');
$meta['user'] = array('string');

View File

@ -1,16 +0,0 @@
<?php
/**
* German language file for sqlquery plugin
*
* @author Thomas Hooge <thomas@hoogi.de>
*/
// menu entry for admin plugins
// $lang['menu'] = 'Your menu entry';
// custom language strings for the plugin
// $lang['fixme'] = 'FIXME';
//Setup VIM: ex: et ts=4 :

View File

@ -1,17 +0,0 @@
<?php
/**
* German language file for sqlquery plugin
*
* @author Thomas Hooge <thomas@hoogi.de>
*/
// keys need to match the config setting name
$lang['type'] = 'DSN-Prefix (Datenbanktyp)';
$lang['Host'] = 'Standard-Serveradresse (DNS oder IP)';
$lang['DB'] = 'Standard-Datenbankname';
$lang['user'] = 'Datenbankbenutzername';
$lang['password'] = 'Datenbankkennwort';
//Setup VIM: ex: et ts=4 :

View File

@ -1,6 +1,6 @@
<?php
/**
* English language file for sqlquery plugin
* english language file for sqlquery plugin
*
* @author George Pirogov <i1557@yandex.ru>
*/
@ -8,11 +8,6 @@
// keys need to match the config setting name
// $lang['fixme'] = 'FIXME';
$lang['type'] = 'DSN prefix (database type)';
$lang['Host'] = 'Default server address (DNS or IP)';
$lang['DB'] = 'Default database name';
$lang['user'] = 'Database username';
$lang['password'] = 'Database password';
//Setup VIM: ex: et ts=4 :

View File

@ -1,6 +1,6 @@
<?php
/**
* Russian language file for sqlquery plugin
* English language file for sqlquery plugin
*
* @author George Pirogov <i1557@yandex.ru>
*/

View File

@ -1,6 +1,6 @@
<?php
/**
* Russian language file for sqlquery plugin
* english language file for sqlquery plugin
*
* @author George Pirogov <i1557@yandex.ru>
*/
@ -8,9 +8,8 @@
// keys need to match the config setting name
// $lang['fixme'] = 'FIXME';
$lang['type'] = 'Префикс DSN (тип базы данных)';
$lang['Host'] = 'Адрес сервера по умолчанию (DNS или IP)';
$lang['DB'] = 'Имя базы данных по умолчанию';
$lang['Host'] = 'Адрес MySQL сервера (dns или ip)';
$lang['DB'] = 'Имя базы данных MySQL';
$lang['user'] = 'Логин';
$lang['password'] = 'Пароль';

View File

@ -1,6 +1,7 @@
base sqlquery
author Thomas Hooge
email thomas@hoogi.de
date 2023-12-01
name SQL query plugin (multidb)
desc Processing queries to databases and display results as a table.
author George Pirogov
email i1557@yandex.ru
date 2016-11-25
name SQL query plugin
desc Processing query to mysql database and display results as a table.
url https://www.dokuwiki.org/plugin:sqlquery

View File

@ -4,26 +4,29 @@
*
* @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
* @author George Pirogov <i1557@yandex.ru>
* @author Thomas Hooge <hooge@rowa-group.com>
*
*/
// must be run within Dokuwiki
if (!defined('DOKU_INC')) die();
/**
* All DokuWiki plugins to extend the parser/rendering mechanism
* need to inherit from this class
*/
class syntax_plugin_sqlquery extends DokuWiki_Syntax_Plugin {
public function getType() { return 'substition'; }
public function getSort() { return 666; }
public function getPType() { return 'block'; }
public function getType() {
return 'substition';
}
public function getSort() {
return 666;
}
public function connectTo($mode)
{
$this->Lexer->addSpecialPattern('<sql\b(?:\s+(?:host|db|type)=[\w\-\.$]+?)*\s*>(?:.*?</sql>)', $mode, 'plugin_sqlquery');
$this->Lexer->addEntryPattern('<sql>', $mode, 'plugin_sqlquery');
}
public function postConnect()
{
$this->Lexer->addExitPattern('</sql>','plugin_sqlquery');
}
/**
@ -33,36 +36,29 @@ class syntax_plugin_sqlquery extends DokuWiki_Syntax_Plugin {
* @param int $state The state of the handler
* @param int $pos The position in the document
* @param Doku_Handler $handler The handler
*
* @return array Data for the renderer
*/
public function handle($match, $state, $pos, Doku_Handler $handler) {
$data = array('state' => $state);
if ($state == DOKU_LEXER_SPECIAL) {
# get type (DSN prefix)
if (preg_match('/<sql\b.*type=(mysql|dblib)/', $match, $result)) {
$data['type'] = $result[1];
} else {
$data['type'] = $this->getConf('type');
}
# get host
if (preg_match('/<sql\b.*host=([\w\-\.$]+)/', $match, $result)) {
$data['host'] = $result[1];
} else {
$data['host'] = $this->getConf('Host');
}
# get database
if (preg_match('/<sql\b.*db=([\w\-\.$]+)/', $match, $result)) {
$data['db'] = $result[1];
} else {
$data['db'] = $this->getConf('DB');
}
# get query
$data['match'] = $match;
if (preg_match('%<sql.*?>(.*)</sql>%s', $match, $result)) {
$data['query'] = trim($result[1]);
}
public function handle($match, $state, $pos, Doku_Handler $handler)
{
switch ( $state )
{
case DOKU_LEXER_ENTER:
$data = array();
return $data;
break;
case DOKU_LEXER_UNMATCHED:
return array('sqlquery' => $match);
break;
case DOKU_LEXER_EXIT:
$data = array();
return $data;
break;
}
$data = array();
return $data;
}
@ -72,73 +68,72 @@ class syntax_plugin_sqlquery extends DokuWiki_Syntax_Plugin {
* @param string $mode Renderer mode (supported modes: xhtml)
* @param Doku_Renderer $renderer The renderer
* @param array $data The data from the handler() function
*
* @return bool If rendering was successful.
*/
public function render($mode, Doku_Renderer $renderer, $data)
{
if ($mode != 'xhtml') return false;
if (empty($data['query'])) return true;
if ( $mode != 'xhtml' ) return false;
// get configuration
$user = $this->getConf('user');
$password = $this->getConf('password');
if ( !empty( $data['sqlquery'] ) )
{
// получаем параметры конфигурации
$host = $this->getConf('Host');
$DB = $this->getConf('DB');
$user = $this->getConf('user');
$password = $this->getConf('password');
// connect to database
$dsn = "{$data['type']}:host={$data['host']};dbname={$data[db]};charset=UTF8;";
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
$renderer->doc .= "<pre>Unable to connect to database:" . $e->getMessage() . "</pre>\n";
return true;
}
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$dbh->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_NUM);
// получаем запрос
$querystring = $data['sqlquery'];
// run query
try {
$result = $dbh->query($data['query']);
} catch (PDOException $e) {
$renderer->doc .= "<pre>Error in query:" . $e->getMessage() . "</pre>\n";
return true;
}
// подключаемся к базе
$link = mysqli_connect($host, $user, $password, $DB);
mysqli_set_charset($link, "utf8");
// get the number of fields in the table
$fieldcount = $result->columnCount();
// подключились
if ( $link )
{
$result = mysqli_query($link, $querystring);
if ( $result )
{
// получаем кол-во полей в таблице
$fieldcount = mysqli_num_fields($result);
// build a table
$renderer->doc .= '<table id="sqlquerytable" class="inline">' . "\n";
// строим таблицу
$renderer->doc .= "<table id=\"sqlquerytable\" class=\"inline\">";
// build the header section of the table
$renderer->doc .= "<thead><tr>";
// строим заголовок
$renderer->doc .= "<thead><tr>";
while ($fieldinfo = mysqli_fetch_field($result))
{
$renderer->doc .= "<th>";
$renderer->doc .= $fieldinfo->name;
$renderer->doc .= "</th>";
}
$renderer->doc .= "</tr></thead>";
for ($i = 0; $i < $fieldcount; $i++) {
$meta = $result->getColumnMeta($i);
$renderer->doc .= "<th>";
$renderer->doc .= $meta['name'];
$renderer->doc .= "</th>";
}
$renderer->doc .= "</tr></thead>\n";
// build the contents of the table
$renderer->doc .= "<tbody>\n";
foreach ($result as $row) {
$renderer->doc .= "<tr>";
for ( $i = 0; $i < $fieldcount; $i++ ) {
$renderer->doc .= "<td>";
$renderer->doc .= htmlentities($row[$i]);
$renderer->doc .= "</td>";
}
$renderer->doc .= "</tr>\n";
}
// finish the table
$renderer->doc .= "</tbody>\n</table>\n";
// Close connection, there is no close() method with PDO :-(
$result = null;
$dbh = null;
// строим содержимое таблицы
$renderer->doc .= "<tbody>";
while ($row = mysqli_fetch_row($result))
{
$renderer->doc .= "<tr>";
// строим строку
for ( $i = 0; $i < $fieldcount; $i++ )
{
$renderer->doc .= "<td>";
$renderer->doc .= $row[$i];
$renderer->doc .= "</td>";
}
$renderer->doc .= "</tr>";
} // of while fetch_row
// закрываем таблицу
$renderer->doc .= "</tbody></table>";
} // of mysqli_query
mysqli_close($link);
} // of mysqli link
} // of sqlquery not empty
return true;
}
} // of render function
}
// vim:ts=4:sw=4:et: