function action_dereferencer_traduction_rubrique_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); list($type, $id_objet) = explode('/', $arg); if (!$type = objet_type($type) or !$id_objet = intval($id_objet)) { if (!_AJAX) { include_spip('inc/minipres'); minipres('Arguments incompris'); } else { spip_log('Arguments incompris dans action dereferencer_traduction_rubrique'); return false; } } $objet = table_objet($type); $_id_objet = id_table_objet($objet); $table = table_objet_sql($objet); $id_trad_old = sql_getfetsel('id_trad', $table, "$_id_objet = " . sql_quote($id_objet)); if ($id_trad_old) { include_spip('inc/modifier'); modifier_contenu($objet, $id_objet, array('invalideur' => "id='$objet/$id_objet'"), array('id_trad' => 0)); // si la deliaison fait qu'il ne reste plus que la source // dans le groupe de traduction on lui remet l'id_trad a 0 if (1 == $nb_dans_groupe = sql_countsel($table, array('id_trad = ' . sql_quote($id_trad_old)))) { modifier_contenu($objet, $id_trad_old, array('invalideur' => "id='$objet/$id_trad_old'"), array('id_trad' => 0)); } } }
/** * Enregistre une révision de contact * * @param int $id_produit * @param array $c * @return */ function revision_contact($id_contact, $c = false) { $invalideur = "id='id_contact/{$id_contact}'"; modifier_contenu('contact', $id_contact, array('nonvide' => array('titre' => _T('info_sans_titre')), 'invalideur' => $invalideur), $c); return ''; // pas d'erreur }
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) ); } }
function crayons_update($id, $colval = array(), $type = '') { if (!$colval or !count($colval)) { return false; } list($distant, $table) = distant_table($type); if ($distant) { list($nom_table, $where) = table_where($type, $id); if (!$nom_table) { return false; } $update = $sep = ''; foreach ($colval as $col => $val) { $update .= $sep . '`' . $col . '`=' . _q($val); $sep = ', '; } $a = spip_query($q = 'UPDATE `' . $nom_table . '` SET ' . $update . ' WHERE ' . $where, $distant); #spip_log($q); include_spip('inc/invalideur'); suivre_invalideur($cond, $modif = true); } else { // cle primaire composee : 3-4-rubrique // calculer un where approprie // et modifier sans passer par la fonction destinee aux tables principales // on limite a SPIP 2 mini car sql_updateq n'est pas mappe dans les crayons_compat if (is_scalar($id) and $GLOBALS['spip_version_code'] >= '1.93') { list($nom_table, $where) = table_where($type, $id, true); // where sous forme de tableau $a = sql_updateq($nom_table, $colval, $where); } else { // modification d'une table principale include_spip('inc/modifier'); $a = modifier_contenu($type, $id, array(), $colval); } } return $a; }
} } // Creation d'un nouvel article du WIKI -- cf. inc-entete if (_request('ajouter_page_wiki') !== NULL and !preg_match(",http://,", _request('ajouter_page_wiki')) and _request('id_rubrique') !== NULL and !_request('pas_de_robot_merci') and _request('id_rubrique') == $GLOBALS['contexte']['id_rubrique']) { $id_rubrique = intval($_POST['id_rubrique']); $id_article = null; // on verifie d'abord qu'un article de ce titre n'existe pas deja $s = sql_query("SELECT id_article FROM spip_articles WHERE titre=" . _q(_request('ajouter_page_wiki')) . " OR url_propre=" . _q(_request('ajouter_page_wiki'))); if ($t = sql_fetch($s)) { $id_article = $t['id_article']; } else { include_spip('inc/autoriser'); if (autoriser('publierdans', 'rubrique', $id_rubrique)) { include_spip('action/editer_article'); $id_article = insert_article($id_rubrique); include_spip('inc/modifier'); $r = modifier_contenu('article', $id_article, array('champs' => array('titre', 'statut')), array('titre' => _request('ajouter_page_wiki'), 'statut' => 'publie')); # pour SPIP 1.9.3 if (function_exists('instituer_article')) { instituer_article($id_article, array('statut' => 'publie')); } } } if (!$id_article) { die("Erreur : creation d'article interdite"); } charger_generer_url(); include_spip('inc/headers'); redirige_par_entete(generer_url_article($id_article, '&')); } define('RUBRIQUE_WIKI_OK', true);
/** * Enregistre la revision d'un niveau * * @param int $id_niveau * @param array $c * @return string */ function adhclub_revision_adhniv($id_niveau, $c = false) { modifier_contenu('adhniv', $id_niveau, array('nonvide' => array('titre' => _T('info_sans_titre'))), $c); return ''; // pas d'erreur }
function revisions_rubriques($id_rubrique, $c=false) { include_spip('inc/autoriser'); include_spip('inc/filtres'); // champs normaux if ($c === false) { $c = array(); foreach (array( 'titre', 'texte', 'descriptif', 'extra', 'id_parent', 'confirme_deplace' ) as $champ) if (($a = _request($champ)) !== null) $c[$champ] = $a; } include_spip('inc/modifier'); modifier_contenu('rubrique', $id_rubrique, array( 'nonvide' => array('titre' => _T('info_sans_titre')) ), $c); // Deplacer la rubrique if (isset($c['id_parent'])) { $c['confirme_deplace'] = _request('confirme_deplace', $c); instituer_rubrique($id_rubrique, $c); } // invalider les caches marques de cette rubrique include_spip('inc/invalideur'); suivre_invalideur("id='id_rubrique/$id_rubrique'"); // et celui de menu_rubriques effacer_meta("date_calcul_rubriques"); }
function revision_forum($id_forum, $c=false) { $t = sql_fetsel("*", "spip_forum", "id_forum=".sql_quote($id_forum)); if (!$t) { spip_log("erreur forum $id_forum inexistant"); return; } // Calculer l'invalideur des caches lies a ce forum if ($t['statut'] == 'publie') { include_spip('inc/invalideur'); $invalideur = "id='id_forum/" . calcul_index_forum( $t['id_article'], $t['id_breve'], $t['id_rubrique'], $t['id_syndic'] ) . "'"; } else $invalideur = ''; // Supprimer 'http://' tout seul if (isset($c['url_site'])) { include_spip('inc/filtres'); $c['url_site'] = vider_url($c['url_site'], false); } $r = modifier_contenu('forum', $id_forum, array( 'nonvide' => array('titre' => _T('info_sans_titre')), 'invalideur' => $invalideur ), $c); $id_thread = $t["id_thread"]; $cles = array(); foreach (array('id_article', 'id_rubrique', 'id_syndic', 'id_breve') as $k) { if (isset($c[$k])) $cles[$k] = $c[$k]; } // Modification des id_article etc // (non autorise en standard mais utile pour des crayons) // on deplace tout le thread {sauf les originaux}. if ($cles) { sql_updateq("spip_forum", $cles, "id_thread=$id_thread AND statut!='original'"); // on n'affecte pas $r, car un deplacement ne change pas l'auteur } // s'il y a vraiment eu une modif, on // enregistre le nouveau date_thread, // si le message est bien publie ou si c'est un thread non public if ($r AND ($t['statut'] == 'publie' OR !sql_countsel("spip_forum", "statut='publie' AND id_thread=".intval($id_thread)))) { // on ne stocke ni le numero IP courant ni le nouvel id_auteur // dans le message modifie (trop penible a l'usage) ; mais du // coup attention a la responsabilite editoriale /* sql_updateq('spip_forum', array('ip'=>($GLOBALS['ip']), 'id_auteur'=>($GLOBALS['visiteur_session']['id_auteur'])),"id_forum=".sql_quote($id_forum)); */ // & meme ca ca pourrait etre optionnel sql_updateq("spip_forum", array("date_thread" => date('Y-m-d H:i:s')), "id_thread=".intval($id_thread)); } }
function remplace_en_base($recherche='', $remplace=NULL, $tables=NULL, $options=array()) { include_spip('inc/modifier'); // options par defaut $options = array_merge(array( 'preg_flags' => 'UimsS', 'toutmodifier' => false ), $options ); $options['champs'] = true; if (!is_array($tables)) $tables = liste_des_champs(); $results = recherche_en_base($recherche, $tables, $options); $preg = '/'.str_replace('/', '\\/', $recherche).'/' . $options['preg_flags']; foreach ($results as $table => $r) { $_id_table = id_table_objet($table); foreach ($r as $id => $x) { if ($options['toutmodifier'] OR autoriser('modifier', $table, $id)) { $modifs = array(); foreach ($x['champs'] as $key => $val) { if ($key == $_id_table) next; $repl = preg_replace($preg, $remplace, $val); if ($repl <> $val) $modifs[$key] = $repl; } if ($modifs) modifier_contenu($table, $id, array( 'champs' => array_keys($modifs), ), $modifs); } } } }
/** * Enregistre la revision d'une zone * * @param int $id_zone * @param array $c * @return string */ function accesrestreint_revision_zone($id_zone, $c=false) { modifier_contenu('zone', $id_zone, array( 'nonvide' => array('titre' => _T('info_sans_titre')), ), $c); return ''; // pas d'erreur }
function document_fichier_revision($id, $data, $type, $ref) { $s = spip_query("SELECT * FROM spip_documents WHERE id_document=" . intval($id)); if (!($t = sql_fetch($s))) { return false; } /* // Envoi d'une URL de document distant ? // TODO: verifier l'extension distante, sinon tout explose if ($data['fichier'] AND preg_match(',^(https?|ftp)://.+,', $data['fichier'])) { include_spip('inc/modifier'); modifier_contenu('document', $id, array('champs' => array('fichier', 'distant')), array('fichier' => $data['fichier'], 'distant' => 'oui') ); return true; } else */ // Chargement d'un nouveau doc ? if ($data['document']) { $arg = $data['document']; /** * Méthode >= SPIP 3.0 * ou SPIP 2.x + Mediathèque */ if ($ajouter_documents = charger_fonction('ajouter_documents', 'action', true)) { $actifs = $ajouter_documents($id, array($arg), '', 0, $t['mode']); $x = reset($actifs); if (is_numeric($x)) { return true; } else { return false; } } else { if ($ajouter_documents = charger_fonction('ajouter_documents', 'inc', true)) { check_upload_error($arg['error']); $x = $ajouter_documents($arg['tmp_name'], $arg['name'], 'article', 0, 'document', null, $actifs); // $actifs contient l'id_document nouvellement cree // on recopie les donnees interessantes dans l'ancien $extension = ", extension "; //compat 192 if ($GLOBALS['spip_version_code'] < '1.93') { $extension = ""; } if ($id_new = array_pop($actifs) and $s = spip_query("SELECT fichier, taille, largeur, hauteur {$extension}, distant FROM spip_documents\r\n\t\t\t\tWHERE id_document=" . _q($id_new)) and $new = sql_fetch($s)) { define('FILE_UPLOAD', true); // message pour crayons_json_export :( // Une vignette doit rester une image if ($t['mode'] == 'vignette' and !in_array($new['extension'], array('jpg', 'gif', 'png'))) { return false; } // Maintenant on est bon, on recopie les nouvelles donnees // dans l'ancienne ligne spip_documents include_spip('inc/modifier'); modifier_contenu('document', $id, array('champs' => array_keys($new)), $new); // supprimer l'ancien document (sauf s'il etait distant) if ($t['distant'] != 'oui' and file_exists(get_spip_doc($t['fichier']))) { supprimer_fichier(get_spip_doc($t['fichier'])); } // Effacer la ligne temporaire de spip_document spip_query("DELETE FROM spip_documents WHERE id_document=" . _q($id_new)); // oublier id_document temporaire (ca marche chez moi, sinon bof) spip_query("ALTER TABLE spip_documents AUTO_INCREMENT=" . _q($id_new)); return true; } } } } }
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); }
function agenda_action_revision_evenement ($id_evenement, $c=false) { if ($c['id_parent']) { // Si l'article est publie, invalider les caches et demander sa reindexation $t = sql_getfetsel("statut", "spip_articles", "id_article=".intval($c['id_parent'])); if ($t == 'publie') { $invalideur = "id='id_article/$id_article'"; $indexation = true; } } modifier_contenu('evenement', $id_evenement, array( 'nonvide' => array('titre' => _T('info_sans_titre')), 'invalideur' => $invalideur, 'indexation' => $indexation ), $c); return ''; // pas d'erreur }
/** * Enregistre la revision d'une cotisation * * @param int $id_coti * @param array $c * @return string */ function adhclub_revision_adhcoti($id_coti, $c = false) { /*$debug1= "DEBUG plugin JR : action/editer_adhcoti.php - adhclub_revision_adhcoti - Pt02 - <br />"; echo "<br />", $debug1; echo "id_coti= $id_coti.<br />"; // un tableau (array) echo "c= <br />"; var_dump($c); echo ".<br />"; echo "FIN ", $debug1; */ modifier_contenu('adhcoti', $id_coti, array('nonvide' => array('titre' => _T('info_sans_titre'))), $c); return ''; // pas d'erreur }
function stage_action_revision_candidature($id_candidature, $c = false) { modifier_contenu('candidature', $id_candidature, '', $c); return ''; // pas d'erreur }
function revision_abonnement($id_abonnement, $c = false) { modifier_contenu('abonnement', $id_abonnement, array('nonvide' => array('titre' => _T('info_sans_titre'))), $c); }