<?php
|
|
// Include to load Quasi and Qcodo
|
|
require('../core/Quasi.class.php');
|
|
|
|
// Security check for ALLOW_REMOTE_ADMIN
|
|
// To allow access REGARDLESS of ALLOW_REMOTE_ADMIN, simply remove the line below
|
|
QApplication::CheckRemoteAdmin();
|
|
|
|
|
|
|
|
// Let's "magically" determine the list of genereated Class Panel Drafts by
|
|
// just traversing through this directory, looking for "*ListPanel.class.php" and "*EditPanel.class.php"
|
|
|
|
// Obviously, if you are wanting to make your own dashbaord, you should change this and use more
|
|
// hard-coded means to determine which classes' paneldrafts you want to include/use in your dashboard.
|
|
$objDirectory = opendir(dirname(__FILE__));
|
|
$strClassNameArray = array();
|
|
while ($strFile = readdir($objDirectory))
|
|
{
|
|
if(false !== strpos($strFile,'~') )
|
|
continue;
|
|
if ($intPosition = strpos($strFile, 'ListPanel.class.php'))
|
|
{
|
|
$strClassName = substr($strFile, 0, $intPosition);
|
|
$strClassNameArray[$strClassName] = $strClassName . 'ListPanel';
|
|
require($strClassName . 'ListPanel.class.php');
|
|
if(file_exists('./' . $strClassName . 'EditPanel.class.php') )
|
|
require($strClassName . 'EditPanel.class.php');
|
|
}
|
|
}
|
|
|
|
natsort($strClassNameArray);
|
|
|
|
class Dashboard extends QForm {
|
|
protected $pnlClassNames;
|
|
|
|
protected $pnlTitle;
|
|
protected $pnlList;
|
|
protected $pnlEdit;
|
|
|
|
protected function Form_Create() {
|
|
$this->pnlTitle = new QPanel($this);
|
|
$this->pnlTitle->Text = 'AJAX Dashboard';
|
|
|
|
$this->pnlList = new QPanel($this, 'pnlList');
|
|
$this->pnlList->AutoRenderChildren = true;
|
|
|
|
$this->pnlEdit = new QPanel($this, 'pnlEdit');
|
|
$this->pnlEdit->AutoRenderChildren = true;
|
|
$this->pnlEdit->Visible = false;
|
|
|
|
$this->pnlClassNames = new QPanel($this, "classNames");
|
|
$this->pnlClassNames->AutoRenderChildren = true;
|
|
$this->pnlClassNames->Visible = true;
|
|
|
|
// Use the strClassNameArray as magically determined above to aggregate the listbox of classes
|
|
// Obviously, this should be modified if you want to make a custom dashboard
|
|
global $strClassNameArray;
|
|
foreach ($strClassNameArray as $strClassName)
|
|
{
|
|
$strMenuLabel = substr( $strClassName, 0 , strpos( $strClassName, "ListPanel" ) );
|
|
$pnlClassName = new QPanel($this->pnlClassNames);
|
|
$pnlClassName->Text = $strMenuLabel;
|
|
$pnlClassName->CssClass = 'className';
|
|
$pnlClassName->ActionParameter = $strClassName;
|
|
$pnlClassName->AddAction(New QClickEvent(), new QAjaxAction('pnlClassNames_Change'));
|
|
|
|
}
|
|
|
|
$this->objDefaultWaitIcon = new QWaitIcon($this);
|
|
}
|
|
|
|
/**
|
|
* This Form_Validate event handler allows you to specify any custom Form Validation rules.
|
|
* It will also Blink() on all invalid controls, as well as Focus() on the top-most invalid control.
|
|
*/
|
|
protected function Form_Validate() {
|
|
// By default, we report that Custom Validations passed
|
|
$blnToReturn = true;
|
|
|
|
// Custom Validation Rules
|
|
// TODO: Be sure to set $blnToReturn to false if any custom validation fails!
|
|
|
|
$blnFocused = false;
|
|
foreach ($this->GetErrorControls() as $objControl) {
|
|
// Set Focus to the top-most invalid control
|
|
if (!$blnFocused) {
|
|
$objControl->Focus();
|
|
$blnFocused = true;
|
|
}
|
|
|
|
// Blink on ALL invalid controls
|
|
$objControl->Blink();
|
|
}
|
|
|
|
return $blnToReturn;
|
|
}
|
|
|
|
protected function pnlClassNames_Change($strFormId, $strControlId, $strParameter)
|
|
{
|
|
// Get rid of all child controls for list and edit panels
|
|
$this->pnlList->RemoveChildControls(true);
|
|
$this->pnlEdit->RemoveChildControls(true);
|
|
$this->pnlEdit->Visible = false;
|
|
$this->pnlList->Visible = true;
|
|
|
|
if ($strClassName = $strParameter)
|
|
{
|
|
// We've selected a Class Name
|
|
$objNewPanel = new $strClassName($this->pnlList, 'SetEditPane', 'CloseEditPane');
|
|
$this->pnlTitle->Text = $strMenuLabel = substr( $strParameter, 0 , strpos( $strParameter, "ListPanel" ) );
|
|
$this->pnlTitle->Text .= ' List';
|
|
} else {
|
|
$this->pnlTitle->Text = 'AJAX Dashboard';
|
|
}
|
|
}
|
|
|
|
public function SetListPane(QPanel $objPanel)
|
|
{
|
|
$this->pnlEdit->RemoveChildControls(true);
|
|
$this->pnlEdit->Visible = false;
|
|
|
|
$this->pnlList->RemoveChildControls(true);
|
|
$objPanel->SetParentControl($this->pnlList);
|
|
$this->pnlList->Visible = true;
|
|
}
|
|
|
|
public function CloseEditPane($blnUpdatesMade) {
|
|
// Close the Edit Pane
|
|
$this->pnlEdit->RemoveChildControls(true);
|
|
$this->pnlEdit->Visible = false;
|
|
|
|
// If updates were made, let's "brute force" the updates to the screen by just refreshing the list pane altogether
|
|
if ($blnUpdatesMade)
|
|
$this->pnlList->Refresh();
|
|
$this->pnlList->Visible = true;
|
|
}
|
|
|
|
public function SetEditPane(QPanel $objPanel = null)
|
|
{
|
|
$this->pnlList->Visible = false;
|
|
$this->pnlEdit->RemoveChildControls(true);
|
|
if ($objPanel) {
|
|
$objPanel->SetParentControl($this->pnlEdit);
|
|
$this->pnlEdit->Visible = true;
|
|
} else {
|
|
$this->pnlEdit->Visible = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
Dashboard::Run('Dashboard');
|
|
?>
|