/** * Recalcule les statuts d'une rubrique * * Fonction à appeler lorsque le statut d'un objet change dans une rubrique * ou que la rubrique est deplacée. * * Si le statut passe a "publie", la rubrique et ses parents y passent aussi * et les langues utilisees sont recalculées. * Conséquences symétriques s'il est depublié. * * S'il est deplacé alors qu'il était publiée, double conséquence. * * Tout cela devrait passer en SQL, sous forme de Cascade SQL. * * @param int $id_rubrique * Identifiant de la rubrique * @param array $modifs * Tableau de description des modifications. * Peut avoir 2 index, 'statut' étant obligatoire : * - statut : indique le nouveau statut de la rubrique * - id_rubrique : indiquer la rubrique dans laquelle on déplace la rubrique (son nouveau parent donc) * @param string $statut_ancien * Ancien statut de la rubrique * @param bool $postdate * true pour recalculer aussi la date du prochain article post-daté * @return bool * true si le statut change effectivement **/ function calculer_rubriques_if($id_rubrique, $modifs, $statut_ancien = '', $postdate = false) { $neuf = false; if ($statut_ancien == 'publie') { if (isset($modifs['statut']) or isset($modifs['id_rubrique']) or $postdate and strtotime($postdate) > time()) { $neuf |= depublier_branche_rubrique_if($id_rubrique); } // ne publier que si c'est pas un postdate, ou si la date n'est pas dans le futur if ($postdate) { calculer_prochain_postdate(true); $neuf |= strtotime($postdate) <= time(); // par securite } elseif (isset($modifs['id_rubrique'])) { $neuf |= publier_branche_rubrique($modifs['id_rubrique']); } } elseif ($modifs['statut'] == 'publie') { if ($postdate) { calculer_prochain_postdate(true); $neuf |= strtotime($postdate) <= time(); // par securite } else { $neuf |= publier_branche_rubrique($id_rubrique); } } if ($neuf) { // Sauver la date de la derniere mise a jour (pour menu_rubriques) ecrire_meta("date_calcul_rubriques", date("U")); } $langues = calculer_langues_utilisees(); ecrire_meta('langues_utilisees', $langues); }
function action_dater_post($r) { include_spip('inc/date'); $type = $r[2]; $id = $r[1]; if (!isset($_REQUEST['avec_redac'])) { $date = dater_table($id, $type); } else { if (_request('avec_redac') == 'non') $annee_redac = $mois_redac = $jour_redac = $heure_redac = $minute_redac = 0; else { $annee_redac = _request('annee_redac'); $mois_redac = _request('mois_redac'); $jour_redac = _request('jour_redac'); $heure_redac = _request('heure_redac'); $minute_redac = _request('minute_redac'); if ($annee_redac<>'' AND $annee_redac < 1001) $annee_redac += 9000; } $date = format_mysql_date($annee_redac, $mois_redac, $jour_redac, $heure_redac, $minute_redac); include_spip('inc/modifier'); revision_article($r[1],array("date_redac" => $date)); } // a priori fait doublon avec instituer_xx utilise dans dater_table() // mais on laisse pour ne pas introduire de bug dans cette branche if (($type == 'article') AND $GLOBALS['meta']["post_dates"] == "non") { $t = sql_fetsel("statut, id_rubrique", "spip_articles", "id_article=$id"); if ($t['statut'] == 'publie') { include_spip('inc/rubriques'); if (strtotime($date) > time()) depublier_branche_rubrique_if($t['id_rubrique']); else publier_branche_rubrique($t['id_rubrique']); calculer_prochain_postdate(); } } }
/** * Dissocier un ou des documents * * @param int|string $document * id_document a dissocier * I/image pour dissocier les images en mode Image * I/document pour dissocier les images en mode document * D/document pour dissocier les documents non image en mode document * @param $objet * objet duquel dissocier * @param $id_objet * id_objet duquel dissocier * @param bool $supprime * supprimer les documents orphelins apres dissociation * @param bool $check * verifier le texte des documents et relier les documents references dans l'objet * @return void */ function dissocier_document($document, $objet, $id_objet, $supprime = false, $check = false) { if ($id_document = intval($document)) { supprimer_lien_document($id_document, $objet, $id_objet, $supprime, $check); } else { list($image, $mode) = explode('/', $document); $image = $image == 'I'; $typdoc = sql_in('docs.extension', array('gif', 'jpg', 'png'), $image ? '' : 'NOT'); $obj = "id_objet=" . intval($id_objet) . " AND objet=" . sql_quote($objet); $s = sql_select('docs.id_document', "spip_documents AS docs LEFT JOIN spip_documents_liens AS l ON l.id_document=docs.id_document", "{$obj} AND vu='non' AND docs.mode=" . sql_quote($mode) . " AND {$typdoc}"); while ($t = sql_fetch($s)) { supprimer_lien_document($t['id_document'], $objet, $id_objet, $supprime, $check); } } // pas tres generique ca ... if ($objet == 'rubrique') { include_spip('inc/rubriques'); depublier_branche_rubrique_if($id_objet); } }
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); } }