Files
le-matelot/client/plugins/paginationRubrique/PaginationRubrique.class.php
2020-01-27 08:56:08 +01:00

321 lines
8.9 KiB
PHP

<?php
class PaginationRubrique extends PluginsClassiques{
function PaginationRubrique(){
$this->PluginsClassiques("paginationRubrique");
}
/*
* Boucle page par defaut de Thelia modifiée pour l'utilisation sur des rubriques
*/
function bouclePaginationRubrique($texte, $args){
global $page, $id_rubrique;
// récupération des arguments
$num = lireTag($args, "num", "int");
$courante = lireTag($args, "courante", "int");
$pagecourante = lireTag($args, "pagecourante", "int");
$typeaff = lireTag($args, "typeaff", "int");
$max = lireTag($args, "max", "int");
$affmin = lireTag($args, "affmin", "int");
$avance = lireTag($args, "avance", "string");
$i="";
if( $page<=0) $page=1;
$bpage=$page;
$res="";
$cnx = new Cnx();
$query = $this->boucleRubrique($texte, str_replace("rubrique", "parent", $args), 1);
if($query != ""){
$pos = strpos($query, "limit");
if($pos>0) $query = substr($query, 0, $pos);
$resul = $cnx->query($query);
$nbres = $cnx->num_rows($resul);
}
else $nbres = 0;
$page = $bpage;
$nbpage = $num ? ceil($nbres/$num) : 0;
if($page+1>$nbpage) $pagesuiv=$page;
else $pagesuiv=$page+1;
if($page-1<=0) $pageprec=1;
else $pageprec=$page-1;
if($nbpage<$affmin) return;
if($nbpage == 1) return;
if($typeaff == 1){
if(!$max) $max=$nbpage+1;
if($page && $max && $page>$max) $i=ceil(($page)/$max)*$max-$max+1;
if($i == 0 ) $i=1;
$fin = $i+$max;
for( ; $i<$nbpage+1 && $i<$fin; $i++ ){
$temp = str_replace("#PAGE_NUM", "$i", $texte);
$temp = str_replace("#PAGE_SUIV", "$pagesuiv", $temp);
$temp = str_replace("#PAGE_PREC", "$pageprec", $temp);
$temp = str_replace("#RUBRIQUE", "$id_rubrique", $temp);
if($pagecourante && $pagecourante == $i){
if($courante =="1" && $page == $i ) $res .= $temp;
else if($courante == "0" && $page != $i ) $res .= $temp;
else if($courante == "") $res .= $temp;
}
else if(!$pagecourante) $res .= $temp;
}
}
else if($typeaff == "0" && ($avance == "precedente" && $pageprec != $page)){
$temp = str_replace("#PAGE_NUM", "$page", $texte);
$temp = str_replace("#PAGE_PREC", "$pageprec", $temp);
$temp = str_replace("#RUBRIQUE", "$id_rubrique", $temp);
$res .= $temp;
}
else if($typeaff == "0" && ($avance == "suivante" && $pagesuiv != $page)){
$temp = str_replace("#PAGE_NUM", "$page", $texte);
$temp = str_replace("#PAGE_SUIV", "$pagesuiv", $temp);
$temp = str_replace("#RUBRIQUE", "$id_rubrique", $temp);
$res .= $temp;
}
else if($typeaff == "0" && $avance == ""){
$temp = str_replace("#PAGE_NUM", "$page", $texte);
$temp = str_replace("#PAGE_SUIV", "$pagesuiv", $temp);
$temp = str_replace("#PAGE_PREC", "$pageprec", $temp);
$temp = str_replace("#RUBRIQUE", "$id_rubrique", $temp);
$res .= $temp;
}
else if($typeaff == "2"){
if(!$deb) $deb=0;
if($page) $_SESSION['navig']->page = $page;
if(!$page || $page==1 ) $page=0;
if(!$totbloc) $totbloc=1;
if($page) $deb = ($page-1)*$totbloc*$num+$deb;
$fin = $deb + $num;
$query = str_replace("*","count(*) as max",$query);
$resul = $cnx->query($query);
$max = $cnx->get_result($resul,0,"max");
if($fin > $max) $fin=$max;
$temp = str_replace("#DEBUT",$deb,$texte);
$temp = str_replace("#FIN",$fin,$temp);
$temp = str_replace("#MAX",$max,$temp);
$res .= $temp;
}
return $res;
}
/*
* Boucle rubrique par defaut de Thelia modifiée afin qu'elle prenne en compte la substitution de pagination
*/
function boucleRubrique($texte, $args, $type = 0){
global $id_rubrique;
// récupération des arguments
$id = lireTag($args, "id", "int_liste");
$parent = lireTag($args, "parent", "int_liste");
$courante = lireTag($args, "courante", "int");
$pasvide = lireTag($args, "pasvide", "int");
$ligne = lireTag($args, "ligne", "int");
$lien = lireTag($args, "lien", "string+\/-\s\.\,;");
$classement = lireTag($args, "classement", "string");
$aleatoire = lireTag($args, "aleatoire", "int");
$exclusion = lireTag($args, "exclusion", "int_liste");
$deb = lireTag($args, "deb", "int");
$num = lireTag($args, "num", "int");
$_SESSION['debut_pagination_rubrique'] = $num;
$niveau = lireTag($args, "niveau", "int");
$res="";
$search="";
$limit="";
if(!$deb) $deb=0;
$rubrique = new Rubrique();
$rubriquedesc = new Rubriquedesc();
// preparation de la requete
if($ligne == "") $ligne="1";
$search.=" and $rubrique->table.ligne=\"$ligne\"";
if($id!="") $search.=" and $rubrique->table.id in ($id)";
if($parent!="") $search.=" and $rubrique->table.parent in ($parent)";
if($type == 0){
if($courante == "1") $search .=" and $rubrique->table.id='$id_rubrique'";
else if($courante == "0") $search .=" and $rubrique->table.id!='$id_rubrique'";
}
if($num!="") $limit .= " limit $deb,$num";
if($exclusion!="") $search .= " and $rubrique->table.id not in($exclusion)";
if($lien!="") $search.=" and $rubrique->table.lien in ($lien)";
if($niveau != "" && $parent != ""){
if($id_rubrique == "")
return "";
$tab = chemin_rub($id_rubrique);
$trouve = 0;
for($i=0; $i < count($tab); $i ++)
if($parent == $tab[$i]->rubrique)
$trouve = 1;
if(! $trouve)
return "";
}
if (ActionsLang::instance()->get_action_si_trad_absente() == ActionsLang::UTILISER_LANGUE_INDIQUEE) {
// On retourne uniquement les rubriques traduites
$search .= " and $rubriquedesc->table.id is not null";
}
if($aleatoire) $order = "order by " . " RAND()";
else if($classement == "alpha") $order = "order by $rubriquedesc->table.titre";
else if($classement == "alphainv") $order = "order by $rubriquedesc->table.titre desc";
else if($classement == "inverse") $order = "order by $rubrique->table.classement desc";
else $order = "order by $rubrique->table.classement";
$query = "
select
$rubrique->table.id
from
$rubrique->table
left join
$rubriquedesc->table on ($rubrique->table.id=$rubriquedesc->table.rubrique and $rubriquedesc->table.lang=".ActionsLang::instance()->get_id_langue_courante().")
where
1 $search
$order
$limit";
// substitutions
if($type) return $query;
$resul = CacheBase::getCache()->query($query);
$compt = 1;
if(empty($resul)) return ""; else $nbres = count($resul);
foreach($resul as $row){
$rubrique = new Rubrique();
$rubrique->charger($row->id);
$nbenfant = 0;
if($pasvide != ""){
$rec = arbreBoucle($rubrique->id);
$rec=rtrim($rec, ",");
if($rec) $virg=",";
else $virg="";
$tmprod = new Produit();
$query4 = "select count(id) as nbres from $tmprod->table where rubrique in('" . $rubrique->id . "'$virg$rec) and ligne='1'";
$resul4 = CacheBase::getCache()->query($query4);
if(!$resul4[0]->nbres) continue;
}
$rubriquedesc = new Rubriquedesc();
$rubriquedesc->charger($rubrique->id);
$query3 = "select count(id) as nbres from $rubrique->table where 1 and parent=\"$rubrique->id\"";
$resul3 = CacheBase::getCache()->query($query3);
if($resul3[0]->nbres) $nbenfant = $resul3[0]->nbres;
else $nbenfant = 0;
$temp = str_replace("#TITRE", "$rubriquedesc->titre", $texte);
$temp = str_replace("#STRIPTITRE", strip_tags($rubriquedesc->titre), $temp);
$temp = str_replace("#CHAPO", "$rubriquedesc->chapo", $temp);
$temp = str_replace("#STRIPCHAPO", strip_tags($rubriquedesc->chapo), $temp);
$temp = str_replace("#DESCRIPTION", "$rubriquedesc->description", $temp);
$temp = str_replace("#POSTSCRIPTUM", "$rubriquedesc->postscriptum", $temp);
$temp = str_replace("#PARENT", "$rubrique->parent", $temp);
$temp = str_replace("#ID", "$rubrique->id", $temp);
$temp = str_replace("#URL", $rubriquedesc->getUrl(), $temp);
$temp = str_replace("#REWRITEURL", $rubriquedesc->getUrl(), $temp);
$temp = str_replace("#LIEN", "$rubrique->lien", $temp);
$temp = str_replace("#COMPT", "$compt", $temp);
$temp = str_replace("#NBRES", "$nbres", $temp);
$temp = str_replace("#NBENFANT", "$nbenfant", $temp);
$compt ++;
if(trim($temp) !="") $res .= $temp;
}
return $res;
}
/*
* Boucle du plugin
* Si le type de la boucle est paginationrubrique, on utilise bouclePaginationRubrique
* Si le type de la boucle est rubrique, on utilise boucleRubrique
*/
function boucle($texte, $args){
$boucle = lireTag($args, 'boucle', 'string');
switch ($boucle) {
case 'paginationrubrique':
return $this->bouclePaginationRubrique($texte, $args);
break;
case 'rubrique':
return $this->boucleRubrique($texte, $args);
break;
}
}
/*
* Création de la substitution #DEBUT_PAGINATION_RUBRIQUE
* Cette substitution permet de passer la pagination à la boucle de listing
*/
function action(){
global $res;
$res = str_replace('#DEBUT_PAGINATION_RUBRIQUE', isset($_REQUEST['page']) ? (($_REQUEST['page'] * $_SESSION['debut_pagination_rubrique']) - $_SESSION['debut_pagination_rubrique']) : '', $res);
}
}