. */ /** * @brief Contains the admin standard controller page * * @file * @author Arnaud Veber * @author Laurent Giovannoni * @date $date$ * @version $Revision$ * @ingroup core */ require_once 'core/class/class_core_tools.php'; require_once 'core/tests/class/MessageController.php'; require_once 'core/tests/class/ViewController.php'; require_once 'core/class/class_history.php'; require_once 'apps/' . $_SESSION['config']['app_id'] . '/admin/admin_form_standard_tools.php'; $messageController = new MessageController(); $viewController = new ViewController(); /** * Management of the location bar * @param string $pageName * @param string $mode * @param string $objectName * @param string $path * @return string $pagePath the current page path */ function locationBarManagement($pageName, $mode, $objectName, $isApps) { /* $test = array(); $test['pageName'] = $pageName; $test['mode'] = $mode; $test['objectName'] = $objectName; $test['isApps'] = $isApps; echo '
' . print_r($test, true) . '
'; echo '
' . var_dump($test) . '
'; */ $objectLabel = @constant(strtoupper($objectName)); if(!$objectLabel) $objectLabel = _LIST; $pageLabels = array( 'create' => _ADDITION, 'update' => _MODIFICATION, 'list' => $objectLabel //_LIST, ); $pageIds = array( 'add' => $objectName . '_add', 'up' => $objectName . '_up', 'list' => $objectName . '_list', ); $init = false; if (isset($_REQUEST['reinit']) && $_REQUEST['reinit'] == 'true') $init = true; $level = ''; $allowedLevels = array(1, 2, 3, 4); if (isset($_REQUEST['level']) && in_array($_REQUEST['level'], $allowedLevels)) $level = $_REQUEST['level']; if($isApps) { $pagePath = $_SESSION['config']['businessappurl'] . 'index.php' . '?page=' . $pageName . '&admin=' . $objectName . '&objectName=' . $objectName . '&mode=' . $mode; } else { $pagePath = $_SESSION['config']['businessappurl'] . 'index.php?' . 'page=' . $pageName . '&module=' . $objectName . '&objectName=' . $objectName . '&mode=' . $mode; } $pageLabel = $pageLabels[$mode]; $pageId = $pageIds[$mode]; /* $test = array(); $test['$pagePath'] = $pagePath; $test['$pageLabel'] = $pageLabel; $test['$pageId'] = $pageId; $test['$init'] = $init; $test['$level'] = $level; echo '
' . print_r($test, true) . '
'; echo '
' . var_dump($test) . '
'; */ $coreTools = new core_tools(); $coreTools->manage_location_bar($pagePath, $pageLabel, $pageId, $init, $level); return $pagePath; } /* ----------------------- - test and retrieve params ----------------------- */ function testParams() { /* ----------------------------------- - Initialise array with default values ----------------------------------- */ $params = array( 'status' => 'OK', 'mode' => 'list', 'pageNb' => 1, 'isApps' => false, ); $error = false; /* ------------------ - Test some $_REQUEST ------------------ */ if (isset($_REQUEST['mode']) && !empty($_REQUEST['mode'])) $params['mode'] = $_REQUEST['mode']; if (isset($_REQUEST['objectName']) && !empty($_REQUEST['objectName'])) $params['objectName'] = $_REQUEST['objectName']; else $error .= _OBJECT_NAME_MANDATORY . '
'; if (isset($_REQUEST['page']) && !empty($_REQUEST['page'])) $params['pageName'] = $_REQUEST['page']; else $error .= _PAGE_NAME_MANDATORY . '
'; if (isset($_REQUEST['objectId']) && !empty($_REQUEST['objectId'])) $params['objectId'] = $_REQUEST['objectId']; if (isset($_REQUEST['pageNb']) && !empty($_REQUEST['pageNb'])) $params['pageNb'] = $_REQUEST['pageNb']; if (isset($_REQUEST['admin']) && !empty($_REQUEST['admin'])) { $params['isApps'] = true; $params['viewLocation'] = 'apps/maarch_entreprise/admin/' . $_REQUEST['admin']; $params['schemaPath'] = $params['viewLocation'] . DIRECTORY_SEPARATOR . 'schema' . DIRECTORY_SEPARATOR . $_REQUEST['admin'] . '.xsd'; $params['autocompletePath'] = $_SESSION['config']['businessappurl'] . 'index.php?display=true&admin=' . $_REQUEST['admin'] . '&page=' . $params['objectName'] . '_list_autocomplete'; } elseif (isset($_REQUEST['module']) && !empty($_REQUEST['module'])) { $params['viewLocation'] = 'modules' . DIRECTORY_SEPARATOR . $_REQUEST['module']; $params['schemaPath'] = $params['viewLocation'] . DIRECTORY_SEPARATOR . 'schema' . DIRECTORY_SEPARATOR . $_REQUEST['module'] . '.xsd'; $params['autocompletePath'] = $_SESSION['config']['businessappurl'] . 'index.php?display=true&module=' . $_REQUEST['module'] . '&page=' . $params['objectName'] . '_list_autocomplete'; } if (isset($_REQUEST['order']) && !empty($_REQUEST['order'])) $params['order'] = $_REQUEST['order']; if (isset($_REQUEST['orderField']) && !empty($_REQUEST['orderField'])) $params['orderField'] = $_REQUEST['orderField']; if (isset($_REQUEST['what']) && !empty($_REQUEST['what'])) $params['what'] = $_REQUEST['what']; /* ----- - return ----- */ if ($error) exit($error); else return $params; } /** * Initialize session variables * @param string $objectName */ function initSession($objectName) { $_SESSION['m_admin'][$objectName] = false; } /** * Initialize session Object with form values * @param string $objectName */ function updateObject($request, $object) { foreach($object as $key => $value) { $object->$key = $request[$key]; } } /** * Initialize session parameters for add display with given objectName * @param string $objectName */ function displayAdd($objectName) { if (!isset($_SESSION['m_admin'][$objectName])) initSession(); } /** * Destroy session parameters for create display * @param $objectName */ function displayCreate($objectName) { clearSession($objectName); } /** * Initialize session parameters for read display * @param $objectId */ function displayRead($objectName, $object) { putInSession($objectName, $object); } /** * Initialize session parameters for update display * @param $objectId */ function displayUpdate($objectName, $object) { putInSession($objectName, $object); } /** * Put given object in session, according with given object * NOTE: given object needs to be at least hashable * @param string $objectName * @param object $object */ function putInSession($objectName, $object) { $_SESSION['m_admin'][$objectName] = $object->asXml(); } /** * Clear the object in session * @param string $objectName */ function clearSession($objectName) { $_SESSION['m_admin'][$objectName] = false; } function displayList($objectList, $actions, $showCols, $pageNb, $keyProperties) { } /** * Load hidden fields in the CRUD form * @param string $objectName * @param string $hiddenFields */ function loadHiddenFields($params) { $hiddenFields = ''; $hiddenFields .= ''; $hiddenFields .= ''; $hiddenFields .= ''; if (isset($params['order'])) { $hiddenFields .= ''; } if (isset($params['orderField'])) { $hiddenFields .= ''; } if (isset($params['what'])) { $hiddenFields .= ''; } return $hiddenFields; } function isBoolean($string) { if ($string == 'Y') { $return = ''; } elseif($string == 'N') { $return = ''; } return $return; } function getLabel($constant) { if (!defined($constant)) return $constant; else return constant($constant); } //getDependantUri function getDependantUri($get, $uri) { $getValue = str_replace( ' ', '%20', $_REQUEST[$get] ); $toSearch = $get . '=' . $getValue; $sourceArray = array( '?'.$toSearch . '&', '&'.$toSearch, ); $targetArray = array( '?', '', ); $return = str_replace( $sourceArray, $targetArray, $uri ); return $return; } $coreTools = new core_tools(); $coreTools->load_lang(); //tests and retrieve params of the controller page $params = testParams(); //test if the user is allowed to acces the admin service if ($isApps) $coreTools->test_admin( 'admin_' . $params['objectName'], 'apps' ); else $coreTools->test_admin( 'admin_' . $params['objectName'], 'entities' ); $pagePath = locationBarManagement( $params['pageName'], $params['mode'], $params['objectName'], $params['isApps'] ); //load the message object $messagePath = $params['viewLocation'] . '/lang/' . $params['objectName'] . '.xml'; $messageController->loadMessageFile( $messagePath ); require_once( 'core/tests/class/DataObjectController.php' ); $dataObjectController = new DataObjectController(); $dataObjectController->loadXSD( $params['schemaPath'] ); if (isset($_REQUEST['submit'])) { $dataObject = $dataObjectController->loadXML( $_SESSION['m_admin'][$params['objectName']] ); //fill the object with the request updateObject( $_REQUEST, $dataObject ); //validate the object $validateObject = $dataObjectController->validate( $dataObject ); if ($validateObject) { $dataObjectController->save( $dataObject ); } else { foreach($dataObjectController->getValidationErrors() as $error) { $errors[] = $error->message; } $_SESSION['error'] = implode('
', $errors); $url = $_SERVER['REQUEST_URI']; $url = str_replace( array( '?display=true&', '&display=true' ), array( '?', '' ), $url ); $_SESSION['m_admin'][$params['objectName']] = $dataObject->asXml(); header("Location: ".$url); } exit; } else { //CRUDL CASES switch ($params['mode']) { case 'create' : /* ----- - CREATE ----- */ $dataObject = $dataObjectController->create($params['objectName']); displayCreate($params['objectName']); break; case 'details' : /* ------ - DETAILS ------ */ $dataObject = $dataObjectController->read( $params['objectName'], $params['objectId'] ); break; case 'read' : /* --- - READ --- */ $dataObject = $dataObjectController->read( $params['objectName'], $params['objectId'] ); break; case 'update' : /* ----- - UPDATE ----- */ if (!$_SESSION['m_admin'][$params['objectName']]) { $dataObject = $dataObjectController->read( $params['objectName'], $params['objectId'] ); $_SESSION['m_admin'][$params['objectName']] = $dataObject->asXml(); } else { $dataObject = $dataObjectController->loadXML( $_SESSION['m_admin'][$params['objectName']] ); } break; case 'delete' : /* ----- - DELETE ----- */ break; //TODO: PROCESS IT LIKE PARTICULAR CASES OF UPDATE case 'allow' : doEnable($docserverId); break; case 'ban' : doDisable($docserverId); break; case 'list' : /* --- - LIST --- */ clearSession($params['objectName']); /* --------- - set filter --------- */ if (isset($params['what']) && !empty($params['what'])) $filter = str_replace( '|', '%', $params['what'] ); /* -------------- - load dataObject -------------- */ if ($enumerateInView === true) $toEnumerate = $params['objectName'] . '_view'; else $toEnumerate = $params['objectName']; $objectList = $dataObjectController->enumerate( $toEnumerate, $filter, $sortFields = $params['orderField'], $order = $params['order'] ); /* ------ - get key ------ */ $keyProperties = $dataObjectController->getKeyProperties( $toEnumerate ); /* ----------------- - prevent PHP NOTICE ----------------- */ $str_filter = ''; $str_pagination = ''; $str_htmlList = ''; $str_goToTop = ''; /* ---------- - request uri ---------- */ $requestUri = $_SERVER['REQUEST_URI']; /* ----- - filter ----- */ $noWhatUri = getDependantUri( 'what', getDependantUri( 'pageNb', $requestUri ) ); /* ------ - filters ------ */ $alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $str_filter .= ' 1) { $str_pagination .= '= $nbMax) { break; } $default_nbLineSelect = ''; if ($nbLineSelect[$cpt_nbElement] == $nbLine) { $default_nbLineSelect = 'selected="selected" '; } $str_pagination .= '
$labelColumn) { $keyColumn = $labelId; $cssHeaderColumn = ''; if (isset($showCols[$keyColumn]['cssStyle'])) { $cssHeaderColumn = $showCols[$keyColumn]['cssStyle']; } $str_htmlList .= 'getProperties() as $propertyName => $propertyValue) { $json[$propertyName] = $propertyValue; } foreach ($showCols as $propertyName => $colParams) { $propertyValue = (string)$object->$propertyName; $cssColumn = ''; if (isset($colParams['cssStyle'])) { $cssColumn = $colParams['cssStyle']; } if (isset($colParams['functionFormat']) && !empty($colParams['functionFormat'])) { $functionFormat = $colParams['functionFormat']; $propertyValue = call_user_func($functionFormat, $propertyValue); } elseif (substr($_REQUEST['what'], 0, 1) == '|') { $surligneWhat = strtoupper( str_replace( '|', '', $_REQUEST['what'] ) ); $replaceWith = ' 0) { foreach($json as $keyJSON => $valueJSON) { $encodeJSON .= "'".str_replace("'", "\'", $keyJSON)." '"; $encodeJSON .= ' : '; if (DIRECTORY_SEPARATOR != '/') { $valueJSON = str_replace( DIRECTORY_SEPARATOR, DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR, $valueJSON ); } $encodeJSON .= "'".str_replace("'", "\'", $valueJSON)." '"; $encodeJSON .= ', '; } } $encodeJSON = substr( $encodeJSON, 0, -2 ); $encodeJSON .= '}'; $str_htmlList .= '
$nbEnd)) { $cssClass_tr = 'style="'; $cssClass_tr .= 'background-color: #DEEDF3; '; $cssClass_tr .= '" '; if (($cpt_line-$nbStart)%2 == 0) { $cssClass_tr = 'style="'; $cssClass_tr .= 'background-color: #93D1E4;'; $cssClass_tr .= '" '; } $str_htmlList .= '
$keyName; } $key = implode(' ', $keyValues); //action read if (in_array('read', $actions)) { $str_htmlList .= '