/** * Envoyer les notifications consecutives a l'envoi d'un message * (ie passage en statut=publie) * * @param string $quoi * @param int $id_message * @param array $options */ function notifications_instituermessage_dist($quoi, $id_message, $options = array()) { // ne devrait jamais se produire if ($options['statut'] == $options['statut_ancien']) { spip_log("statut inchange", 'notifications'); return; } if ($options['statut'] == 'publie') { include_spip('inc/messages'); $type = sql_getfetsel('type', 'spip_messages', 'id_message=' . intval($id_message)); $vue = "notifications/message_{$type}_publie"; if (trouver_fond($vue)) { $envoyer_mail = charger_fonction('envoyer_mail', 'inc'); // pour nettoyer_titre_email $texte = recuperer_fond($vue, array('id_message' => $id_message)); // recuperer tous les emails des auteurs qui ont recu le message dans leur boite // si c'est une annonce generale, on envoie a tout le monde include_spip('inc/messages'); $where = array("email!=''", "statut!='5poubelle'", sql_in('statut', messagerie_statuts_destinataires_possibles())); // pour une annonce : tous ceux qui recoivent des messages if ($type !== 'affich') { $ids = sql_allfetsel('id_auteur', 'spip_auteurs_liens', "objet='message' AND id_objet=" . intval($id_message)); $ids = array_map('reset', $ids); $where[] = sql_in('id_auteur', $ids); } $emails = sql_allfetsel('email', "spip_auteurs", $where); $emails = array_map('reset', $emails); include_spip('inc/notifications'); notifications_envoyer_mails($emails, $texte); } } }
/** * Autorisation d'ajout d'un evenement a un article * * @param string $faire * @param string $quoi * @param int $id * @param int $qui * @param array $options * @return bool */ function autoriser_article_creerevenementdans_dist($faire, $quoi, $id, $qui, $options) { if (!$id) { return false; // interdit de creer un evenement sur un article vide ! } // si on a le droit de modifier l'article alors on a peut-etre le droit d'y creer un evenement $afficher = false; if (autoriser('modifier', 'article', $id, $qui)) { $afficher = true; // un article avec des evenements a toujours le droit if (!sql_countsel('spip_evenements', array('id_article=' . intval($id)), sql_in('statut', array('prop', 'publie')))) { // si au moins une rubrique a le flag agenda if (sql_countsel('spip_rubriques', 'agenda=1')) { // alors il faut le flag agenda dans cette branche ! $afficher = false; include_spip('inc/rubriques'); $id_rubrique = sql_getfetsel('id_rubrique', 'spip_articles', 'id_article=' . intval($id)); if ($id_rubrique > 0) { // Rubriques classiques de SPIP $in = calcul_hierarchie_in($id_rubrique); $afficher = sql_countsel('spip_rubriques', sql_in('id_rubrique', $in) . ' AND agenda=1'); } else { // Rubrique négative utilisee dans le plugin Page unique $afficher = true; } } } } return $afficher; }
/** * Mettre a jour les liens objets/saisons. * si saisons vaut '', associe toutes les saisons a(aux) objets(s). * $ids est une liste d'id. * $type est le type de l'objet (assur, coti). * $operation = add/set/del pour ajouter, affecter uniquement, ou supprimer les objets listes dans ids. * * @param int/array $saisons * @param int/array $ids * @param string $type */ function adhclub_revision_adhsaison_objets_lies($saisons, $ids, $type, $operation = 'add') { include_spip('inc/autoriser'); $in = ""; if ($saisons) { $in = sql_in('id_saison', $saisons); } $liste = sql_allfetsel('id_saison', 'spip_adhsaisons', $in); foreach ($liste as $row) { if ($operation == 'del') { // on supprime les ids listes //sql_delete("spip_{$type}s",array("id_saison=".intval($row['id_saison']),sql_in("id_$type",$ids))); //sql_delete("spip_{$type}s",array("id_saison=".intval($row['id_saison']),sql_in("id_$type",$ids))); } else { if (!$ids) { $ids = array(); } elseif (!is_array($ids)) { $ids = array($ids); } // si c'est une affectation exhaustive, supprimer les existants qui ne sont pas dans ids // si c'est un ajout, ne rien effacer if ($operation == 'set') { //sql_delete("spip_adhassurs_{$type}s",array("id_saison=".intval($row['id_saison']),sql_in("id_$type",$ids,"NOT"))); //sql_delete("spip_adhcotis_{$type}s",array("id_saison=".intval($row['id_saison']),sql_in("id_$type",$ids,"NOT"))); } $deja = array_map('reset', sql_allfetsel("id_{$type}", "spip_{$type}s", "id_saison=" . intval($row['id_saison']))); $add = array_diff($ids, $deja); //foreach ($add as $id) { //if (autoriser('affectersaisons',$type,$id,null,array('id_saison'=>$row['id_saison']))) //sql_insertq("spip_saisons_{$type}s",array('maj'=>'NOW()','id_saison'=>$row['id_saison'],"id_$type"=>intval($id))); //} } } }
function action_documenter_post($r) { // - sign indique le portfolio image ou document, dans le cas de // la page exec=articles // - id est l'id_objet (id_article ou id_rubrique etc) // - type est 'article' (ou 'rubrique') // - id_document le doc a supprimer ou a delier de l'objet // SI VIDE, on supprime tous les documents du type SIGN // (bouton "supprimer tous les documents") list(, $sign, $id, $type, ,$id_document) = $r; if ($id_document) { supprimer_lien_document($id_document, $type, $id); } else { $obj = "id_objet=".intval($id)." AND objet=".sql_quote($type); $typdoc = sql_in('docs.extension', array('gif', 'jpg', 'png'), $sign ? '' : 'NOT'); $s = sql_select('docs.id_document AS id_doc', "spip_documents AS docs LEFT JOIN spip_documents_liens AS l ON l.id_document=docs.id_document", "$obj AND docs.mode='document' AND $typdoc"); while ($t = sql_fetch($s)) { supprimer_lien_document($t['id_doc'], $type, $id); } } if ($type == 'rubrique') { include_spip('inc/rubriques'); depublier_branche_rubrique_if($id); } }
function genie_ajouter_date_redac_articles_dist($t) { //spip_log("Mon travail c est juste une ligne de log....",_LOG_INFO_IMPORTANTE); // echo "1"; if ($resultats = sql_select("*", "spip_articles", "id_secteur=115 AND statut='publie' AND date_redac=0000-00-00")) { // boucler sur les resultats while ($res = sql_fetch($resultats)) { // utiliser les resultats // hierarchie des rubriques de l'article via la fonction de spip include_spip("inc/rubriques"); $hierarchie = calcul_hierarchie_in($res['id_rubrique'], true); // la date_numero et l'id_rubrique de la rubrique Numéro. $numero = sql_fetsel("date_numero,id_rubrique", "spip_rubriques", array(sql_in('id_rubrique', $hierarchie), 'profondeur=1')); // la date du numéro est à 0. On ne vérifie que l'année (?) if (substr($numero['date_numero'], 0, 4) == '0000') { spip_log("Article #" . $res['id_article'] . " : la date_redac n'a pas pu être modifiée. La rubrique #" . $numero['id_rubrique'] . " correspondant au numéro n'a pas de date valide.", 'vacarme_cron' . _LOG_INFO_IMPORTANTE); // return 1; // 0 ou 1 ? } else { spip_log("Mise à jour de l'article #" . $res['id_article'], 'vacarme_cron' . _LOG_INFO_IMPORTANTE); sql_updateq("spip_articles", array('date_redac' => $numero['date_numero']), "id_article=" . intval($res['id_article'])); // return 1; } } } return 1; }
function load_metadata() { $ids_array = $this->_get_path_objects_ids_array(); if (!count($ids_array)) { return false; } $sys_metadata_db_table =& db_table_factory::instance('sys_metadata'); $objects_metadata = $sys_metadata_db_table->get_list(sql_in('object_id', $ids_array), '', 'object_id'); if (!count($objects_metadata)) { return false; } $ids_array = array_reverse($ids_array); $got_keywords = false; $got_description = false; foreach ($ids_array as $object_id) { if ($got_keywords && $got_description) { break; } if (!$got_keywords && !empty($objects_metadata[$object_id]['keywords'])) { $this->object_metadata['keywords'] = $objects_metadata[$object_id]['keywords']; $got_keywords = true; } if (!$got_description && !empty($objects_metadata[$object_id]['description'])) { $this->object_metadata['description'] = $objects_metadata[$object_id]['description']; $got_description = true; } } return true; }
/** * Supprimer les révisions des objets disparus */ function optimiser_base_revisions() { /** * On commence par récupérer la liste des types d'objet ayant au moins une révision */ $objets_revises = sql_select('objet', 'spip_versions', 'id_version=1', 'objet'); /** * Pour chaque objet, on va contruire un tableau des identifiants disparus * On supprimera ensuite les occurences dans spip_versions et spip_versions_fragments */ while ($objet = sql_fetch($objets_revises)) { $in = array(); $table = table_objet_sql($objet['objet']); $id_table_objet = id_table_objet($objet['objet']); $res = sql_select("A.id_objet AS id_objet, A.objet AS objet", "spip_versions AS A LEFT JOIN {$table} AS R\n\t\t\t\t\t\t\tON R.{$id_table_objet}=A.id_objet AND A.objet=" . sql_quote($objet['objet']), "R.{$id_table_objet} IS NULL AND A.objet=" . sql_quote($objet['objet']) . " AND A.id_objet > 0", "A.id_objet", "A.id_objet"); while ($row = sql_fetch($res)) { $in[$row['id_objet']] = true; } sql_free($res); /** * Si on a un array * On supprime toute occurence des objets disparus dans : * -* spip_versions * -* spip_versions_fragments */ if ($in) { foreach (array('spip_versions', 'spip_versions_fragments') as $table) { sql_delete($table, sql_in('id_objet', array_keys($in)) . " AND objet=" . sql_quote($objet['objet'])); } } } }
function action_deplacer_objets_dist() { include_spip('inc/autoriser'); if (!autoriser('ecrire')) { return plan_json_erreur(_T("plan:erreur_autorisation_insuffisante") . " " . _T("plan:erreur_deplacement_impossible")); } include_spip('base/objets'); $objet = objet_type(_request('objet')); $table = table_objet_sql($objet); $_id_table = id_table_objet($table); $ids = _request('id_objet'); $id_rubrique_old = _request('id_rubrique_source'); $id_rubrique_new = _request('id_rubrique_destination'); if (!is_array($ids) or !$objet) { return plan_json_erreur(_T("plan:erreur_aucun_identifiant") . " " . _T("plan:erreur_deplacement_impossible")); } if ($id_rubrique_old == $id_rubrique_new) { return plan_json_erreur(_T("plan:erreur_rubriques_parentes_incorrectes") . " " . _T("plan:erreur_deplacement_impossible")); } if ($objet != 'rubrique' and !$id_rubrique_new) { return plan_json_erreur(_T("plan:erreur_rubriques_parentes_incorrectes") . " " . _T("plan:erreur_deplacement_impossible")); } $ids = array_filter($ids); if ($objet == 'rubrique') { $champ = 'id_parent'; } else { $champ = 'id_rubrique'; } // ne modifier que si les emplacements n'ont pas déjà changé ! $ids = sql_allfetsel($_id_table, $table, array(sql_in($_id_table, $ids), $champ . '=' . sql_quote($id_rubrique_old))); $ids = array_map('array_shift', $ids); include_spip('action/editer_objet'); $errors = $success = array(); $modifs = array('id_parent' => $id_rubrique_new); foreach ($ids as $id) { if (autoriser('modifier', $objet, $id)) { if ($err = objet_modifier($objet, $id, $modifs)) { $errors["{$objet}-{$id}"] = $err; } else { $success["{$objet}-{$id}"] = true; } } else { $errors["{$objet}-{$id}"] = _T("plan:erreur_autorisation_insuffisante") . " " . _T("plan:erreur_deplacement_impossible"); } } // dans certains cas… on ne reçoit pas d'erreur… et pourtant ! if (!$errors) { // on verifie qu'il n'y a plus d'objets à l'ancien emplacement $ids = sql_allfetsel($_id_table, $table, array(sql_in($_id_table, $ids), $champ . '=' . sql_quote($id_rubrique_old))); $ids = array_map('array_shift', $ids); if ($ids) { foreach ($ids as $id) { $errors["{$objet}-{$id}"] = _T("plan:erreur_deplacement"); unset($success["{$objet}-{$id}"]); } } } return plan_json_envoi(array('done' => true, 'success' => $success, 'errors' => $errors)); }
/** * Inserer les infos d'agenda sur les articles et rubriques * * @param array $flux * @return array */ function agenda_affiche_milieu($flux) { $e = trouver_objet_exec($flux['args']['exec']); $out = ""; if ($e['type'] == 'rubrique' and autoriser('configurer') and $e['edition'] == false and $id_rubrique = intval($flux['args']['id_rubrique']) and autoriser('modifier', 'rubrique', $id_rubrique)) { $activer = true; $res = ""; $actif = sql_getfetsel('agenda', 'spip_rubriques', 'id_rubrique=' . intval($id_rubrique)); $statut = "-32"; $alt = ""; $voir = ""; if (!sql_countsel('spip_rubriques', 'agenda=1')) { $res .= "<span class='small'>" . _T('agenda:aucune_rubrique_mode_agenda') . "</span><br />"; } else { include_spip('inc/rubriques'); if (sql_countsel('spip_rubriques', sql_in('id_rubrique', calcul_hierarchie_in($id_rubrique)) . " AND agenda=1 AND id_rubrique<>" . intval($id_rubrique))) { $alt = _T('agenda:rubrique_dans_une_rubrique_mode_agenda'); $activer = false; $statut = "-ok-32"; $voir = _T('agenda:voir_evenements_rubrique'); } elseif (!$actif) { $alt = _T('agenda:rubrique_sans_gestion_evenement') . '<br />'; $statut = "-non-32"; } if ($actif) { $alt = _T('agenda:rubrique_mode_agenda') . '<br />'; $statut = "-ok-32"; $voir = _T('agenda:voir_evenements_rubrique'); } } if (!$actif) { if ($activer) { $res .= bouton_action(_T('agenda:rubrique_activer_agenda'), generer_action_auteur('activer_agenda_rubrique', $id_rubrique, self()), 'ajax'); } } else { $res .= bouton_action(_T('agenda:rubrique_desactiver_agenda'), generer_action_auteur('activer_agenda_rubrique', "-{$id_rubrique}", self()), 'ajax'); } if ($voir) { $res .= " | <a href='" . generer_url_ecrire('evenements', "id_rubrique={$id_rubrique}") . "'>{$voir}</a>"; } if ($res) { $out .= boite_ouvrir(_T('agenda:agenda') . http_img_pack("agenda{$statut}.png", $alt, "class='statut'", $alt), 'simple agenda-statut') . $res . boite_fermer(); } } elseif ($e['type'] == 'article' and $e['edition'] == false) { $id_article = $flux['args']['id_article']; $out .= recuperer_fond('prive/objets/contenu/article-evenements', $flux['args']); } if ($out) { if ($p = strpos($flux['data'], '<!--affiche_milieu-->')) { $flux['data'] = substr_replace($flux['data'], $out, $p, 0); } else { $flux['data'] .= $out; } } return $flux; }
function BOUCLE_documenthtml_b8a8020987dd01f8087ad24f961857eb(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) { static $command = array(); static $connect; $command['connect'] = $connect = ''; $in = array(); if (!is_array($a = @$Pile[0]['mode'])) { $in[] = $a; } else { $in = array_merge($in, $a); } if (!isset($command['table'])) { $command['table'] = 'documents'; $command['id'] = '_document'; $command['from'] = array('documents' => 'spip_documents', 'L1' => 'spip_types_documents'); $command['type'] = array(); $command['groupby'] = array(); $command['select'] = array("documents.id_document", "L1.titre AS type_document", "documents.taille", "documents.mode", "documents.largeur", "documents.hauteur", "documents.titre", "L1.mime_type"); $command['orderby'] = array(); $command['join'] = array('L1' => array('documents', 'extension')); $command['limit'] = ''; $command['having'] = array(); } $command['where'] = array(array('(documents.taille > 0 OR documents.distant=\'oui\')'), array('=', 'documents.id_document', sql_quote(@$Pile[0]['id_document'], '', 'bigint(21) NOT NULL AUTO_INCREMENT')), !(is_array(@$Pile[0]['mode']) ? count(@$Pile[0]['mode']) : strlen(@$Pile[0]['mode'])) ? '' : (is_array(@$Pile[0]['mode']) ? sql_in('documents.mode', sql_quote($in)) : array('=', 'documents.mode', sql_quote(@$Pile[0]['mode'], '', 'varchar(10) NOT NULL DEFAULT \'document\'')))); if (defined("_BOUCLE_PROFILER")) { $timer = time() + microtime(); } $t0 = ""; // REQUETE $iter = IterFactory::create("SQL", $command, array('plugins-dist/medias/modeles/img.html', 'html_b8a8020987dd01f8087ad24f961857eb', '_document', 1, $GLOBALS['spip_lang'])); if (!$iter->err()) { $SP++; // RESULTATS while ($Pile[$SP] = $iter->fetch()) { $t0 .= ' ' . vide($Pile['vars'][$_zzz = (string) 'image'] = interdire_scripts(($a = match(entites_html(sinon(table_valeur(@$Pile[0], (string) 'mode_force', null), interdire_scripts($Pile[$SP]['mode'])), true), 'image|vignette') or is_string($a) and strlen($a)) ? $a : interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'embed', null), true)) ? ' ' : '')) . (($t1 = strval(table_valeur($Pile["vars"], (string) 'image', null))) !== '' ? $t1 . (' <span class=\'spip_document_' . $Pile[$SP]['id_document'] . ' spip_documents' . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'align', null), true)))) !== '' ? ' spip_documents_' . $t2 : '') . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'class', null), true)))) !== '' ? ' ' . $t2 : '') . ' spip_lien_ok\'' . (($t2 = strval(interdire_scripts(match(entites_html(table_valeur(@$Pile[0], (string) 'align', null), true), 'left|right')))) !== '' ? ' style=\'float:' . $t2 . ';\'' : '') . '> ' . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'lien', null), true)))) !== '' ? '<a href="' . $t2 . ('"' . (($t3 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'lien_class', null), true)))) !== '' ? ' class="' . $t3 . '"' : '') . '>') : '') . '<img src=\'' . vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_document'], 'document', '', '', true))) . '\'' . (($t2 = strval(interdire_scripts($Pile[$SP]['largeur']))) !== '' ? ' width="' . $t2 . '"' : '') . (($t2 = strval(interdire_scripts($Pile[$SP]['hauteur']))) !== '' ? ' height="' . $t2 . '"' : '') . ' alt="' . interdire_scripts(texte_backend(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))) . '"' . (($t2 = strval(interdire_scripts(texte_backend(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))))) !== '' ? ' title="' . $t2 . '"' : '') . ' />' . interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'lien', null), true) ? '</a>' : '') . '</span> ') : '') . (!table_valeur($Pile["vars"], (string) 'image', null) ? ' ' . (' ' . vide($Pile['vars'][$_zzz = (string) 'fichier'] = extraire_attribut(quete_logo_document(quete_document($Pile[$SP]['id_document'], ''), '', '', '', 0, 0, ''), 'src')) . ' ' . vide($Pile['vars'][$_zzz = (string) 'width'] = extraire_attribut(quete_logo_document(quete_document($Pile[$SP]['id_document'], ''), '', '', '', 0, 0, ''), 'width')) . ' ' . vide($Pile['vars'][$_zzz = (string) 'height'] = extraire_attribut(quete_logo_document(quete_document($Pile[$SP]['id_document'], ''), '', '', '', 0, 0, ''), 'height')) . ' <span class=\'spip_document_' . $Pile[$SP]['id_document'] . ' spip_documents' . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'align', null), true)))) !== '' ? ' spip_documents_' . $t2 : '') . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'class', null), true)))) !== '' ? ' ' . $t2 : '') . ' spip_lien_ok\'' . (($t2 = strval(interdire_scripts(match(entites_html(table_valeur(@$Pile[0], (string) 'align', null), true), 'left|right')))) !== '' ? ' style=\'float:' . $t2 . (';' . (($t3 = strval(table_valeur($Pile["vars"], (string) 'width', null))) !== '' ? ' width:' . $t3 . 'px;' : '') . '\'') : '') . '><a href="' . interdire_scripts(($a = entites_html(table_valeur(@$Pile[0], (string) 'lien', null), true) or is_string($a) and strlen($a)) ? $a : vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_document'], 'document', '', '', true)))) . '"' . (($t2 = strval(interdire_scripts(entites_html(table_valeur(@$Pile[0], (string) 'lien', null), true) ? '' : 'type="' . interdire_scripts($Pile[$SP]['mime_type']) . '"'))) !== '' ? ' ' . $t2 : '') . (($t2 = strval(interdire_scripts(texte_backend(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))))) !== '' ? ' title="' . $t2 . '"' : '') . '><img src=\'' . table_valeur($Pile["vars"], (string) 'fichier', null) . '\' width=\'' . table_valeur($Pile["vars"], (string) 'width', null) . '\' height=\'' . table_valeur($Pile["vars"], (string) 'height', null) . '\' alt=\'' . interdire_scripts(attribut_html(strlen(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0])) ? interdire_scripts(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0])) . ' {' . interdire_scripts($Pile[$SP]['type_document']) . '}' : interdire_scripts($Pile[$SP]['type_document']))) . '\' /></a></span> ') : ''); } $iter->free(); } if (defined("_BOUCLE_PROFILER") and 1000 * ($timer = time() + microtime() - $timer) > _BOUCLE_PROFILER) { spip_log(intval(1000 * $timer) . "ms BOUCLE_document @ plugins-dist/medias/modeles/img.html", "profiler" . _LOG_AVERTISSEMENT); } return $t0; }
function instituer_un_forum($statut,$row){ $id_forum = $row['id_forum']; $old = $row['statut']; // rien a faire si pas de changement de statut if ($old==$statut) return; // changer le statut de toute l'arborescence dependant de ce message $id_messages = array($id_forum); while ($id_messages) { sql_updateq("spip_forum", array("statut" => $statut), sql_in("id_forum", $id_messages) ." AND statut = '$old'"); $id_messages = array_map('reset',sql_allfetsel("id_forum", "spip_forum", sql_in("id_parent", $id_messages))); } // Notifier de la publication du message, s'il etait 'prop' if ($old=='prop' AND $statut=='publie') { if ($notifications = charger_fonction('notifications', 'inc')) { $notifications('forumvalide', $id_forum); } } // mettre a jour la date du thread // si publie, ou que tout le thread est prive, // mettre la date du thread a 'maintenant' (date de publi du message) // sinon prendre la date_heure du dernier message public // c'est imparfait dans le cas ou les crayons ont ete utilises pour modifier ce message entre temps // car la date_thread aurait cette derniere date alors que pas le message // mais c'est au mieux de ce que l'on peut faire quand on depublie un SPAM ou supprime un message if ($statut=='publie' OR $old=='publie') { if ($statut=='publie' OR !($date_thread = sql_getfetsel("date_heure", "spip_forum", "statut='publie' AND id_thread=".$row['id_thread'], "", "date_heure DESC","0,1"))){ $date_thread = date('Y-m-d H:i:s'); } sql_updateq("spip_forum", array("date_thread" => $date_thread), "id_thread=".$row['id_thread']); } // invalider les pages comportant ce forum include_spip('inc/invalideur'); include_spip('inc/forum'); $index_forum = calcul_index_forum($row['id_article'], $row['id_breve'], $row['id_rubrique'], $row['id_syndic']); suivre_invalideur("id='id_forum/$index_forum'"); // Reindexation du thread (par exemple) pipeline('post_edition', array( 'args' => array( 'table' => 'spip_forum', 'id_objet' => $id_forum, 'action' => 'instituer', ), 'data' => null ) ); }
/** * Fonction de désinstallation du plugin Livraison. * * @param string $nom_meta_base_version * Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP * @return void **/ function livraison_vider_tables($nom_meta_base_version) { livraison_generer_csv_installation(); sql_drop_table("spip_livraisonmodes"); # Nettoyer les versionnages et forums sql_delete("spip_versions", sql_in("objet", array('livraisonmode'))); sql_delete("spip_versions_fragments", sql_in("objet", array('livraisonmode'))); sql_delete("spip_forum", sql_in("objet", array('livraisonmode'))); effacer_meta($nom_meta_base_version); }
/** * Fonction de désinstallation du plugin Réseŕvations Crédits. * * Vous devez : * * - nettoyer toutes les données ajoutées par le plugin et son utilisation * - supprimer les tables et les champs créés par le plugin. * * @param string $nom_meta_base_version * Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP * @return void **/ function reservations_credits_vider_tables($nom_meta_base_version) { sql_drop_table("spip_reservation_credit_mouvements"); sql_drop_table("spip_reservation_credits"); # Nettoyer les versionnages et forums sql_delete("spip_versions", sql_in("objet", array('reservation_credit_mouvement', 'reservation_credit'))); sql_delete("spip_versions_fragments", sql_in("objet", array('reservation_credit_mouvement', 'reservation_credit'))); sql_delete("spip_forum", sql_in("objet", array('reservation_credit_mouvement', 'reservation_credit'))); effacer_meta($nom_meta_base_version); }
function critere_statut_controle_forum($type, $id_rubrique = 0, $recherche = '') { if (is_array($id_rubrique)) { $id_rubrique = join(',', $id_rubrique); } if (!$id_rubrique) { $from = 'spip_forum AS F'; $where = ""; $and = ""; } else { if (strpos($id_rubrique, ',')) { $eq = " IN ({$id_rubrique})"; } else { $eq = "={$id_rubrique}"; } $from = 'spip_forum AS F, spip_articles AS A'; $where = "A.id_secteur{$eq} AND F.objet='article' AND F.id_objet=A.id_article"; $and = ' AND '; } switch ($type) { case 'public': $and .= "F.statut IN ('publie', 'off', 'prop', 'spam') AND F.texte!=''"; break; case 'prop': $and .= "F.statut='prop'"; break; case 'spam': $and .= "F.statut='spam'"; break; case 'interne': $and .= "F.statut IN ('prive', 'privrac', 'privoff', 'privadm') AND F.texte!=''"; break; case 'vide': $and .= "F.statut IN ('publie', 'off', 'prive', 'privrac', 'privoff', 'privadm') AND F.texte=''"; break; default: $where = '0=1'; $and = ''; break; } if ($recherche) { # recherche par IP if (preg_match(',^\\d+\\.\\d+\\.(\\*|\\d+\\.(\\*|\\d+))$,', $recherche)) { $and .= " AND ip LIKE " . sql_quote(str_replace('*', '%', $recherche)); } else { include_spip('inc/rechercher'); if ($a = recherche_en_base($recherche, 'forum')) { $and .= " AND " . sql_in('id_forum', array_keys(array_pop($a))); } else { $and .= " AND 0=1"; } } } return array($from, "{$where}{$and}"); }
function BOUCLE_articleshtml_a80389532d86f8e6929960268237a0a8(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) { static $command = array(); static $connect; $command['connect'] = $connect = ''; $doublons_index = array(); // Initialise le(s) critère(s) doublons if (!isset($doublons[$d = 'articles'])) { $doublons[$d] = ''; } if (!isset($command['table'])) { $command['table'] = 'articles'; $command['id'] = '_articles'; $command['from'] = array('articles' => 'spip_articles'); $command['type'] = array(); $command['groupby'] = array(); $command['select'] = array("articles.date", "articles.lang", "articles.id_article", "articles.texte", "articles.descriptif", "articles.chapo", "articles.titre"); $command['orderby'] = array('articles.date DESC'); $command['join'] = array(); $command['limit'] = '0,3'; $command['having'] = array(); } $command['where'] = array(quete_condition_statut('articles.statut', 'publie,prop,prepa/auteur', 'publie', ''), array(sql_in('articles.id_article', $doublons[$doublons_index[] = 'articles'], 'NOT'))); if (defined("_BOUCLE_PROFILER")) { $timer = time() + microtime(); } $t0 = ""; // REQUETE $iter = IterFactory::create("SQL", $command, array('squelettes/inc/inc-trad.html', 'html_a80389532d86f8e6929960268237a0a8', '_articles', 6, $GLOBALS['spip_lang'])); if (!$iter->err()) { lang_select($GLOBALS['spip_lang']); $SP++; // RESULTATS while ($Pile[$SP] = $iter->fetch()) { foreach ($doublons_index as $k) { $doublons[$k] .= "," . $Pile[$SP]['id_article']; } // doublons lang_select_public($Pile[$SP]['lang'], '', $Pile[$SP]['titre']); $t0 .= ' <li>' . (($t1 = strval(interdire_scripts(affdate(normaliser_date($Pile[$SP]['date']))))) !== '' ? '<span>' . $t1 . ((($t2 = strval(traduire_nom_langue(spip_htmlentities($Pile[$SP]['lang'] ? $Pile[$SP]['lang'] : $GLOBALS['spip_lang'])))) !== '' ? ' - <dfn class="lang">' . $t2 . '</dfn>' : '') . '</span>') : '') . ' <a href="' . spip_htmlspecialchars(sinon($GLOBALS['meta']['adresse_site'], '.')) . '/spip.php?action=converser&redirect=' . spip_htmlspecialchars(sinon($GLOBALS['meta']['adresse_site'], '.')) . '%2F' . vider_url(urlencode_1738(generer_url_entite($Pile[$SP]['id_article'], 'article', '', '', true))) . '&var_lang=' . spip_htmlentities($Pile[$SP]['lang'] ? $Pile[$SP]['lang'] : $GLOBALS['spip_lang']) . '" hreflang="' . spip_htmlentities($Pile[$SP]['lang'] ? $Pile[$SP]['lang'] : $GLOBALS['spip_lang']) . '" ' . (($t1 = strval(interdire_scripts(entites_html(textebrut(filtre_introduction_dist($Pile[$SP]['descriptif'], strlen($Pile[$SP]['descriptif']) ? '' : $Pile[$SP]['chapo'] . "\n\n" . $Pile[$SP]['texte'], 500, $connect, null)))))) !== '' ? 'title="' . $t1 . '"' : '') . '>' . interdire_scripts(supprimer_numero(typo(supprimer_numero($Pile[$SP]['titre']), "TYPO", $connect, $Pile[0]))) . '</a> </li> '; lang_select(); } lang_select(); $iter->free(); } if (defined("_BOUCLE_PROFILER") and 1000 * ($timer = time() + microtime() - $timer) > _BOUCLE_PROFILER) { spip_log(intval(1000 * $timer) . "ms BOUCLE_articles @ squelettes/inc/inc-trad.html", "profiler" . _LOG_AVERTISSEMENT); } return $t0; }
/** * Fonction de désinstallation du plugin cPublicité. * * @param string $nom_meta_base_version * Nom de la meta informant de la version du schéma de données du plugin installé dans SPIP * @return void **/ function cpub_vider_tables($nom_meta_base_version) { sql_drop_table("spip_publicites"); sql_drop_table("spip_bannieres"); sql_drop_table("spip_stats_pubs"); # Nettoyer les versionnages et forums sql_delete("spip_versions", sql_in("objet", array('publicite', 'banniere'))); sql_delete("spip_versions_fragments", sql_in("objet", array('publicite', 'banniere'))); sql_delete("spip_forum", sql_in("objet", array('publicite', 'banniere'))); effacer_meta($nom_meta_base_version); }
function BOUCLE_langueshtml_7b757a9211fae3c1871c26ec4415f046(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) { static $command = array(); static $connect; $command['connect'] = $connect = ''; $doublons_index = array(); // Initialise le(s) critère(s) doublons if (!isset($doublons[$d = 'rubriques' . 'contexte'])) { $doublons[$d] = ''; } if (!isset($command['table'])) { $command['table'] = 'rubriques'; $command['id'] = '_langues'; $command['from'] = array('rubriques' => 'spip_rubriques'); $command['type'] = array(); $command['groupby'] = array(); $command['select'] = array("rubriques.lang", "rubriques.id_rubrique", "rubriques.titre"); $command['orderby'] = array('rubriques.lang'); $command['join'] = array(); $command['limit'] = ''; $command['having'] = array(); } $command['where'] = array(quete_condition_statut('rubriques.statut', '!', 'publie', ''), array('=', 'rubriques.id_parent', 0), array(sql_in('rubriques.id_rubrique', $doublons[$doublons_index[] = 'rubriques' . 'contexte'], 'NOT'))); if (defined("_BOUCLE_PROFILER")) { $timer = time() + microtime(); } $t0 = ""; // REQUETE $iter = IterFactory::create("SQL", $command, array('squelettes/plan.html', 'html_7b757a9211fae3c1871c26ec4415f046', '_langues', 25, $GLOBALS['spip_lang'])); if (!$iter->err()) { lang_select($GLOBALS['spip_lang']); $SP++; // RESULTATS while ($Pile[$SP] = $iter->fetch()) { foreach ($doublons_index as $k) { $doublons[$k] .= "," . $Pile[$SP]['id_rubrique']; } // doublons lang_select_public($Pile[$SP]['lang'], '', $Pile[$SP]['titre']); $t0 .= ($t1 = strval(traduire_nom_langue(unique(spip_htmlentities($Pile[$SP]['lang'] ? $Pile[$SP]['lang'] : $GLOBALS['spip_lang'])), 'lang'))) !== '' ? ' <li lang="' . spip_htmlentities($Pile[$SP]['lang'] ? $Pile[$SP]['lang'] : $GLOBALS['spip_lang']) . '" xml:lang="' . spip_htmlentities($Pile[$SP]['lang'] ? $Pile[$SP]['lang'] : $GLOBALS['spip_lang']) . '" dir="' . lang_dir($Pile[$SP]['lang'], 'ltr', 'rtl') . '"> <a href="spip.php?action=converser&redirect=' . self() . '&var_lang=' . spip_htmlentities($Pile[$SP]['lang'] ? $Pile[$SP]['lang'] : $GLOBALS['spip_lang']) . '" hreflang="' . spip_htmlentities($Pile[$SP]['lang'] ? $Pile[$SP]['lang'] : $GLOBALS['spip_lang']) . '">' . $t1 . '</a> </li> ' : ''; lang_select(); } lang_select(); $iter->free(); } if (defined("_BOUCLE_PROFILER") and 1000 * ($timer = time() + microtime() - $timer) > _BOUCLE_PROFILER) { spip_log(intval(1000 * $timer) . "ms BOUCLE_langues @ squelettes/plan.html", "profiler" . _LOG_AVERTISSEMENT); } return $t0; }
function &find_by_ids($ids, $query) { $result = array(); if ($query->is_empty()) { return $result; } $sql = $this->_get_search_sql($query); $sql .= " AND " . sql_in('object_id', $ids); $result =& $this->_get_db_result($sql); return $result; }
function inc_marquer_doublons_doc_dist($champs, $id, $type, $id_table_objet, $table_objet, $spip_table_objet, $desc = array(), $serveur = '') { $champs_selection = array(); foreach ($GLOBALS['medias_liste_champs'] as $champs_choisis) { if (isset($champs[$champs_choisis])) { array_push($champs_selection, $champs_choisis); } } if (count($champs_selection) == 0) { return; } if (!$desc) { $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table_objet, $serveur); } $load = ""; // charger le champ manquant en cas de modif partielle de l 'objet // seulement si le champ existe dans la table demande $champs_a_traiter = ""; foreach ($champs_selection as $champs_a_parcourir) { if (isset($desc['field'][$champs_a_parcourir])) { $load = $champs_a_parcourir; $champs_a_traiter .= $champs[$champs_a_parcourir]; } } if ($load) { $champs[$load] = ""; $row = sql_fetsel($load, $spip_table_objet, "{$id_table_objet}=" . sql_quote($id)); if ($row and isset($row[$load])) { $champs[$load] = $row[$load]; } } include_spip('inc/texte'); include_spip('base/abstract_sql'); include_spip('action/editer_liens'); include_spip('base/objets'); $modeles = lister_tables_objets_sql('spip_documents'); $modeles = $modeles['modeles']; $GLOBALS['doublons_documents_inclus'] = array(); $env = array('objet' => $type, 'id_objet' => $id, $id_table_objet => $id); traiter_modeles($champs_a_traiter, array('documents' => $modeles), '', '', null, $env); // detecter les doublons objet_qualifier_liens(array('document' => '*'), array($type => $id), array('vu' => 'non')); if (count($GLOBALS['doublons_documents_inclus'])) { // on repasse par une requete sur spip_documents pour verifier que les documents existent bien ! $in_liste = sql_in('id_document', $GLOBALS['doublons_documents_inclus']); $res = sql_allfetsel("id_document", "spip_documents", $in_liste); $res = array_map('reset', $res); // Creer le lien s'il n'existe pas deja objet_associer(array('document' => $res), array($type => $id), array('vu' => 'oui')); objet_qualifier_liens(array('document' => $res), array($type => $id), array('vu' => 'oui')); } }
function optimiser_sansref($table, $id, $sel) { $in = array(); while ($row = sql_fetch($sel)) $in[$row['id']]=true; if ($in) { $in = join(',', array_keys($in)); sql_delete($table, sql_in($id,$in)); spip_log("Numeros des entrees $id supprimees dans la table $table: $in"); } return count($in); }
function optimiser_sansref($table, $id, $sel, $and = "") { $in = array(); while ($row = sql_fetch($sel)) { $in[$row['id']] = true; } sql_free($sel); if ($in) { sql_delete($table, sql_in($id, array_keys($in)) . ($and ? " AND {$and}" : "")); spip_log("Numeros des entrees {$id} supprimees dans la table {$table}: {$in}"); } return count($in); }
function inc_formater_auteur_dist($id_auteur, $row=NULL) { global $connect_id_auteur, $connect_statut; $id_auteur = intval($id_auteur); if ($row===NULL) $row = sql_fetsel("*, (en_ligne<DATE_SUB(NOW(),INTERVAL 15 DAY)) AS parti", "spip_auteurs", "id_auteur=$id_auteur"); $vals = array(); $statut = $row['statut']; $href = generer_url_ecrire("auteurs","statut=$statut"); $vals[] = "<a href='$href'>" . bonhomme_statut($row) . '</a>'; if (($id_auteur == $connect_id_auteur) OR $row['parti']) $vals[]= ' '; else $vals[]= formater_auteur_mail($row, $id_auteur); if (!$nom = typo($row['nom'])) $nom = "<span style='color: red'>" . _T('texte_vide') . '</span>'; $vals[] = "<a href='" . generer_url_ecrire('auteur_infos', "id_auteur=$id_auteur") . "'" . (!$row['bio'] ? '' : (" title=\"" . attribut_html(couper(textebrut($row["bio"]), 200)) ."\"")) . ">$nom</a>"; $url = traiter_lien_explicite($row["url_site"]); $vals[] = !$url ? " " : "<a href='$url'>".couper(sinon(typo($row['nom_site']), $row["url_site"]),30)."</a>"; $contributions = array(); if (autoriser('modifier', 'auteur', $id_auteur, $row)) { $in = sql_in('statut', ($connect_statut == "0minirezo" ? array('prepa', 'prop', 'publie', 'refuse') : array('prop', 'publie'))); if ($cpt = sql_countsel("spip_auteurs_articles AS L LEFT JOIN spip_articles AS A ON A.id_article=L.id_article", "L.id_auteur=$id_auteur AND $in")) $contributions[] = ($cpt>1?$cpt.' '._T('info_article_2'):_T('info_1_article')); } else { if ($cpt = sql_countsel("spip_forum AS F", "F.id_auteur=$id_auteur")) $contributions[] = ($cpt>1?$cpt.' '._T('public:messages_forum'):('1 ' . _T('public:message'))); } $contributions = pipeline('compter_contributions_auteur',array('args'=>array('id_auteur'=>$id_auteur,'row'=>$row),'data'=>$contributions)); $vals[] = count($contributions)?implode('<br />',$contributions):" "; return $vals; }
function load_metadata() { $ids_array = $this->_get_path_objects_ids_array(); if (!count($ids_array)) { return false; } $ids_array = array_reverse($ids_array); $metadata_db_table =& db_table_factory::instance($this->metadata_db_table_name); $objects_metadata = $metadata_db_table->get_list(sql_in('object_id', $ids_array), '', 'object_id'); if (!count($objects_metadata)) { return false; } $this->_process_loaded_metadata($ids_array, $objects_metadata); return true; }
function forum_compte_messages_from($email, $id_forum) { static $mem = array(); if (isset($mem[$email])) { return $mem[$email]; } // sinon on fait une requete groupee pour essayer de ne le faire qu'une fois pour toute la liste $emails = sql_allfetsel("DISTINCT email_auteur", "spip_forum", "id_forum>" . intval($id_forum - 50) . " AND id_forum<" . intval($id_forum + 50)); $emails = array_map('reset', $emails); $emails = array_filter($emails); // et compter $counts = sql_allfetsel("email_auteur,count(id_forum) AS N", "spip_forum", sql_in("email_auteur", $emails), "email_auteur"); foreach ($counts as $c) { $mem[$c['email_auteur']] = $c['N']; } return $mem[$email]; }
/** * Migration des albums grappes vers media_collections * * Appelée lors de l'installation du plugin */ function geol_albums_init() { if ($grappes = sql_allfetsel('*', 'spip_grappes', sql_in('type', array('album_perso', 'album_coop', 'balade')))) { include_spip('action/editer_objet'); include_spip('action/editer_liens'); foreach ($grappes as $grappe) { // récupérer les infos des anciens albums (grappes) $set = array('id_admin' => $grappe['id_admin'], 'titre' => $grappe['titre'], 'descriptif' => $grappe['descriptif'], 'date' => $grappe['date']); if ($grappe['type'] == 'album_perso') { $set['type_collection'] = 'perso'; } elseif ($grappe['type'] == 'album_coop') { $set['type_collection'] = 'coop'; } elseif ($grappe['type'] == 'balade') { $set['type_collection'] = 'balade'; } // créer des collections $id_collection = objet_inserer('collection'); if ($id_collection > 0) { objet_modifier('collection', $id_collection, $set); objet_instituer('collection', $id_collection, array('statut' => 'publie')); // copie des liens de grappes_liens vers collections_liens pour les articles $articles = sql_allfetsel('*', 'spip_grappes_liens', "objet = 'article' AND id_grappe = " . $grappe['id_grappe']); foreach ($articles as $article) { objet_associer(array('collection' => $id_collection), array($article['objet'] => $article['id_objet']), array('rang' => $article['rang'])); } // associer l'auteur id_admin de la grappe à la collection objet_associer(array('auteur' => $grappe['id_admin']), array('collection' => $id_collection)); // copie des liens de grappes_liens vers auteurs_liens pour les auteurs $auteurs = sql_allfetsel('*', 'spip_grappes_liens', "objet = 'auteur' AND id_grappe = " . $grappe['id_grappe']); foreach ($auteurs as $auteur) { objet_associer(array($auteur['objet'] => $auteur['id_objet']), array('collection' => $id_collection)); } // maj des liens des forums attachés aux grappes $forums = sql_allfetsel('id_forum', 'spip_forum', "objet = 'grappe' AND id_objet = " . $grappe['id_grappe']); foreach ($forums as $forum) { sql_updateq('spip_forum', array('objet' => 'collection', 'id_objet' => $id_collection), 'id_forum = ' . $forum['id_forum']); } // maj des liens des points gis attachés aux grappes $points = sql_allfetsel('id_gis', 'spip_gis_liens', "objet = 'grappe' AND id_objet = " . $grappe['id_grappe']); foreach ($points as $point) { sql_updateq('spip_gis_liens', array('objet' => 'collection', 'id_objet' => $id_collection), 'id_gis = ' . $point['id_gis']); } } } } }
function aff_statistique_visites_popularite($serveur, $id_article, &$classement, &$liste){ // Par popularite $result = sql_select("id_article, titre, popularite, visites", "spip_articles", "statut='publie' AND popularite > 0", "", "popularite DESC",'','',$serveur); $out = ''; while ($row = sql_fetch($result,$serveur)) { $l_article = $row['id_article']; $liste++; $classement[$l_article] = $liste; if ($liste <= 30) { $articles_vus[] = $l_article; $out .= statistiques_populaires($row, $id_article, $liste); } } $recents = array(); $q = sql_select("id_article", "spip_articles", "statut='publie' AND popularite > 0", "", "date DESC", "10",'',$serveur); while ($r = sql_fetch($q,$serveur)) if (!in_array($r['id_article'], $articles_vus)) $recents[]= $r['id_article']; if ($recents) { $result = sql_select("id_article, titre, popularite, visites", "spip_articles", "statut='publie' AND " . sql_in('id_article', $recents), "", "popularite DESC",'','',$serveur); $out .= "</ul><div style='text-align: center'>[...]</div>" . "<ul class='classement'>"; while ($row = sql_fetch($result,$serveur)) { $l_article = $row["id_article"]; $out .= statistiques_populaires($row, $id_article, $classement[$l_article]); } } return !$out ? '' : ( "<div class='cadre cadre-e'>\n" ."<div class='cadre_padding verdana1 spip_x-small'>" .typo(_T('info_visites_plus_populaires')) ."<ul class='classement'>" .$out ."</ul>" ."<div class='arial11'><b>"._T('info_comment_lire_tableau')."</b><br />"._T('texte_comment_lire_tableau')."</div>" ."</div>" ."</div>"); }
/** * Calcul d'une hierarchie * (liste des id_rubrique contenants une rubrique donnee) * (contrairement a la fonction calcul_branche_in du core qui calcule les * rubriques contenues) * * @param mixed $id * @return string */ function calcul_hierarchie_in($id) { // normaliser $id qui a pu arriver comme un array, comme un entier, ou comme une chaine NN,NN,NN if (!is_array($id)) $id = explode(',',$id); $id = join(',', array_map('intval', $id)); // Notre branche commence par la rubrique de depart $hier = $id; // On ajoute une generation (les filles de la generation precedente) // jusqu'a epuisement while ($parents = sql_allfetsel('id_parent', 'spip_rubriques', sql_in('id_rubrique', $id))) { $id = join(',', array_map('reset', $parents)); $hier .= ',' . $id; } return $hier; }
/** * Autorisation d'ajout d'un evenement a un article * * @param string $faire * @param string $quoi * @param int $id * @param int $qui * @param array $options * @return bool */ function autoriser_article_creerevenementdans_dist($faire,$quoi,$id,$qui,$options){ if (!$id) return false; // interdit de creer un evenement sur un article vide ! // si on a le droit de modifier l'article alors on a peut-etre le droit d'y creer un evenement $afficher = false; if (autoriser('modifier','article',$id,$qui)) { $afficher = true; // un article avec des evenements a toujours le droit if (!sql_countsel('spip_evenements','id_article='.intval($id))){ // si au moins une rubrique a le flag agenda if (sql_countsel('spip_rubriques','agenda=1')){ // alors il faut le flag agenda dans cette branche ! $afficher = false; include_spip('inc/agenda_gestion'); $in = calcul_hierarchie_in(sql_getfetsel('id_rubrique','spip_articles','id_article='.intval($id))); $afficher = sql_countsel('spip_rubriques',sql_in('id_rubrique',$in)." AND agenda=1"); } } } return $afficher; }
/** * Bloc sur les informations generales concernant chaque type d'objet * * @param string $texte * @return string */ function breves_accueil_informations($texte) { include_spip('base/abstract_sql'); $q = sql_select("COUNT(*) AS cnt, statut", 'spip_breves', '', 'statut', '', '', "COUNT(*)<>0"); $cpt = array(); $cpt2 = array(); $where = false; if ($GLOBALS['visiteur_session']['statut'] == '0minirezo') { $where = sql_allfetsel('id_objet', 'spip_auteurs_liens', "objet='rubrique' AND id_auteur=" . intval($GLOBALS['visiteur_session']['id_auteur'])); if ($where) { $where = sql_in('id_rubrique', array_map('reset', $where)); } } $defaut = $where ? '0/' : ''; while ($row = sql_fetch($q)) { $cpt[$row['statut']] = $row['cnt']; $cpt2[$row['statut']] = $defaut; } if ($cpt) { if ($where) { $q = sql_select("COUNT(*) AS cnt, statut", 'spip_breves', $where, "statut"); while ($row = sql_fetch($q)) { $r = $row['statut']; $cpt2[$r] = intval($row['cnt']) . '/'; } } $texte .= "<div class='accueil_informations breves liste'>"; $texte .= "<h4>" . afficher_plus_info(generer_url_ecrire("breves"), "", _T('breves:info_breves_02')) . "</h4>"; $texte .= "<ul class='liste-items'>"; if (isset($cpt['prop'])) { $texte .= "<li class='item'>" . _T("texte_statut_attente_validation") . ": " . $cpt2['prop'] . $cpt['prop'] . '</li>'; } if (isset($cpt['publie'])) { $texte .= "<li class='item on'>" . _T("texte_statut_publies") . ": " . $cpt2['publie'] . $cpt['publie'] . '</li>'; } $texte .= "</ul>"; $texte .= "</div>"; } return $texte; }
/** * Calculer les nombres d'elements (articles, etc.) lies a chaque mot * * @param int $id_groupe * @return array */ function calculer_utilisations_mots($id_groupe) { $retour = array(); $objets = sql_allfetsel('DISTINCT objet', array('spip_mots_liens AS L', 'spip_mots AS M'), array('L.id_mot=M.id_mot', 'M.id_groupe=' . intval($id_groupe))); foreach ($objets as $o) { $objet = $o['objet']; $_id_objet = id_table_objet($objet); $table_objet_sql = table_objet_sql($objet); $infos = lister_tables_objets_sql($table_objet_sql); if (isset($infos['field']) and $infos['field']) { // uniquement certains statut d'objet, // et uniquement si la table dispose du champ statut. $statuts = ""; if (isset($infos['field']['statut']) or isset($infos['statut'][0]['champ'])) { // on s'approche au mieux de la declaration de l'objet. // il faudrait ameliorer ce point. $c_statut = isset($infos['statut'][0]['champ']) ? $infos['statut'][0]['champ'] : 'statut'; // bricoler les statuts d'apres la declaration de l'objet (champ previsu a defaut de mieux) if (array_key_exists('previsu', $infos['statut'][0]) and strlen($infos['statut'][0]['previsu']) > 1) { $str_statuts = $infos['statut'][0]['previsu']; if ($GLOBALS['connect_statut'] != "0minirezo") { $str_statuts = str_replace('prepa', '', $str_statuts); } $not = substr($str_statuts, 0, 1) == '!' ? 'NOT' : ''; $str_statuts = str_replace('!', '', $str_statuts); $Tstatuts = array_filter(explode(',', $str_statuts)); $statuts = " AND " . sql_in("O.{$c_statut}", $Tstatuts, $not); } else { $statuts = " AND " . sql_in("O.{$c_statut}", $GLOBALS['connect_statut'] == "0minirezo" ? array('prepa', 'prop', 'publie') : array('prop', 'publie')); } } $res = sql_allfetsel("COUNT(*) AS cnt, L.id_mot", "spip_mots_liens AS L\n\t\t\t\t\tLEFT JOIN spip_mots AS M ON L.id_mot=M.id_mot\n\t\t\t\t\t\tAND L.objet=" . sql_quote($objet) . "\n\t\t\t\t\tLEFT JOIN " . $table_objet_sql . " AS O ON L.id_objet=O.{$_id_objet}", "M.id_groupe={$id_groupe}{$statuts}", "L.id_mot"); foreach ($res as $row) { $retour[$table_objet_sql][$row['id_mot']] = $row['cnt']; } } } return $retour; }