searchClauseObj->bIsUsedSrch;
$returnJSON = array("success"=>true, 'show_all'=> $showShowAllButton);
echo printJSON($returnJSON);
exit();
}
// Set language params, if have more than one language
$this->setLangParams();
$this->jsSettings['tableSettings'][ $this->tName ]['dashElements'] = array();
$majorElements = $this->getMajorElements();
// calculate additional element settings
foreach( $this->pSet->getDashboardElements() as $key => $elem )
{
$this->createElementLinks( $elem );
$permissions = false;
$newElem = $elem;
if( $elem['type'] == DASHBOARD_RECORD)
{
// check tables (add, view, edit) permissinons befor add to js
$newElem['tabsPageTypes'] = array();
foreach( $elem['tabsPageTypes'] as $idx => $pageType )
{
if( $this->CheckPermissions( $elem['table'], $pageType ) )
{
$permissions = true;
$newElem['tabsPageTypes'][] = $pageType;
}
}
}
elseif( $elem['type'] == DASHBOARD_DETAILS)
{
$eset = new ProjectSettings( $elem['table'] );
$details = $eset->getDetailTablesArr();
// add details shortTableNames
$newElem['details'] = array();
foreach( $details as $idx => $d )
{
if( in_array( $d['dDataSourceTable'], $elem['notUsedDetailTables'] ) )
continue;
if( $this->CheckPermissions( $d['dDataSourceTable'], $d['dType'] ) )
{
$permissions = true;
$newElem['details'][$idx] = $d;
$this->jsSettings['tableSettings'][ $d['dDataSourceTable'] ]['shortTName'] = $d[ 'dShortTable' ];
}
}
}
elseif( $elem['type'] == DASHBOARD_CHART || $elem['type'] == DASHBOARD_REPORT || $elem['type'] == DASHBOARD_SEARCH)
$permissions = $this->CheckPermissions($elem['table'], "Search" );
elseif( $elem['type'] == DASHBOARD_LIST )
$permissions = $this->CheckPermissions( $elem['table'], "list" );
elseif( $elem['type'] == DASHBOARD_MAP )
{
$permissions = $this->CheckPermissions( $elem['table'], "list" );
if( !$elem["updateMoved"] )
$newElem["updateMoved"] = !$this->hasGridElement( $elem['table'] );
}
$this->elementsPermissions[$key] = $permissions;
if ( !$permissions )
continue;
if( isset( $majorElements[ $newElem["elementName"]] ) )
$newElem["major"] = true;
// add shortTableNames and element
$this->jsSettings['tableSettings'][ $elem['table'] ]['shortTName'] = GetTableURL( $elem['table'] );
$this->jsSettings['tableSettings'][ $this->tName ]['dashElements'][$key] = $newElem;
}
}
function CheckPermissions( $table, $permis )
{
foreach( $this->getPermissionType( $permis ) as $val )
{
if( CheckTablePermissions( $table, $val ) )
return true;
}
return false;
}
/**
* @param String $pageType
* @return Array permission types
*/
function getPermissionType($pageType)
{
$result = array();
$type = parent::getPermisType($pageType);
if ($pageType == "view" || $pageType == "chart" || $pageType == "report" || $pageType == "list")
$type = "S";
elseif ($pageType == "add")
$type = "A";
elseif ($pageType == "edit")
$type = "E";
/*elseif ($pageType == "list")
$result = array("E", "S", "A");*/
return $type ? array($type) : $result;
}
function init()
{
parent::init();
$this->createElementContainers();
}
/**
*
*/
function createElementContainers()
{
foreach( $this->pSet->getDashboardElements() as $key => $elem )
{
if ( !$this->elementsPermissions[$key] )
continue;
$style = "";
if( $this->getLayoutVersion() == BOOTSTRAP_LAYOUT )
{
if( $elem["width"] )
$style .= "#dashelement_" . $elem["elementName"] . $this->id . " > .panel > .panel-body {
width: " . $elem["width"] . "px;
overflow-x: auto;
}";
if( $elem["height"] )
$style .= "#dashelement_" . $elem["elementName"] . $this->id . " > .panel > .panel-body {
height: " . $elem["height"] . "px;
overflow-y: auto;
}";
if( $style != "" )
{
$style = "";
}
}
$this->xt->assign( "db_".$elem["elementName"] , $style."
getElementClass( $elem ) . "\" id=\"dashelement_" . $elem["elementName"] . $this->id . "\">
");
}
}
/**
* Clear the page's and elements pages' session keys
* if the page is loaded with "empty" params
*/
function clearSessionKeys()
{
if ( count($_POST) && $_POST["mode"] == "dashsearch" )
{
return;
}
parent::clearSessionKeys();
if( !count($_POST) && ( !count($_GET) || count($_GET) == 1 && isset($_GET["menuItemId"]) ) )
{
$this->unsetAllPageSessionKeys();
}
foreach( $this->pSet->getDashboardElements() as $elem )
{
if( $elem['type'] != DASHBOARD_REPORT && $elem['type'] != DASHBOARD_SEARCH )
$this->unsetAllPageSessionKeys( $this->tName."_".$elem["table"] );
}
}
/**
* Set session variables
*/
function setSessionVariables()
{
parent::setSessionVariables();
$_SESSION[$this->sessionPrefix.'_advsearch'] = serialize($this->searchClauseObj);
}
/**
* Add extra JS and CSS files
*/
public function addDashElementsJSAndCSS()
{
if( $this->hasSingleRecordOrDetailsElement() )
{
$this->AddJSFile("include/jquery-ui/jquery-ui.min.js");
$this->AddCSSFile("include/jquery-ui/smoothness/jquery-ui.min.css");
$this->AddCSSFile("include/jquery-ui/smoothness/jquery-ui.theme.min.css");
}
}
/**
* Check if the dashboard has any 'single record' or 'details' element
* @return Boolean
*/
protected function hasSingleRecordOrDetailsElement()
{
foreach( $this->pSet->getDashboardElements() as $key => $elem )
{
if ( !$this->elementsPermissions[$key] )
continue;
if( $elem["type"] == DASHBOARD_RECORD || $elem["type"] == DASHBOARD_DETAILS )
return true;
}
return false;
}
/**
* @param String table
* @return Boolean
*/
protected function hasGridElement( $table )
{
foreach( $this->pSet->getDashboardElements() as $elem )
{
if( $elem["table"] == $table && $elem["type"] == DASHBOARD_LIST )
return true;
}
return false;
}
/**
* Assign 'body' element
*/
public function addCommonHtml()
{
// assign body begin
$this->body['begin'] = GetBaseScriptsForPage(false);
// assign body end
$this->body['end'] = XTempl::create_method_assignment( 'assignBodyEnd', $this );
$this->xt->assignbyref('body', $this->body);
}
/**
* Common xt assignments
*/
protected function doCommonAssignments()
{
$this->xt->assign("asearch_link", true);
if( $this->mobileTemplateMode() )
$this->xt->assign('tableinfomobile_block', true);
}
/**
* Add common assign
*/
function commonAssign()
{
parent::commonAssign();
if( $this->mobileTemplateMode() )
{
$this->xt->displayBrickHidden("search_dashboard_m");
}
$this->assignAdmin();
$this->xt->assign("changepwd_link", $_SESSION["AccessLevel"]!= ACCESS_LEVEL_GUEST && $_SESSION["fromFacebook"] == false);
$this->xt->assign("changepwdlink_attrs", "href=\"".GetTableLink("changepwd")."\" onclick=\"window.location.href='".GetTableLink("changepwd")."';return false;\"");
}
/**
* Process the page
*/
public function process()
{
if( $this->eventsObject->exists("BeforeProcessDashboard") )
$this->eventsObject->BeforeProcessDashboard( $this );
// add button events if exist
$this->addButtonHandlers();
$this->addDashElementsJSAndCSS();
$this->addCommonJs();
$this->commonAssign();
$this->doCommonAssignments();
$this->addCommonHtml();
$this->prepareBreadcrumbs("main");
if( $this->eventsObject->exists("BeforeShowDashboard") )
{
$this->eventsObject->BeforeShowDashboard( $this->xt, $this->templatefile, $this );
}
$this->display( $this->templatefile );
}
/**
* @param &Array element
* @return String
*/
protected function getElementClass( &$element )
{
if( $this->getLayoutVersion() == BOOTSTRAP_LAYOUT )
return "";
if( $element[ "type" ] != DASHBOARD_DETAILS && $element[ "type" ] != DASHBOARD_RECORD )
return "rnr-dbbordered";
return "";
}
/**
* Fill in element children and parents lists
* Children can be updated by this element, parents can update this element
* There can be peer elements that are both child and parent to each other.
* @param &Array elem
*/
function createElementLinks( &$elem )
{
foreach( $this->pSet->getDashboardElements() as $key => $e )
{
if( $e["elementName"] == $elem["elementName"] )
continue;
if( $e["table"] == $elem["masterTable"] && DashboardPage::canUpdateDetails( $e ) )
{
$elem["parents"][ $e["elementName"] ] = true;
}
if( $elem["table"] == $e["masterTable"] && DashboardPage::canUpdateDetails( $elem ) )
{
$elem["children"][ $e["elementName"] ] = true;
}
if( $elem["table"] == $e["table"] )
{
if( DashboardPage::canUpdatePeers( $e ) )
$elem["parents"][ $e["elementName"] ] = true;
if( DashboardPage::canUpdatePeers( $elem ) )
$elem["children"][ $e["elementName"] ] = true;
}
}
}
/**
* @return Array
*/
function getMajorElements()
{
$majorElements = array();
$dashboardTables = array();
$elements = $this->pSet->getDashboardElements();
// distribute elements by tables
foreach( $elements as $key => $e )
{
if( !isset( $dashboardTables[ $e["table"] ] ) )
{
$dashboardTables[ $e["table"] ] = array();
}
$dashboardTables[ $e["table"] ][] = $key;
}
// locate major element in each table
foreach( $dashboardTables as $t )
{
$major = "";
// locate main map first
foreach( $t as $i )
{
if( $elements[$i]["type"] == DASHBOARD_MAP && $elements[$i]["updateMoved"] )
{
$major = $elements[$i]["elementName"];
break;
}
}
// locate grid
if( $major == "" )
{
foreach( $t as $i )
{
if( $elements[$i]["type"] == DASHBOARD_LIST || $elements[$i]["type"] == DASHBOARD_CHART || $elements[$i]["type"] == DASHBOARD_REPORT )
{
$major = $elements[$i]["elementName"];
break;
}
}
}
// locate any map
if( $major == "" )
{
foreach( $t as $i )
{
if( $elements[$i]["type"] == DASHBOARD_MAP )
{
$major = $elements[$i]["elementName"];
break;
}
}
}
// locate single record with edit or view enabled
if( $major == "" )
{
foreach( $t as $i )
{
if( $elements[$i]["type"] != DASHBOARD_RECORD )
continue;
if( in_array( PAGE_EDIT, $elements[$i]["tabsPageTypes"] ) || in_array( PAGE_VIEW, $elements[$i]["tabsPageTypes"] ) )
{
$major = $elements[$i]["elementName"];
break;
}
}
}
if( $major != "" )
$majorElements[ $major ] = true;
}
return $majorElements;
}
/**
* @param &Array elem
* @return Boolean
*/
static function canUpdateDetails( &$elem )
{
return DashboardPage::canUpdatePeers( $elem );
}
/**
* @param &Array elem
* @return Boolean
*/
static function canUpdatePeers( &$elem )
{
return $elem["type"] == DASHBOARD_LIST
|| $elem["type"] == DASHBOARD_CHART
|| $elem["type"] == DASHBOARD_REPORT
|| $elem["type"] == DASHBOARD_RECORD
|| $elem["type"] == DASHBOARD_MAP;
}
}
?>