diff --git a/admin-dev/themes/template/requestSql.tpl b/admin-dev/themes/template/requestSql.tpl index dd5c7caec..cfe2b4aa4 100644 --- a/admin-dev/themes/template/requestSql.tpl +++ b/admin-dev/themes/template/requestSql.tpl @@ -42,30 +42,52 @@ {/if} {if isset($view)} -

{$view['name']}

- - - {foreach $view['key'] AS $key} - - {/foreach} - - {foreach $view['results'] AS $result} + {if isset($view['error'])} +

{l s ='This query has no result.'}

+ {else} +

{$view['name']}

+
{$key}
- {foreach $view['key'] AS $name} - + {foreach $view['key'] AS $key} + {/foreach} - {/foreach} -
{$result[$name]}{$key}
- - + {foreach $view['results'] AS $result} + + {foreach $view['key'] AS $name} + {$result[$name]} + {/foreach} + + {/foreach} + + + + {/if} +{elseif isset($tab_form)} +
+ {if $tab_form['id']}{/if} +
{l s ='Request'} + +
+ +
+ +
+ +
+
+ +
+
* {l s ='Required field'}
+
+
{/if} {$content} \ No newline at end of file diff --git a/controllers/admin/AdminRequestSqlController.php b/controllers/admin/AdminRequestSqlController.php index 8b1d4bfec..1ffb1363c 100644 --- a/controllers/admin/AdminRequestSqlController.php +++ b/controllers/admin/AdminRequestSqlController.php @@ -29,6 +29,7 @@ class AdminRequestSqlControllerCore extends AdminController { private $info = true; private $warning = true; + private $tab_form = array(); public function __construct() { @@ -41,6 +42,8 @@ class AdminRequestSqlControllerCore extends AdminController $this->export = true; $this->requiredDatabase = true; $this->context = Context::getContext(); + $this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?')), + 'export' => array('text' => $this->l('Export selected'))); if (!Tools::getValue('realedit')) $this->deleted = false; @@ -74,49 +77,86 @@ class AdminRequestSqlControllerCore extends AdminController parent::postProcess(); } + public function bulkexport($boxes) + { + if (!$boxes || count($boxes) > 1) + $this->_errors[] = Tools::DisplayError('You must select a query to export the results.'); + + $id = (int)$boxes[0]; + + $file = 'request_sql_'.$id.'.csv'; + if ($csv = fopen(_PS_ADMIN_DIR_.'/export/'.$file, 'w')) + { + $sql = RequestSql::getRequestSqlById($id); + + if ($sql) + { + $results = Db::getInstance()->ExecuteS($sql[0]['sql']); + foreach (array_keys($results[0]) as $key) + { + $tab_key[] = $key; + fputs($csv, $key.';'); + } + foreach ($results as $result) + { + fputs($csv, "\n"); + foreach ($tab_key as $name) + fputs($csv, '"'.Tools::safeOutput($result[$name]).'";'); + } + if (file_exists(_PS_ADMIN_DIR_.'/export/'.$file)) + { + $filesize = filesize(_PS_ADMIN_DIR_.'/export/'.$file); + $upload_max_filesize = $this->returnBytes(ini_get('upload_max_filesize')); + if ($filesize < $upload_max_filesize) + { + header('Content-type: text/csv'); + header('Cache-Control: no-store, no-cache'); + header('Content-Disposition: attachment; filename="$file"'); + header('Content-Length: '.$filesize); + readfile(_PS_ADMIN_DIR_.'/export/'.$file); + die(); + } + else + $this->_errors[] = Tools::DisplayError('The file is too large and can not be downloaded. Please use the clause "LIMIT" in this query.'); + } + } + } + } + + public function returnBytes($val) + { + $val = trim($val); + $last = strtolower($val[strlen($val) - 1]); + switch ($last) + { + case 'g': + $val *= 1024; + case 'm': + $val *= 1024; + case 'k': + $val *= 1024; + } + return $val; + } + public function viewRequest_sql() { if (!($obj = $this->loadObject(true))) return; + $view = array(); - //$content = '

'.$obj->name.'

'; if ($results = Db::getInstance()->ExecuteS($obj->sql)) { foreach (array_keys($results[0]) as $key) $tab_key[] = $key; - + $view['name'] = $obj->name; $view['key'] = $tab_key; $view['results'] = $results; - /* - $tab_key = array(); - foreach (array_keys($results[0]) as $key) - $tab_key[] = $key; - $content .= ' - - '; - foreach ($tab_key as $key_name) - $content .= ''; - $content .= ' - '; - $request_sql = new RequestSql(); - $attributes = $request_sql->attributes; - foreach ($results as $result) - { - $content .= ''; - foreach ($tab_key as $name) - { - if (!isset($attributes[$name])) - $content .= ''; - else - $content .= ''; - } - $content .= ''; - } - $content .= '
'.$key_name.'
'.Tools::safeOutput($result[$name]).''.$attributes[$name].'
'; - */ } + else + $view['error'] = true; return $view; } @@ -221,31 +261,19 @@ class AdminRequestSqlControllerCore extends AdminController if (!($obj = $this->loadObject(true))) return; - $this->content .= ' -
- '.($obj->id ? '' : '').' -
'.$this->l('Request').' - -
- -
- -
- -
-
- -
-
* '.$this->l('Required field').'
-
-
'; + $smarty = $this->context->smarty; + $smarty->assign('tab_form', array('current' => self::$currentIndex.'&submitAdd'.$this->table.'=1&token='.$this->token, + 'id' => $obj->id, + 'table' => $this->table, + 'name' => $this->getFieldValue($obj, 'name'), + 'sql' => $this->getFieldValue($obj, 'sql'))); } - + public function init() { if (isset($_GET['view'.$this->table]) && isset($_GET['id_'.$this->table])) { - if ($this->tabAccess['edit'] === '1' || ($this->table == 'employee' AND $this->context->employee->id == Tools::getValue('id_employee'))) + if ($this->tabAccess['edit'] === '1' || ($this->table == 'employee' && $this->context->employee->id == Tools::getValue('id_employee'))) $this->display = 'view'; else $this->_errors[] = Tools::displayError('You do not have permission to edit here.'); @@ -256,7 +284,6 @@ class AdminRequestSqlControllerCore extends AdminController public function initContent() { $smarty = $this->context->smarty; - switch ($this->display) { case 'edit':