* @version 1.0
*
* @package nav
*/
/* Interfacciamento con il DB */
include_once ("fileadmin/php/db/DBManager.inc");
/* Configurazione di installazione */
include_once ("fileadmin/php/install/InstallConfig.inc");
/* Utility generali */
include_once ("fileadmin/php/Utilities.inc");
/* Gestione della sessione */
include_once ("fileadmin/php/SessionManager.inc");
/* Classe per la gestione della visualizzazione della lista delle opere.
NB: è necessaria l'aggiunta del prefisso '_user' al nome della classe
per il corretto utilizzo della stessa all'interno di TypoScript. */
class user_WorksView {
/* Reference to the parent (calling) cObj set from TypoScript */
var $cObj;
/**
* Funzione di utilità per la costruzione della lista delle opere di una sezione o di una sottosezione.
*
* @param dbManager $dbManager gestore del DB (per riferimento)
* @param string $sectionSign sigla di sezione a cui appartengono le opere
* @param string $sectionMainType sigla di sezione principale
* @param int $lang lingua corrente
*
* @return string risultato in XHTML
*/
private function getSectionWorkList(&$dbManager, $sectionSign, $sectionMainType, $lang) {
/* Memorizzazione output */
$output = "";
/* Costruzione query per la richiesta delle opere presenti */
$workListQS = "SELECT * "
. "FROM `" . DBConfig::WORKS_TABLE . "` "
. "WHERE `sectionSign` = '" . $sectionSign . "' "
. "ORDER BY `author`, `title` ASC";
/* Esecuzione query per la richiesta delle opere presenti */
$dbManager->submitQuery($workListQS);
/* Test se ci sono opere per la sezione corrente */
if ( $dbManager->countRows() > 0 ) {
/* Script per visualizzare la TOC, usato nei link di ogni opera */
$TOCViewScript = "";
switch ( $sectionMainType ) {
case "dante" : $TOCViewScript = InstallConfig::TOC_VIEW_SCRIPT_DANTE; break;
case "fonti" : $TOCViewScript = InstallConfig::TOC_VIEW_SCRIPT_FONTI; break;
case "lociParalleli" : $TOCViewScript = InstallConfig::TOC_VIEW_SCRIPT_LOCI; break;
}
/* Ciclo sulle opere presenti */
$output .= "
\n";
}
return $output;
} // fine getSectionWorkList(...)
/**
* Funzione principale per la visualizzazione della lista delle opere appartenente ad una tipologia principale.
*
* @param string $content contenuto della pagina chiamante Typo3
* @param array $conf parametri in input da Typo3
* - sectionMainType: tipo principale delle sezioni
*
* @return string log in XHTML del risultato delle operazioni
*/
public function showList($content, $conf) {
/* Oggetto globale TypoScript del FrontEnd */
global $TSFE;
/* Disabilita la cache */
$TSFE->set_no_cache();
/* Variabile per la bufferizzazione dell'output */
$outputBuffer = "";
/* Informazioni script chiamante */
$siteScript = $TSFE->siteScript;
$parseSiteScript = parse_url($siteScript);
$siteScriptQuery = array();
parse_str($parseSiteScript["query"], $siteScriptQuery);
/* Parametri globali */
$lang = strlen($siteScriptQuery["L"]) > 0 ? $siteScriptQuery["L"] : 0;
$sectionMainType = $conf["sectionMainType"];
// $group = 1;
// $subgroup = 1;
// $subgroupLength = InstallConfig::INDEX_SUBGROUP_LENGTH;
// $pageViewScript = "null";
// $navBarFile = ConcatPath( InstallConfig::INSTALL_OUT_PATH, $lang . "_" . InstallConfig::INDEX_INFO_FILE );
// $session = new SessionManager(InstallConfig::TMP_PATH);
// $sessionGroup = $lang . InstallConfig::SESSION_INDEX_GROUP;
// $sessionSubgroup = $lang . InstallConfig::SESSION_INDEX_SUBGROUP;
// $printListMode = "standard";
// /* Reset dei parametri di sessione in caso di inizio navigazione */
// if ( array_key_exists("start", $siteScriptQuery) ) {
// $session->deleteParam($sessionGroup);
// $session->deleteParam($sessionSubgroup);
// }
//
// /* Aggiornamento gruppo e sottogruppo, se necessario */
// if ( array_key_exists("group", $siteScriptQuery) )
// $group = $siteScriptQuery["group"];
// else if ( $session->existsParam($sessionGroup) )
// $group = $session->getParam($sessionGroup);
//
// if ( array_key_exists("subgroup", $siteScriptQuery) )
// $subgroup = $siteScriptQuery["subgroup"];
// else if ( $session->existsParam($sessionSubgroup) )
// $subgroup = $session->getParam($sessionSubgroup);
try {
/* Istanza dei gestori del DB */
$dbManager = new DBManager();
$dbManager2 = new DBManager();
$dbManager3 = new DBManager();
/* ================================================================ */
/* COSTRUZIONE LISTA DELLE OPERE DIVISE IN MAX 2 SOTTO-LIVELLI */
/* ================================================================ */
/* Campo nome della sezione dipendente dalla lingua */
$sectionNameField = ( $lang == 0 ? "name_it" : "name_en" );
/* Costruzione query per la richiesta del primo sottolivello delle sezioni */
$firstSubLevelQS = "SELECT * "
. "FROM `" . DBConfig::SECTIONS_TABLE . "` "
. "WHERE `parentSign` = '" . $sectionMainType . "' "
. "ORDER BY `" . $sectionNameField . "` ASC";
/* Esecuzione query per la richiesta del primo sottolivello delle sezioni */
$dbManager->submitQuery($firstSubLevelQS);
if ( $dbManager->countRows() == 0 ) {
/* Stampa delle opere presenti */
$outputBuffer .= $this->getSectionWorkList($dbManager, $sectionMainType, $sectionMainType, $lang);
} else {
/* Ciclo sul primo sotto-livello */
while ( $firstSLSection = $dbManager->fetchAssoc() ) {
/* Acquisizione e stampa del nome del sottolivello */
$firstSLSectionName = $firstSLSection[$sectionNameField];
$outputBuffer .= " " . $firstSLSectionName . "
\n";
/* Costruzione query per la richiesta del secondo sottolivello delle sezioni */
$secondSubLevelQS = "SELECT * "
. "FROM `" . DBConfig::SECTIONS_TABLE . "` "
. "WHERE `parentSign` = '" . $firstSLSection["sign"] . "' "
. "ORDER BY `" . $sectionNameField . "` ASC";
/* Esecuzione query per la richiesta del secondo sottolivello delle sezioni */
$dbManager2->submitQuery($secondSubLevelQS);
if ( $dbManager2->countRows() == 0 ) {
/* Stampa delle opere presenti */
$outputBuffer .= $this->getSectionWorkList($dbManager2, $firstSLSection["sign"], $sectionMainType, $lang);
} else {
/* Ciclo sul secondo sotto-livello */
$outputBuffer .= " \n";
while ( $secondSLSection = $dbManager2->fetchAssoc() ) {
/* Acquisizione e stampa del nome del sottolivello */
$secondSLSectionName = $secondSLSection[$sectionNameField];
$outputBuffer .= " - " . $secondSLSectionName . "\n";
/* Stampa delle opere presenti */
$outputBuffer .= $this->getSectionWorkList($dbManager3, $secondSLSection["sign"], $sectionMainType, $lang);
$outputBuffer .= "
\n";
}
$outputBuffer .= "
\n";
}
} // fine ciclo primo sotto-livello
}
/* Pulizia memoria */
unset($dbManager3);
unset($dbManager2);
unset($dbManager);
} catch (DBException $e) {
$outputBuffer .= $e->getMessage();
}
// /* Salvataggio nella sessione di gruppo e sottogruppo */
// $session->addParam($sessionGroup, $group);
// $session->addParam($sessionSubgroup, $subgroup);
// /* Chiusura sessione */
// unset($session);
/* Aggiornamento del contenuto della pagina */
return $outputBuffer;
} // fine showList(...)
/**
* Funzione principale per la visualizzazione della TOC di un'opera.
*
* @param string $content contenuto della pagina chiamante Typo3
* @param array $conf parametri in input da Typo3
* - workSignExp: espressione per ricavare la sigla dell'opera
* - sectionMainType: tipo principale delle sezioni
*
* @return string risultato in XHTML
*/
public function workTOC($content, $conf) {
/* Oggetto globale TypoScript del FrontEnd */
global $TSFE;
/* Disabilita la cache */
$TSFE->set_no_cache();
/* Variabile per la bufferizzazione dell'output */
$outputBuffer = "";
/* Informazioni script chiamante */
$siteScript = $TSFE->siteScript;
$parseSiteScript = parse_url($siteScript);
$siteScriptQuery = array();
parse_str($parseSiteScript["query"], $siteScriptQuery);
/* Parametri in input */
$workSign = $this->cObj->getData($conf["workSignExp"], "");
/* Sessione di navigazione */
$session = new SessionManager( InstallConfig::TMP_PATH );
/* Aggiornamento sigla opera dalla sessione, se necessario */
if ( strlen($workSign) == 0 && $session->existsParam( InstallConfig::SESSION_TOC_WORK_SIGN ) )
$workSign = $session->getParam( InstallConfig::SESSION_TOC_WORK_SIGN );
/* Lingua corrente */
$lang = strlen($siteScriptQuery["L"]) > 0 ? $siteScriptQuery["L"] : 0;
try {
/* Istanza dei gestori del DB */
$dbManager = new DBManager();
/* ============================================== */
/* STAMPA DELLA TOC */
/* ============================================== */
/* Script per visualizzare la TOC, usato nei link di ogni opera */
$pageViewScript = "";
switch ( $conf["sectionMainType"] ) {
case "dante" : $pageViewScript = InstallConfig::PAGE_VIEW_SCRIPT_DANTE; break;
case "fonti" : $pageViewScript = InstallConfig::PAGE_VIEW_SCRIPT_FONTI; break;
case "lociParalleli" : $pageViewScript = InstallConfig::PAGE_VIEW_SCRIPT_LOCI; break;
}
/* Costruzione query per la richiesta delle divisioni strutturali che compongono la TOC */
$textDivsQS = "SELECT * "
. "FROM `" . DBConfig::TEXT_DIVISIONS_TABLE . "` "
. "WHERE `workSign` = '" . $workSign . "' "
. "ORDER BY `id` ASC";
/* Esecuzione query per la richiesta delle divisioni strutturali che compongono la TOC */
$dbManager->submitQuery($textDivsQS);
/* Ciclo sulle divisioni strutturali */
while ( $textDiv = $dbManager->fetchAssoc() ) {
/* Livello della divisione corrente */
$currDivLevel = $textDiv["level"];
/* Spaziatura dal margine in base al livello */
$spacingStyle = $currDivLevel > 1 ? " style=\"padding-left:" . (($currDivLevel - 1) * 20) . "px\"" : "";
/* Aggiornamento output
$outputBuffer .= " " . $textDiv["head"]
. " - p. "
. $textDiv["pb"] . "
\n";
*/
$outputBuffer .= " " . $textDiv["head"];
if($textDiv["pb"]) $outputBuffer .= " - p. " . $textDiv["pb"] . "";
$outputBuffer .= "
\n";
}
/* ================================================== */
/* AGGIORNAMENTO TITOLO PAGINA DIRETTAMENTE SUL FE */
/* ================================================== */
/* Recupero delle informazioni sull'opera corrente */
$dbManager->submitQuery("SELECT * "
. "FROM `" . DBConfig::WORKS_TABLE . "` "
. "WHERE `sign` = '" . $workSign . "'");
$workInfo = $dbManager->fetchAssoc();
/* Aggiornamento titolo pagina */
$this->cObj->data["title"] = $workInfo["author"] . "
" . $workInfo["title"] . "";
/* Pulizia memoria */
unset($dbManager);
} catch (DBException $e) {
$outputBuffer .= $e->getMessage();
}
/* Salvataggio nella sessione della sigla dell'opera */
$session->addParam( InstallConfig::SESSION_TOC_WORK_SIGN, $workSign );
/* Chiusura sessione */
unset($session);
/* Aggiornamento del contenuto della pagina */
return $outputBuffer;
} // fine workTOC(...)
} // fine classe user_WorksView
?>