action) { return $this->doTree(); } ob_start(); switch ($this->action) { case 'create': $this->doCreate(); break; case 'save_create': if (isset($_POST['cancel'])) { $this->doDefault(); } else { $this->doSaveCreate(); } break; case 'alter': $this->doAlter(); break; case 'save_alter': if (isset($_POST['alter'])) { $this->doSaveAlter(); } else { $this->doProperties(); } break; case 'drop': if (isset($_POST['drop'])) { $this->doDrop(false); } else { $this->doDefault(); } break; case 'confirm_drop': $this->doDrop(true); break; default: $this->doDefault(); break; case 'properties': $this->doProperties(); break; } $output = ob_get_clean(); $this->printHeader($this->headerTitle()); $this->printBody(); echo $output; return $this->printFooter(); } /** * Show default list of aggregate functions in the database. * * @param mixed $msg */ public function doDefault($msg = '') { $this->printTrail('schema'); $this->printTabs('schema', 'aggregates'); $this->printMsg($msg); $aggregates = $this->data->getAggregates(); $columns = [ 'aggrname' => [ 'title' => $this->lang['strname'], 'field' => Decorator::field('proname'), 'url' => "redirect.php?subject=aggregate&action=properties&{$this->misc->href}&", 'vars' => ['aggrname' => 'proname', 'aggrtype' => 'proargtypes'], ], 'aggrtype' => [ 'title' => $this->lang['strtype'], 'field' => Decorator::field('proargtypes'), ], 'aggrtransfn' => [ 'title' => $this->lang['straggrsfunc'], 'field' => Decorator::field('aggtransfn'), ], 'owner' => [ 'title' => $this->lang['strowner'], 'field' => Decorator::field('usename'), ], 'actions' => [ 'title' => $this->lang['stractions'], ], 'comment' => [ 'title' => $this->lang['strcomment'], 'field' => Decorator::field('aggrcomment'), ], ]; $actions = [ 'alter' => [ 'content' => $this->lang['stralter'], 'attr' => [ 'href' => [ 'url' => 'aggregates.php', 'urlvars' => [ 'action' => 'alter', 'aggrname' => Decorator::field('proname'), 'aggrtype' => Decorator::field('proargtypes'), ], ], ], ], 'drop' => [ 'content' => $this->lang['strdrop'], 'attr' => [ 'href' => [ 'url' => 'aggregates.php', 'urlvars' => [ 'action' => 'confirm_drop', 'aggrname' => Decorator::field('proname'), 'aggrtype' => Decorator::field('proargtypes'), ], ], ], ], ]; if (!$this->data->hasAlterAggregate()) { unset($actions['alter']); } echo $this->printTable($aggregates, $columns, $actions, $this->table_place, $this->lang['strnoaggregates']); $navlinks = [ 'create' => [ 'attr' => [ 'href' => [ 'url' => 'aggregates.php', 'urlvars' => [ 'action' => 'create', 'server' => $_REQUEST['server'], 'database' => $_REQUEST['database'], 'schema' => $_REQUEST['schema'], ], ], ], 'content' => $this->lang['strcreateaggregate'], ], ]; $this->printNavLinks($navlinks, $this->table_place, get_defined_vars()); } public function doTree() { $this->data = $this->misc->getDatabaseAccessor(); $aggregates = $this->data->getAggregates(); $proto = Decorator::concat(Decorator::field('proname'), ' (', Decorator::field('proargtypes'), ')'); $reqvars = $this->misc->getRequestVars('aggregate'); $attrs = [ 'text' => $proto, 'icon' => 'Aggregate', 'toolTip' => Decorator::field('aggcomment'), 'action' => Decorator::redirecturl( 'redirect', $reqvars, [ 'action' => 'properties', 'aggrname' => Decorator::field('proname'), 'aggrtype' => Decorator::field('proargtypes'), ] ), ]; return $this->printTree($aggregates, $attrs, 'aggregates'); } /** * Actually creates the new aggregate in the database. */ public function doSaveCreate() { $this->data = $this->misc->getDatabaseAccessor(); // Check inputs if ('' == trim($_REQUEST['name'])) { return $this->doCreate($this->lang['straggrneedsname']); } if ('' == trim($_REQUEST['basetype'])) { return $this->doCreate($this->lang['straggrneedsbasetype']); } if ('' == trim($_REQUEST['sfunc'])) { return $this->doCreate($this->lang['straggrneedssfunc']); } if ('' == trim($_REQUEST['stype'])) { return $this->doCreate($this->lang['straggrneedsstype']); } $status = $this->data->createAggregate( $_REQUEST['name'], $_REQUEST['basetype'], $_REQUEST['sfunc'], $_REQUEST['stype'], $_REQUEST['ffunc'], $_REQUEST['initcond'], $_REQUEST['sortop'], $_REQUEST['aggrcomment'] ); if (0 == $status) { $this->misc->setReloadBrowser(true); $this->doDefault($this->lang['straggrcreated']); } else { $this->doCreate($this->lang['straggrcreatedbad']); } } /** * Displays a screen for create a new aggregate function. * * @param mixed $msg */ public function doCreate($msg = '') { $this->data = $this->misc->getDatabaseAccessor(); $this->coalesceArr($_REQUEST, 'name', ''); $this->coalesceArr($_REQUEST, 'basetype', ''); $this->coalesceArr($_REQUEST, 'sfunc', ''); $this->coalesceArr($_REQUEST, 'stype', ''); $this->coalesceArr($_REQUEST, 'ffunc', ''); $this->coalesceArr($_REQUEST, 'initcond', ''); $this->coalesceArr($_REQUEST, 'sortop', ''); $this->coalesceArr($_REQUEST, 'aggrcomment', ''); $this->printTrail('schema'); $this->printTitle($this->lang['strcreateaggregate'], 'pg.aggregate.create'); $this->printMsg($msg); echo '
'.PHP_EOL; echo ''.PHP_EOL; echo "\t\n\t\t".PHP_EOL; echo "\t\t\n\t".PHP_EOL; echo "\t\n\t\t".PHP_EOL; echo "\t\t\n\t".PHP_EOL; echo "\t\n\t\t".PHP_EOL; echo "\t\t\n\t".PHP_EOL; echo "\t\n\t\t".PHP_EOL; echo "\t\t\n\t".PHP_EOL; echo "\t\n\t\t".PHP_EOL; echo "\t\t\n\t".PHP_EOL; echo "\t\n\t\t".PHP_EOL; echo "\t\t\n\t".PHP_EOL; echo "\t\n\t\t".PHP_EOL; echo "\t\t\n\t".PHP_EOL; echo "\t\n\t\t".PHP_EOL; echo "\t\t\n\t".PHP_EOL; echo '
{$this->lang['strname']}data->_maxNameLen}\" value=\"", htmlspecialchars($_REQUEST['name']), "\" />
{$this->lang['straggrbasetype']}data->_maxNameLen}\" value=\"", htmlspecialchars($_REQUEST['basetype']), "\" />
{$this->lang['straggrsfunc']}data->_maxNameLen}\" value=\"", htmlspecialchars($_REQUEST['sfunc']), "\" />
{$this->lang['straggrstype']}data->_maxNameLen}\" value=\"", htmlspecialchars($_REQUEST['stype']), "\" />
{$this->lang['straggrffunc']}data->_maxNameLen}\" value=\"", htmlspecialchars($_REQUEST['ffunc']), "\" />
{$this->lang['straggrinitcond']}data->_maxNameLen}\" value=\"", htmlspecialchars($_REQUEST['initcond']), "\" />
{$this->lang['straggrsortop']}data->_maxNameLen}\" value=\"", htmlspecialchars($_REQUEST['sortop']), "\" />
{$this->lang['strcomment']}
'.PHP_EOL; echo '

'.PHP_EOL; echo $this->misc->form; echo "lang['strcreate']}\" />".PHP_EOL; echo "lang['strcancel']}\" />

".PHP_EOL; echo '
'.PHP_EOL; } /** * Function to save after altering an aggregate. */ public function doSaveAlter() { $this->data = $this->misc->getDatabaseAccessor(); // Check inputs if ('' == trim($_REQUEST['aggrname'])) { $this->doAlter($this->lang['straggrneedsname']); return; } $status = $this->data->alterAggregate( $_REQUEST['aggrname'], $_REQUEST['aggrtype'], $_REQUEST['aggrowner'], $_REQUEST['aggrschema'], $_REQUEST['aggrcomment'], $_REQUEST['newaggrname'], $_REQUEST['newaggrowner'], $_REQUEST['newaggrschema'], $_REQUEST['newaggrcomment'] ); if (0 == $status) { $this->doDefault($this->lang['straggraltered']); } else { $this->doAlter($this->lang['straggralteredbad']); return; } } /** * Function to allow editing an aggregate function. * * @param mixed $msg */ public function doAlter($msg = '') { $this->data = $this->misc->getDatabaseAccessor(); $this->printTrail('aggregate'); $this->printTitle($this->lang['stralter'], 'pg.aggregate.alter'); $this->printMsg($msg); echo '
'.PHP_EOL; $aggrdata = $this->data->getAggregate($_REQUEST['aggrname'], $_REQUEST['aggrtype']); if ($aggrdata->recordCount() > 0) { // Output table header echo ''.PHP_EOL; echo "\t\n\t\t"; echo ""; echo "\n\t".PHP_EOL; // Display aggregate's name, owner and schema echo "\t\n\t\t'; echo ''; echo '\n\t".PHP_EOL; echo "\t\n\t\t".PHP_EOL; echo "\t\t\n\t".PHP_EOL; echo '
{$this->lang['strname']}{$this->lang['strowner']}{$this->lang['strschema']}
{$this->lang['strcomment']}
'.PHP_EOL; echo '

'.PHP_EOL; echo $this->misc->form; echo ''.PHP_EOL; echo ''.PHP_EOL; echo ''.PHP_EOL; echo ''.PHP_EOL; echo ''.PHP_EOL; echo "lang['stralter']}\" />".PHP_EOL; echo "lang['strcancel']}\" />

".PHP_EOL; } else { echo "

{$this->lang['strnodata']}

".PHP_EOL; echo "lang['strback']}\" />

".PHP_EOL; } echo '
'.PHP_EOL; } /** * Show confirmation of drop and perform actual drop of the aggregate function selected. * * @param mixed $confirm */ public function doDrop($confirm) { $this->data = $this->misc->getDatabaseAccessor(); if ($confirm) { $this->printTrail('aggregate'); $this->printTitle($this->lang['strdrop'], 'pg.aggregate.drop'); echo '

', sprintf($this->lang['strconfdropaggregate'], htmlspecialchars($_REQUEST['aggrname'])), '

'.PHP_EOL; echo '
'.PHP_EOL; echo "

".PHP_EOL; echo '

'.PHP_EOL; echo ''.PHP_EOL; echo ''.PHP_EOL; echo $this->misc->form; echo "lang['strdrop']}\" />".PHP_EOL; echo "lang['strcancel']}\" />

".PHP_EOL; echo '
'.PHP_EOL; } else { $status = $this->data->dropAggregate($_POST['aggrname'], $_POST['aggrtype'], isset($_POST['cascade'])); if (0 == $status) { $this->misc->setReloadBrowser(true); $this->doDefault($this->lang['straggregatedropped']); } else { $this->doDefault($this->lang['straggregatedroppedbad']); } } } /** * Show the properties of an aggregate. * * @param mixed $msg */ public function doProperties($msg = '') { $this->data = $this->misc->getDatabaseAccessor(); $this->printTrail('aggregate'); $this->printTitle($this->lang['strproperties'], 'pg.aggregate'); $this->printMsg($msg); $aggrdata = $this->data->getAggregate($_REQUEST['aggrname'], $_REQUEST['aggrtype']); if ($aggrdata->recordCount() > 0) { // Display aggregate's info echo ''.PHP_EOL; echo "\n\t".PHP_EOL; echo "\t\n".PHP_EOL; echo "\n\t".PHP_EOL; echo "\t\n".PHP_EOL; echo "\n\t".PHP_EOL; echo "\t\n".PHP_EOL; echo "\n\t".PHP_EOL; echo "\t\n".PHP_EOL; echo "\n\t".PHP_EOL; echo "\t\n".PHP_EOL; echo "\n\t".PHP_EOL; echo "\t\n".PHP_EOL; if ($this->data->hasAggregateSortOp()) { echo "\n\t".PHP_EOL; echo "\t\n".PHP_EOL; } echo "\n\t".PHP_EOL; echo "\t\n".PHP_EOL; echo "\n\t".PHP_EOL; echo "\t\n".PHP_EOL; echo '
{$this->lang['strname']}", htmlspecialchars($_REQUEST['aggrname']), "
{$this->lang['straggrbasetype']}", htmlspecialchars($_REQUEST['aggrtype']), "
{$this->lang['straggrsfunc']}", htmlspecialchars($aggrdata->fields['aggtransfn']), "
{$this->lang['straggrstype']}", htmlspecialchars($aggrdata->fields['aggstype']), "
{$this->lang['straggrffunc']}", htmlspecialchars($aggrdata->fields['aggfinalfn']), "
{$this->lang['straggrinitcond']}", htmlspecialchars($aggrdata->fields['agginitval']), "
{$this->lang['straggrsortop']}", htmlspecialchars($aggrdata->fields['aggsortop']), "
{$this->lang['strowner']}", htmlspecialchars($aggrdata->fields['usename']), "
{$this->lang['strcomment']}", $this->misc->printVal($aggrdata->fields['aggrcomment']), "
'.PHP_EOL; } else { echo "

{$this->lang['strnodata']}

".PHP_EOL; } $navlinks = [ 'showall' => [ 'attr' => [ 'href' => [ 'url' => 'aggregates', 'urlvars' => [ 'server' => $_REQUEST['server'], 'database' => $_REQUEST['database'], 'schema' => $_REQUEST['schema'], ], ], ], 'content' => $this->lang['straggrshowall'], ], ]; if ($this->data->hasAlterAggregate()) { $navlinks['alter'] = [ 'attr' => [ 'href' => [ 'url' => 'aggregates', 'urlvars' => [ 'action' => 'alter', 'server' => $_REQUEST['server'], 'database' => $_REQUEST['database'], 'schema' => $_REQUEST['schema'], 'aggrname' => $_REQUEST['aggrname'], 'aggrtype' => $_REQUEST['aggrtype'], ], ], ], 'content' => $this->lang['stralter'], ]; } $navlinks['drop'] = [ 'attr' => [ 'href' => [ 'url' => 'aggregates', 'urlvars' => [ 'action' => 'confirm_drop', 'server' => $_REQUEST['server'], 'database' => $_REQUEST['database'], 'schema' => $_REQUEST['schema'], 'aggrname' => $_REQUEST['aggrname'], 'aggrtype' => $_REQUEST['aggrtype'], ], ], ], 'content' => $this->lang['strdrop'], ]; $this->printNavLinks($navlinks, 'aggregates-properties', get_defined_vars()); } }