function action_joindre_sous_action($id, $id_document, $mode, $type, &$documents_actifs) { $hash = _request('hash'); $url = _request('url'); $chemin = _request('chemin'); $ancre = _request('ancre'); $sousaction1 = _request('sousaction1'); $sousaction2 = _request('sousaction2'); $sousaction3 = _request('sousaction3'); $sousaction4 = _request('sousaction4'); $sousaction5 = _request('sousaction5'); // decompacter un zip $redirect = _request('redirect'); $iframe_redirect = _request('iframe_redirect'); // pas terrible, mais c'est le pb du bouton Submit qui retourne son texte, // et son transcodage est couteux et perilleux $sousaction = ($sousaction1 ? 1 : ($sousaction2 ? 2 : ($sousaction3 ? 3 : ($sousaction4 ? 4 : $sousaction5 )))); $path = ($sousaction1 ? ($_FILES ? $_FILES : $GLOBALS['HTTP_POST_FILES']) : ($sousaction2 ? $url : $chemin)); $sousaction = charger_fonction('joindre' . $sousaction, 'inc'); $type_image = $sousaction($path, $mode, $type, $id, $id_document, $hash, $redirect, $documents_actifs, $iframe_redirect); $redirect = urldecode($redirect); if ($documents_actifs) { $redirect = parametre_url($redirect,'show_docs',join(',',$documents_actifs),'&'); } if (!$ancre) { if ($mode=='image') $ancre = 'images'; else if ($type_image) $ancre = 'portfolio'; else $ancre = 'documents'; } $redirect .= '#' . $ancre; if ($type == 'rubrique') { include_spip('inc/rubriques'); calculer_rubriques_if($id, array('statut' => 'publie')); } if(_request("iframe") == 'iframe') { $redirect = parametre_url(urldecode($iframe_redirect),"show_docs",join(',',$documents_actifs),'&')."&iframe=iframe"; } return $redirect; }
function action_instituer_site_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); list($id_syndic, $statut) = preg_split('/\W/', $arg); $cond = "id_syndic=" . intval($id_syndic); $row = sql_fetsel("statut, id_rubrique", "spip_syndic", $cond); if (!$row OR ($row['statut'] == $statut)) return; sql_updateq("spip_syndic", array("statut" => $statut), $cond); include_spip('inc/rubriques'); calculer_rubriques_if($row['id_rubrique'], array('statut' => $statut), $row['statut']); }
function reorganiser_rubrique_rubrique($id_quoi, $id_cible) { if ($id_quoi != $id_cible and autoriser('modifier', 'rubrique', $id_cible) and autoriser('modifier', 'rubrique', $id_quoi)) { if (!$id_cible) { $id_secteur = $id_quoi; } else { $id_secteur = sql_getfetsel("id_secteur", "spip_rubriques", "id_rubrique={$id_cible}"); } $s = sql_fetsel("statut, id_parent, id_secteur", "spip_rubriques", "id_rubrique=" . intval($id_quoi)); sql_updateq('spip_rubriques', array('id_parent' => $id_cible, 'id_secteur' => $id_secteur), "id_rubrique=" . intval($id_quoi)); include_spip('inc/rubriques'); // propager les secteurs si besoin if ($s['id_secteur'] != $id_secteur) { propager_les_secteurs(); } // changer le statut de la rubrique source if ($s['statut'] == 'publie') { calculer_rubriques_if($s['id_parent'], array('id_rubrique' => $id_cible), 'publie'); } } }
function revisions_breves ($id_breve, $c=false) { // champs normaux if ($c === false) { $c = array(); foreach (array( 'titre', 'texte', 'lien_titre', 'lien_url', 'id_parent', 'statut' ) as $champ) if (($a = _request($champ)) !== null) $c[$champ] = $a; } // Si la breve est publiee, invalider les caches et demander sa reindexation $t = sql_getfetsel("statut", "spip_breves", "id_breve=$id_breve"); if ($t == 'publie') { $invalideur = "id='id_breve/$id_breve'"; $indexation = true; } include_spip('inc/modifier'); modifier_contenu('breve', $id_breve, array( 'nonvide' => array('titre' => _T('info_sans_titre')), 'invalideur' => $invalideur, 'indexation' => $indexation ), $c); // Changer le statut de la breve ? $row = sql_fetsel("statut, id_rubrique,lang, langue_choisie", "spip_breves", "id_breve=$id_breve"); $id_rubrique = $row['id_rubrique']; $statut_ancien = $statut = $row['statut']; $langue_old = $row['lang']; $langue_choisie_old = $row['langue_choisie']; if (_request('statut', $c) AND _request('statut', $c) != $statut AND autoriser('publierdans', 'rubrique', $id_rubrique)) { $statut = $champs['statut'] = _request('statut', $c); } // Changer de rubrique ? // Verifier que la rubrique demandee est a la racine et differente // de la rubrique actuelle if ($id_parent = intval(_request('id_parent', $c)) AND $id_parent != $id_rubrique AND (NULL !== ($lang=sql_getfetsel('lang', 'spip_rubriques', "id_parent=0 AND id_rubrique=$id_parent")))) { $champs['id_rubrique'] = $id_parent; // - changer sa langue (si heritee) if ($langue_choisie_old != "oui") { if ($lang != $langue_old) $champs['lang'] = $lang; } // si la breve est publiee // et que le demandeur n'est pas admin de la rubrique // repasser la breve en statut 'prop'. if ($statut == 'publie') { if (!autoriser('publierdans','rubrique',$id_parent)) $champs['statut'] = $statut = 'prop'; } } if (!$champs) return; sql_updateq('spip_breves', $champs, "id_breve=$id_breve"); // // Post-modifications // // Invalider les caches include_spip('inc/invalideur'); suivre_invalideur("id='id_breve/$id_breve'"); // Au besoin, changer le statut des rubriques concernees include_spip('inc/rubriques'); calculer_rubriques_if($id_rubrique, $champs, $statut_ancien); // Notifications if ($notifications = charger_fonction('notifications', 'inc')) { $notifications('instituerbreve', $id_breve, array('statut' => $statut, 'statut_ancien' => $statut_ancien) ); } }
/** * Instituer une rubrique (changer son parent) * * Change le parent d'une rubrique, si les autorisations sont correctes, * mais n'accèpte pas de déplacer une rubrique dans une de ses filles, tout de même ! * * Recalcule les secteurs, les langues et déplace les brèves au passage. * * @param int $id_rubrique * Identifiant de la rubrique à instituer * @param array $c * Informations pour l'institution (id_rubrique, confirme_deplace) * @global array $GLOBALS ['visiteur_session'] * @return string * Chaîne vide : aucune erreur * Chaîne : Texte du message d'erreur */ function rubrique_instituer($id_rubrique, $c) { // traitement de la rubrique parente // interdiction de deplacer vers ou a partir d'une rubrique // qu'on n'administre pas. if (null !== ($id_parent = $c['id_parent'])) { $id_parent = intval($id_parent); $filles = calcul_branche_in($id_rubrique); if (strpos(",{$id_parent},", ",{$filles},") !== false) { spip_log("La rubrique {$id_rubrique} ne peut etre fille de sa descendante {$id_parent}"); } else { $s = sql_fetsel("id_parent, statut", "spip_rubriques", "id_rubrique={$id_rubrique}"); $old_parent = $s['id_parent']; if (!($id_parent != $old_parent and autoriser('publierdans', 'rubrique', $id_parent) and autoriser('creerrubriquedans', 'rubrique', $id_parent) and autoriser('publierdans', 'rubrique', $old_parent))) { if ($s['statut'] != 'new') { spip_log("deplacement de {$id_rubrique} vers {$id_parent} refuse a " . $GLOBALS['visiteur_session']['id_auteur'] . ' ' . $GLOBALS['visiteur_session']['statut']); } } elseif (editer_rubrique_breves($id_rubrique, $id_parent, $c)) { $statut_ancien = $s['statut']; sql_updateq('spip_rubriques', array('id_parent' => $id_parent), "id_rubrique={$id_rubrique}"); propager_les_secteurs(); // Deplacement d'une rubrique publiee ==> chgt general de leur statut if ($statut_ancien == 'publie') { calculer_rubriques_if($old_parent, array('id_rubrique' => $id_parent), $statut_ancien); } elseif (!$statut_ancien || $old_parent != $id_parent) { effacer_meta("date_calcul_rubriques"); } calculer_langues_rubriques(); } } } return ''; // pas d'erreur }
/** * fabrique la requete d'institution de l'objet, avec champs herites * * @param string $objet * @param int $id * @param int $id_rubrique * @param string $statut * @param array $champs * @param bool $cond * @return */ function objet_editer_heritage($objet, $id, $id_rubrique, $statut, $champs, $cond = true) { $table_sql = table_objet_sql($objet); $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table_sql); // Si on deplace l'objet // changer aussi son secteur et sa langue (si heritee) if (isset($champs['id_rubrique'])) { $row_rub = sql_fetsel("id_secteur, lang", "spip_rubriques", "id_rubrique=" . sql_quote($champs['id_rubrique'])); $langue = $row_rub['lang']; if (isset($desc['field']['id_secteur'])) { $champs['id_secteur'] = $row_rub['id_secteur']; } if (isset($desc['field']['lang']) and isset($desc['field']['langue_choisie'])) { if (sql_fetsel('1', $table_sql, id_table_objet($objet) . "=" . intval($id) . " AND langue_choisie<>'oui' AND lang<>" . sql_quote($langue))) { $champs['lang'] = $langue; } } } if (!$champs) { return; } sql_updateq($table_sql, $champs, id_table_objet($objet) . '=' . intval($id)); // Changer le statut des rubriques concernees if ($cond) { include_spip('inc/rubriques'); //$postdate = ($GLOBALS['meta']["post_dates"] == "non" AND isset($champs['date']) AND (strtotime($champs['date']) < time()))?$champs['date']:false; $postdate = false; calculer_rubriques_if($id_rubrique, $champs, $statut, $postdate); } }
/** * Instituer une breve : modifier son statut ou son parent * * @param int $id_breve * @param array $c * @return string */ function breve_instituer($id_breve, $c) { $champs = array(); // Changer le statut de la breve ? $row = sql_fetsel("statut, id_rubrique,lang, langue_choisie", "spip_breves", "id_breve=" . intval($id_breve)); $id_rubrique = $row['id_rubrique']; $statut_ancien = $statut = $row['statut']; $langue_old = $row['lang']; $langue_choisie_old = $row['langue_choisie']; if ($c['statut'] and $c['statut'] != $statut and autoriser('publierdans', 'rubrique', $id_rubrique)) { $statut = $champs['statut'] = $c['statut']; } // Changer de rubrique ? // Verifier que la rubrique demandee est a la racine et differente // de la rubrique actuelle if ($id_parent = intval($c['id_parent']) and $id_parent != $id_rubrique and NULL !== ($lang = sql_getfetsel('lang', 'spip_rubriques', "id_parent=0 AND id_rubrique=" . intval($id_parent)))) { $champs['id_rubrique'] = $id_parent; // - changer sa langue (si heritee) if ($langue_choisie_old != "oui") { if ($lang != $langue_old) { $champs['lang'] = $lang; } } // si la breve est publiee // et que le demandeur n'est pas admin de la rubrique // repasser la breve en statut 'prop'. if ($statut == 'publie') { if (!autoriser('publierdans', 'rubrique', $id_parent)) { $champs['statut'] = $statut = 'prop'; } } } // Envoyer aux plugins $champs = pipeline('pre_edition', array('args' => array('table' => 'spip_breves', 'id_objet' => $id_breve, 'action' => 'instituer', 'statut_ancien' => $statut_ancien), 'data' => $champs)); if (!$champs) { return; } sql_updateq('spip_breves', $champs, "id_breve=" . intval($id_breve)); // // Post-modifications // // Invalider les caches include_spip('inc/invalideur'); suivre_invalideur("id='breve/{$id_breve}'"); // Au besoin, changer le statut des rubriques concernees include_spip('inc/rubriques'); calculer_rubriques_if($id_rubrique, $champs, $statut_ancien); // Pipeline pipeline('post_edition', array('args' => array('table' => 'spip_breves', 'id_objet' => $id_breve, 'action' => 'instituer', 'statut_ancien' => $statut_ancien), 'data' => $champs)); // Notifications if ($notifications = charger_fonction('notifications', 'inc')) { $notifications('instituerbreve', $id_breve, array('statut' => $statut, 'statut_ancien' => $statut_ancien)); } return ''; // pas d'erreur }
function instituer_rubrique($id_rubrique, $c) { // traitement de la rubrique parente // interdiction de deplacer vers ou a partir d'une rubrique // qu'on n'administre pas. $statut_ancien = $parent = ''; if (NULL !== ($id_parent = $c['id_parent'])) { $id_parent = intval($id_parent); $filles = calcul_branche($id_rubrique); if (strpos(",$id_parent,", ",$filles,") !== false) spip_log("La rubrique $id_rubrique ne peut etre fille de sa descendante $id_parent"); else { $s = sql_fetsel("id_parent, statut", "spip_rubriques", "id_rubrique=$id_rubrique"); $old_parent = $s['id_parent']; if (!($id_parent != $old_parent AND autoriser('publierdans', 'rubrique', $id_parent) AND autoriser('creerrubriquedans', 'rubrique', $id_parent) AND autoriser('publierdans', 'rubrique', $old_parent) )) { if ($s['statut'] != 'new') { spip_log("deplacement de $id_rubrique vers $id_parent refuse a " . $GLOBALS['visiteur_session']['id_auteur'] . ' '. $GLOBALS['visiteur_session']['statut']); } } elseif (editer_rubrique_breves($id_rubrique, $id_parent, $c)) { $statut_ancien = $s['statut']; sql_updateq('spip_rubriques', array('id_parent' => $id_parent), "id_rubrique=$id_rubrique"); propager_les_secteurs(); // Deplacement d'une rubrique publiee ==> chgt general de leur statut if ($statut_ancien == 'publie') calculer_rubriques_if($old_parent, array('id_rubrique' => $id_parent), $statut_ancien); // Creation ou deplacement d'une rubrique non publiee // invalider le cache de leur menu elseif (!$statut_ancien || $old_parent!=$id_parent) effacer_meta("date_calcul_rubriques"); calculer_langues_rubriques(); return true; } } } }
/** * Fabrique la requête de modification de l'article, avec champs hérités * * @global array $GLOBALS['meta'] * * @param int $id_article * Identifiant de l'article * @param int $id_rubrique * Identifiant de la rubrique parente * @param string $statut * Statut de l'article (prop, publie, ...) * @param array $champs * Couples (colonne => valeur) des champs qui ont été modifiés * @param bool $cond * True pour actualiser le statut et date de publication de la rubrique * parente si nécessaire * @return void|null * null si aucune action à faire * void sinon */ function editer_article_heritage($id_article, $id_rubrique, $statut, $champs, $cond = true) { // Si on deplace l'article // changer aussi son secteur et sa langue (si heritee) if (isset($champs['id_rubrique'])) { $row_rub = sql_fetsel("id_secteur, lang", "spip_rubriques", "id_rubrique=" . sql_quote($champs['id_rubrique'])); $langue = $row_rub['lang']; $champs['id_secteur'] = $row_rub['id_secteur']; if (sql_fetsel('1', 'spip_articles', "id_article={$id_article} AND langue_choisie<>'oui' AND lang<>" . sql_quote($langue))) { $champs['lang'] = $langue; } } if (!$champs) { return; } sql_updateq('spip_articles', $champs, "id_article={$id_article}"); // Changer le statut des rubriques concernees if ($cond) { include_spip('inc/rubriques'); $postdate = ($GLOBALS['meta']["post_dates"] == "non" and isset($champs['date']) and strtotime($champs['date']) < time()) ? $champs['date'] : false; calculer_rubriques_if($id_rubrique, $champs, $statut, $postdate); } }
function revisions_sites ($id_syndic, $c=false) { include_spip('inc/rubriques'); include_spip('inc/autoriser'); // champs normaux if ($c === false) { $c = array(); foreach (array( 'nom_site', 'url_site', 'descriptif', 'url_syndic', 'syndication', 'statut', 'id_parent' ) as $champ) if (($a = _request($champ)) !== null) $c[$champ] = $a; } // Si le site est publie, invalider les caches et demander sa reindexation $t = sql_getfetsel("statut", "spip_syndic", "id_syndic=$id_syndic"); if ($t == 'publie') { $invalideur = "id='id_syndic/$id_syndic'"; $indexation = true; } include_spip('inc/modifier'); modifier_contenu('syndic', $id_syndic, array( 'nonvide' => array('nom_site' => _T('info_sans_titre')), 'invalideur' => $invalideur, 'indexation' => $indexation ), $c); $row = sql_fetsel("statut, id_rubrique, id_secteur", "spip_syndic", "id_syndic=$id_syndic"); $id_rubrique = $row['id_rubrique']; $statut_ancien = $row['statut']; $id_secteur_old = $row['id_secteur']; $statut = $c['statut']; if ($statut AND $statut != $statut_ancien AND autoriser('publierdans','rubrique',$id_rubrique)) { $champs['statut'] = $statut; if ($statut == 'publie') { if ($d = _request('date', $c)) { $champs['date'] = $d; } else { $champs['date'] = date('Y-m-d H:i:s'); } } } else $statut = $statut_ancien; // Changer de rubrique ? // Verifier que la rubrique demandee est differente de l'actuelle, // et qu'elle existe. Recuperer son secteur if ($id_parent = intval(_request('id_parent', $c)) AND $id_parent != $id_rubrique AND ($id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', "id_rubrique=$id_parent"))) { $champs['id_rubrique'] = $id_parent; if ($id_secteur_old != $id_secteur) $champs['id_secteur'] = $id_secteur; // si le site est publie // et que le demandeur n'est pas admin de la rubrique // repasser le site en statut 'prop'. if ($statut == 'publie') { if (!autoriser('publierdans','rubrique',$id_parent)) $champs['statut'] = $statut = 'prop'; } } if (!$champs) return; // Enregistrer les modifications sql_updateq('spip_syndic', $champs, "id_syndic=$id_syndic"); // Invalider les caches if ($statut == 'publie') { include_spip('inc/invalideur'); suivre_invalideur("id='id_syndic/$id_syndic'"); } // Notifications if ($notifications = charger_fonction('notifications', 'inc')) { $notifications('instituersite', $id_syndic, array('statut' => $statut, 'statut_ancien' => $statut_ancien, 'date'=>($champs['date']?$champs['date']:$row['date'])) ); } include_spip('inc/rubriques'); calculer_rubriques_if($id_rubrique, $champs, $statut_ancien); }
/** * determiner le statut d'un document : prepa/publie * si on trouve un element joint sans champ statut ou avec un statut='publie' alors le doc est publie aussi * * @param int $id_document * @param array $champs * @return bool */ function document_instituer($id_document, $champs = array()) { $statut = isset($champs['statut']) ? $champs['statut'] : null; $date_publication = isset($champs['date_publication']) ? $champs['date_publication'] : null; if (isset($champs['parents'])) { medias_revision_document_parents($id_document, $champs['parents']); } if (isset($champs['ajout_parents'])) { medias_revision_document_parents($id_document, $champs['ajout_parents'], true); } $row = sql_fetsel("statut,date_publication", "spip_documents", "id_document={$id_document}"); $statut_ancien = $row['statut']; $date_publication_ancienne = $row['date_publication']; /* Autodetermination du statut si non fourni */ if (is_null($statut)) { $statut = 'prepa'; $trouver_table = charger_fonction('trouver_table', 'base'); $res = sql_select('id_objet,objet', 'spip_documents_liens', "objet!='document' AND id_document=" . intval($id_document)); // dans 10 ans, ca nous fera un bug a corriger vers 2018 // penser a ouvrir un ticket d'ici la :p $date_publication = time() + 10 * 365 * 24 * 3600; include_spip('base/objets'); while ($row = sql_fetch($res)) { if ($row['objet'] == 'rubrique' or objet_test_si_publie($row['objet'], $row['id_objet'])) { $statut = 'publie'; $date_publication = 0; continue; } elseif ($row['objet'] == 'article' and $row2 = sql_fetsel('date', 'spip_articles', 'id_article=' . intval($row['id_objet']) . " AND statut='publie'")) { $statut = 'publie'; $date_publication = min($date_publication, strtotime($row2['date'])); } } $date_publication = date('Y-m-d H:i:s', $date_publication); if ($statut == 'publie' and $statut_ancien == 'publie' and $date_publication == $date_publication_ancienne) { return false; } if ($statut != 'publie' and $statut_ancien != 'publie' and $statut_ancien != '0') { return false; } } if ($statut !== $statut_ancien or $date_publication != $date_publication_ancienne) { sql_updateq('spip_documents', array('statut' => $statut, 'date_publication' => $date_publication), 'id_document=' . intval($id_document)); if ($statut !== $statut_ancien) { $publier_rubriques = sql_allfetsel('id_objet', 'spip_documents_liens', "objet='rubrique' AND id_document=" . intval($id_document)); if (count($publier_rubriques)) { include_spip('inc/rubriques'); foreach ($publier_rubriques as $r) { calculer_rubriques_if($r['id_objet'], array('statut' => $statut), $statut_ancien, false); } } } return true; } return false; }