/** * Appelle toutes les fonctions de modification d'un auteur * * @param int $id_auteur * @param array $set * @param bool $force_update * permet de forcer la maj en base des champs fournis, sans passer par instancier * utilise par auth/spip * @return string */ function auteur_modifier($id_auteur, $set = null, $force_update = false) { include_spip('inc/modifier'); include_spip('inc/filtres'); $c = collecter_requests(objet_info('auteur', 'champs_editables'), $force_update ? array() : array('webmestre', 'pass', 'login'), $set); if ($err = objet_modifier_champs('auteur', $id_auteur, array('nonvide' => array('nom' => _T('ecrire:item_nouvel_auteur'))), $c)) { return $err; } $session = $c; $err = ''; if (!$force_update) { // Modification de statut, changement de rubrique ? $c = collecter_requests(array('statut', 'new_login', 'new_pass', 'login', 'pass', 'webmestre', 'restreintes', 'id_parent'), array(), $set); if (isset($c['new_login']) and !isset($c['login'])) { $c['login'] = $c['new_login']; } if (isset($c['new_pass']) and !isset($c['pass'])) { $c['pass'] = $c['new_pass']; } $err = auteur_instituer($id_auteur, $c); $session = array_merge($session, $c); } // .. mettre a jour les sessions de cet auteur include_spip('inc/session'); $session['id_auteur'] = $id_auteur; unset($session['new_login']); unset($session['new_pass']); actualiser_sessions($session); return $err; }
/** * Modifier un mot * @param int $id_mot * @param array $set * @return string */ function mot_modifier($id_mot, $set = null) { include_spip('inc/modifier'); $c = collecter_requests(array('titre', 'descriptif', 'texte', 'id_groupe'), array('id_groupe'), $set); if ($err = objet_modifier_champs('mot', $id_mot, array('nonvide' => array('titre' => _T('info_sans_titre'))), $c)) { return $err; } $c = collecter_requests(array('id_groupe', 'type'), array(), $set); $err = mot_instituer($id_mot, $c); return $err; }
/** * Modifier une souscription * * $c est un contenu (par defaut on prend le contenu via _request()) * * @param int $id_souscription * @param array|bool $set * @return string */ function souscription_modifier($id_souscription, $set = false) { include_spip('inc/modifier'); $c = collecter_requests(objet_info('souscription', 'champs_editables'), array(), $set); /* Récupération du nom du pays */ $code_pays = _request('pays'); $pays = sql_getfetsel(sql_multi("nom", $GLOBALS['spip_lang']), 'spip_pays', "code=" . sql_quote($code_pays)); $c = array_merge($c, array("pays" => $pays)); if ($err = objet_modifier_champs('souscription', $id_souscription, array(), $c)) { return $err; } }
/** * Mettre a jour une signature existante * * @param int $id_signature * @param array $set * @return string */ function signature_modifier($id_signature, $set = null) { $err = ''; include_spip('inc/modifier'); $c = collecter_requests(array("nom_email", "ad_email", "nom_site", "url_site", "message", "statut"), array('statut', 'id_petition', 'date_time'), $set); if ($err = objet_modifier_champs('signature', $id_signature, array('nonvide' => array('nom_email' => _T('info_sans_titre'))), $c)) { return $err; } // Modification de statut $c = collecter_requests(array('statut', 'id_petition', 'date_time'), array(), $set); $err .= signature_instituer($id_signature, $c); return $err; }
/** * Mettre a jour une petition existante * * @param int $id_petition * @param array $set * @return string */ function petition_modifier($id_petition, $set = null) { $err = ''; include_spip('inc/modifier'); $c = collecter_requests(array("email_unique", "site_obli", "site_unique", "message", "texte"), array('statut', 'id_article'), $set); if ($err = objet_modifier_champs('petition', $id_petition, array(), $c)) { return $err; } // changement d'article ou de statut ? $c = collecter_requests(array('statut', 'id_article'), array(), $set); $err .= petition_instituer($id_petition, $c); return $err; }
function revision_forum($id_forum, $c = false) { $t = sql_fetsel("*", "spip_forum", "id_forum=" . intval($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 = array("id='forum/{$id_forum}'", "id='" . $t['objet'] . "/" . $t['id_objet'] . "'"); } else { $invalideur = ''; } // Supprimer 'http://' tout seul if (isset($c['url_site'])) { include_spip('inc/filtres'); $c['url_site'] = vider_url($c['url_site'], false); } $err = objet_modifier_champs('forum', $id_forum, array('nonvide' => array('titre' => _T('info_sans_titre')), 'invalideur' => $invalideur), $c); $t = $t["id_thread"]; $cles = array(); foreach (array('id_objet', 'objet') as $k) { if (isset($c[$k]) and $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 (count($cles) and $t) { spip_log("update thread id_thread={$t} avec " . var_export($cles, 1), 'forum.' . _LOG_INFO_IMPORTANTE); sql_updateq("spip_forum", $cles, "id_thread=" . intval($t) . " 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 if ($err === '') { // 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=".intval($id_forum)); */ // & meme ca ca pourrait etre optionnel sql_updateq("spip_forum", array("date_thread" => date('Y-m-d H:i:s')), "id_thread=" . $t); } }
/** * Modifier une breve en base * $c est un contenu (par defaut on prend le contenu via _request()) * * http://code.spip.net/@revisions_breves * * @param int $id_breve * @param array $set * @return string|bool */ function breve_modifier($id_breve, $set = null) { include_spip('inc/modifier'); $c = collecter_requests(array('titre', 'texte', 'lien_titre', 'lien_url'), array('id_parent', 'statut'), $set); // 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='breve/{$id_breve}'"; $indexation = true; } if ($err = objet_modifier_champs('breve', $id_breve, array('nonvide' => array('titre' => _T('breves:titre_nouvelle_breve') . " " . _T('info_numero_abbreviation') . $id_breve), 'invalideur' => $invalideur, 'indexation' => $indexation), $c)) { return $err; } $c = collecter_requests(array('id_parent', 'statut'), array(), $set); $err = breve_instituer($id_breve, $c); return $err; }
/** * Modifier une zone en base * $c est un contenu (par defaut on prend le contenu via _request()) * * @param int $id_zone * @param array $set * @return string|bool */ function zone_modifier($id_zone, $set = null) { include_spip('inc/modifier'); $c = collecter_requests(array('titre', 'descriptif', 'publique', 'privee'), array(), $set); // Si la zone est publiee, invalider les caches et demander sa reindexation $invalideur = $indexation = ''; $t = sql_getfetsel("statut", "spip_zones", "id_zone={$id_zone}"); if ($t == 'publie') { $invalideur = "id='zone/{$id_zone}'"; $indexation = true; } if ($err = objet_modifier_champs('zone', $id_zone, array('nonvide' => array('titre' => _T('info_sans_titre')), 'invalideur' => $invalideur, 'indexation' => $indexation), $c)) { return $err; } zone_lier($id_zone, 'rubrique', _request('rubriques'), 'set'); return $err; }
/** * Modifier un groupe de mot * @param int $id_groupe * @param array|null $set * @return string */ function groupemots_modifier($id_groupe, $set = null) { $err = ''; include_spip('inc/modifier'); $c = collecter_requests(array('titre', 'descriptif', 'texte', 'tables_liees', 'obligatoire', 'unseul', 'comite', 'forum', 'minirezo'), array(), $set); // normaliser les champ oui/non foreach (array('obligatoire', 'unseul', 'comite', 'forum', 'minirezo') as $champ) { if (isset($c[$champ])) { $c[$champ] = $c[$champ] == 'oui' ? 'oui' : 'non'; } } if (isset($c['tables_liees']) and is_array($c['tables_liees'])) { $c['tables_liees'] = implode(',', array_diff($c['tables_liees'], array(''))); } $err = objet_modifier_champs('groupe_mot', $id_groupe, array('nonvide' => array('titre' => _T('info_sans_titre'))), $c); return $err; }
/** * Appelle toutes les fonctions de modification d'un objet * $err est un message d'erreur eventuelle * * @param string 'spip_reservation_credit_mouvement' * @param int $id * @param array|null $set * @return mixed|string */ function reservation_credit_modifier($id, $set = null) { spip_log($ste, 'teste'); $table_sql = 'spip_reservation_credits'; $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table_sql); if (!$desc or !isset($desc['field'])) { spip_log("Objet 'spip_reservation_credit_mouvement' inconnu dans objet_modifier", _LOG_ERREUR); return _L("Erreur objet 'spip_reservation_credit_mouvement' inconnu"); } include_spip('inc/modifier'); $champ_date = 'date_creation'; $white = array_keys($desc['field']); // on ne traite pas la cle primaire par defaut, notamment car // sur une creation, id_x vaut 'oui', et serait enregistre en id_x=0 dans la base $white = array_diff($white, array($desc['key']['PRIMARY KEY'])); if (isset($desc['champs_editables']) and is_array($desc['champs_editables'])) { $white = $desc['champs_editables']; } $c = collecter_requests($white, array($champ_date, 'statut', 'id_parent', 'id_secteur'), $set); $c['id_reservation_credit'] = $id_reservation_credit; // Si l'objet est publie, invalider les caches et demander sa reindexation if (objet_test_si_publie('reservation_credit', $id)) { $invalideur = "id='reservation_credit_mouvement/{$id}'"; $indexation = true; } else { $invalideur = ""; $indexation = false; } if ($err = objet_modifier_champs('reservation_credit', $id, array('nonvide' => '', 'invalideur' => $invalideur, 'indexation' => $indexation, 'date_modif' => isset($desc['field']['date_modif']) ? 'date_modif' : ''), $c)) { return $err; } // Modification de statut, changement de rubrique ? // FIXME: Ici lorsqu'un $set est passé, la fonction collecter_requests() retourne tout // le tableau $set hors black liste, mais du coup on a possiblement des champs en trop. $c = collecter_requests(array($champ_date, 'statut', 'id_parent'), array(), $set); $err = objet_instituer('reservation_credit', $id, $c); return $err; }
/** * Appelle toutes les fonctions de modification d'un article * $err est de la forme chaine de langue ou vide si pas d'erreur * http://doc.spip.org/@articles_set * * @param $id_article * @param null $set * @return string */ function article_modifier($id_article, $set = null) { // unifier $texte en cas de texte trop long trop_longs_articles(); include_spip('inc/modifier'); include_spip('inc/filtres'); $c = collecter_requests(objet_info('article', 'champs_editables'), array('date', 'statut', 'id_parent'), $set); // Si l'article est publie, invalider les caches et demander sa reindexation $t = sql_getfetsel("statut", "spip_articles", "id_article=" . intval($id_article)); $invalideur = $indexation = false; if ($t == 'publie') { $invalideur = "id='article/{$id_article}'"; $indexation = true; } if ($err = objet_modifier_champs('article', $id_article, array('nonvide' => array('titre' => _T('info_nouvel_article') . " " . _T('info_numero_abbreviation') . $id_article), 'invalideur' => $invalideur, 'indexation' => $indexation, 'date_modif' => 'date_modif'), $c)) { return $err; } // Modification de statut, changement de rubrique ? $c = collecter_requests(array('date', 'statut', 'id_parent'), array(), $set); $err = article_instituer($id_article, $c); return $err; }
/** * Enregistre une revision de document. * $set est un contenu (par defaut on prend le contenu via _request()) * * @param int $id_document * @param array|bool $set */ function document_modifier($id_document, $set = false) { include_spip('inc/modifier'); include_spip('inc/filtres'); // champs normaux $champs = collecter_requests(objet_info('document', 'champs_editables'), array('parents', 'ajout_parents'), $set); $invalideur = ""; $indexation = false; // Si le document est publie, invalider les caches et demander sa reindexation $t = sql_getfetsel("statut", "spip_documents", 'id_document=' . intval($id_document)); if ($t == 'publie') { $invalideur = "id='id_document/{$id_document}'"; $indexation = true; } $ancien_fichier = ""; // si le fichier est modifie, noter le nom de l'ancien pour faire le menage if (isset($champs['fichier'])) { $ancien_fichier = sql_getfetsel('fichier', 'spip_documents', 'id_document=' . intval($id_document)); } if ($err = objet_modifier_champs('document', $id_document, array('invalideur' => $invalideur, 'indexation' => $indexation), $champs)) { return $err; } // nettoyer l'ancien fichier si necessaire if ($champs['fichier'] and $ancien_fichier and $ancien_fichier !== $champs['fichier'] and @file_exists($f = get_spip_doc($ancien_fichier))) { spip_unlink($f); } // Changer le statut du document ? // le statut n'est jamais fixe manuellement mais decoule de celui des objets lies $champs = collecter_requests(array('parents', 'ajouts_parents'), array(), $set); if (document_instituer($id_document, $champs)) { // // Post-modifications // // Invalider les caches include_spip('inc/invalideur'); suivre_invalideur("id='id_document/{$id_document}'"); } }
/** * Modifier un evenement existant * * @param int $id_evenement * @param array $set * @return bool|string */ function evenement_modifier($id_evenement, $set = null) { include_spip('inc/modifier'); include_spip('inc/filtres'); $c = collecter_requests(objet_info('evenement', 'champs_editables'), array('statut', 'id_article'), $set); // Si l'evenement est publie, invalider les caches et demander sa reindexation $t = sql_getfetsel('statut', 'spip_evenements', 'id_evenement=' . intval($id_evenement)); $invalideur = $indexation = false; if ($t == 'publie') { $invalideur = "id='evenement/{$id_evenement}'"; $indexation = true; } if ($err = objet_modifier_champs('evenement', $id_evenement, array('data' => $set, 'nonvide' => array('titre' => _T('info_nouvel_evenement') . ' ' . _T('info_numero_abbreviation') . $id_evenement), 'invalideur' => $invalideur, 'indexation' => $indexation), $c)) { return $err; } if (!is_null($repetitions = _request('repetitions', $set))) { agenda_action_revision_evenement_repetitions($id_evenement, $repetitions); } // Modification de statut, changement de parent ? $c = collecter_requests(array('statut', 'id_parent'), array(), $set); $err = evenement_instituer($id_evenement, $c); return $err; }
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) { objet_modifier_champs($table, $id, array('champs' => array_keys($modifs)), $modifs); } } } } }
/** * Modifier un site * * $c est un contenu (par defaut on prend le contenu via _request()) * * @param int $id_syndic * @param array|bool $set * @return string */ function site_modifier($id_syndic, $set = false) { $resyndiquer = false; include_spip('inc/rubriques'); include_spip('inc/modifier'); $c = collecter_requests(array('nom_site', 'url_site', 'descriptif', 'url_syndic', 'syndication', 'moderation', 'miroir', 'oubli', 'resume'), array('statut', 'id_parent', 'date'), $set); // resyndiquer si un element de syndication modifie if ($t = sql_fetsel('url_syndic,syndication,resume', 'spip_syndic', "id_syndic=" . intval($id_syndic))) { foreach ($t as $k => $v) { if (isset($c[$k]) and $v != $c[$k]) { $resyndiquer = true; } } } // Si le site est publie, invalider les caches et demander sa reindexation $t = sql_getfetsel("statut", "spip_syndic", "id_syndic=" . intval($id_syndic)); if ($t == 'publie') { $invalideur = "id='site/{$id_syndic}'"; $indexation = true; } if ($err = objet_modifier_champs('site', $id_syndic, array('nonvide' => array('nom_site' => _T('info_sans_titre')), 'invalideur' => $invalideur, 'indexation' => $indexation), $c)) { return $err; } if ($resyndiquer and sql_getfetsel('syndication', 'spip_syndic', "id_syndic=" . intval($id_syndic)) !== 'non') { $syndiquer_site = charger_fonction('syndiquer_site', 'action'); $syndiquer_site($id_syndic); } // Modification de statut, changement de rubrique ? $c = collecter_requests(array('date', 'statut', 'id_parent'), array(), $set); include_spip('action/editer_objet'); $err = objet_instituer('site', $id_syndic, $c); return $err; }
/** * Insère un article syndiqué * * Vérifie que l'article n'a pas déjà été inséré par * un autre item du même feed qui aurait le meme link. * * @pipeline_appel pre_insertion * @pipeline_appel post_insertion * @pipeline_appel post_syndication * * @param array $data * @param int $now_id_syndic * @param string $statut * @param string $url_site * @param string $url_syndic * @param string $resume * @param array $faits * @return bool * true si l'article est nouveau, false sinon. **/ function inserer_article_syndique($data, $now_id_syndic, $statut, $url_site, $url_syndic, $resume, &$faits) { // Creer le lien s'il est nouveau - cle=(id_syndic,url) $le_lien = $data['url']; /** * URL unique de syndication * * Si true, un lien déjà syndiqué arrivant par une autre source est ignoré * par defaut `false`, chaque source a sa liste de liens, éventuellement les mêmes * * @var bool */ if (!defined('_SYNDICATION_URL_UNIQUE')) { define('_SYNDICATION_URL_UNIQUE', false); } /** * Actualiser les contenus syndiqués * * Si false, on ne met pas à jour un lien déjà syndiqué avec ses nouvelles * données ; par defaut `true` : on met a jour si le contenu a changé * * Attention si on modifie à la main un article syndiqué, les modifs sont * écrasées lors de la syndication suivante * * @var bool **/ if (!defined('_SYNDICATION_CORRECTION')) { define('_SYNDICATION_CORRECTION', true); } // est-ce un nouvel article ? $ajout = false; // Chercher les liens de meme cle // S'il y a plusieurs liens qui repondent, il faut choisir le plus proche // (ie meme titre et pas deja fait), le mettre a jour et ignorer les autres $n = 0; $s = sql_select("id_syndic_article,titre,id_syndic,statut", "spip_syndic_articles", "url=" . sql_quote($le_lien) . (_SYNDICATION_URL_UNIQUE ? '' : " AND id_syndic={$now_id_syndic}") . " AND " . sql_in('id_syndic_article', $faits, 'NOT'), "", "maj DESC"); while ($a = sql_fetch($s)) { $id = $a['id_syndic_article']; $id_syndic = $a['id_syndic']; if ($a['titre'] == $data['titre']) { $id_syndic_article = $id; break; } $n++; } // S'il y en avait qu'un, le prendre quel que soit le titre if ($n == 1) { $id_syndic_article = $id; } elseif (!isset($id_syndic_article)) { $champs = array('id_syndic' => $now_id_syndic, 'url' => $le_lien, 'date' => date("Y-m-d H:i:s", $data['date'] ? $data['date'] : $data['lastbuilddate']), 'statut' => $statut); // Envoyer aux plugins $champs = pipeline('pre_insertion', array('args' => array('table' => 'spip_syndic_articles'), 'data' => $champs)); $ajout = $id_syndic_article = sql_insertq('spip_syndic_articles', $champs); if (!$ajout) { return; } pipeline('post_insertion', array('args' => array('table' => 'spip_syndic_articles', 'id_objet' => $id_syndic_article), 'data' => $champs)); } $faits[] = $id_syndic_article; // Si le lien n'est pas nouveau, plusieurs options : if (!$ajout) { // 1. Lien existant : on corrige ou pas ? if (!_SYNDICATION_CORRECTION) { return; } // 2. Le lien existait deja, lie a un autre spip_syndic if (_SYNDICATION_URL_UNIQUE and $id_syndic != $now_id_syndic) { return; } } // Descriptif, en mode resume ou mode 'full text' // on prend en priorite data['descriptif'] si on est en mode resume, // et data['content'] si on est en mode "full syndication" if ($resume != 'non') { // mode "resume" $desc = (isset($data['descriptif']) and strlen($data['descriptif'])) ? $data['descriptif'] : (isset($data['content']) ? $data['content'] : ''); $desc = couper(trim_more(textebrut($desc)), 300); } else { // mode "full syndication" // choisir le contenu pertinent // & refaire les liens relatifs $desc = strlen($data['content']) ? $data['content'] : $data['descriptif']; $desc = liens_absolus($desc, $url_syndic); } // tags & enclosures (preparer spip_syndic_articles.tags) $tags = $data['enclosures'] ? $data['enclosures'] : ''; # eviter les doublons (cle = url+titre) et passer d'un tableau a une chaine if ($data['tags']) { $vus = array(); foreach ($data['tags'] as $tag) { $cle = supprimer_tags($tag) . extraire_attribut($tag, 'href'); $vus[$cle] = $tag; } $tags .= ($tags ? ', ' : '') . join(', ', $vus); } // Mise a jour du contenu (titre,auteurs,description,date?,source...) $vals = array('titre' => $data['titre'], 'lesauteurs' => $data['lesauteurs'], 'descriptif' => $desc, 'lang' => substr($data['lang'], 0, 10), 'source' => isset($data['source']) ? substr($data['source'], 0, 255) : '', 'url_source' => isset($data['url_source']) ? substr($data['url_source'], 0, 255) : '', 'tags' => $tags); // Mettre a jour la date si lastbuilddate if (isset($data['lastbuilddate']) and $data['lastbuilddate']) { $vals['date'] = date("Y-m-d H:i:s", $data['lastbuilddate']); } include_spip('inc/modifier'); objet_modifier_champs('syndic_article', $id_syndic_article, array('data' => $vals, 'action' => 'syndiquer'), $vals); // Point d'entree post_syndication pipeline('post_syndication', array('args' => array('table' => 'spip_syndic_articles', 'id_objet' => $id_syndic_article, 'url' => $le_lien, 'id_syndic' => $now_id_syndic, 'ajout' => $ajout), 'data' => $data)); return $ajout; }
/** * Modifier une rubrique en base * * @param int $id_rubrique * Identifiant de la rubrique modifiée * @param array|null $set * Tableau qu'on peut proposer en lieu et place de _request() * @return bool|string * - false : Aucune modification, aucun champ n'est à modifier * - chaîne vide : Vide si tout s'est bien passé * - chaîne : Texte d'un message d'erreur */ function rubrique_modifier($id_rubrique, $set = null) { include_spip('inc/autoriser'); include_spip('inc/filtres'); include_spip('inc/modifier'); $c = collecter_requests(objet_info('rubrique', 'champs_editables'), array('id_parent', 'confirme_deplace'), $set); if ($err = objet_modifier_champs('rubrique', $id_rubrique, array('data' => $set, 'nonvide' => array('titre' => _T('titre_nouvelle_rubrique') . " " . _T('info_numero_abbreviation') . $id_rubrique)), $c)) { return $err; } $c = collecter_requests(array('id_parent', 'confirme_deplace'), array(), $set); // Deplacer la rubrique if (isset($c['id_parent'])) { $err = rubrique_instituer($id_rubrique, $c); } // invalider les caches marques de cette rubrique include_spip('inc/invalideur'); suivre_invalideur("id='rubrique/{$id_rubrique}'"); // et celui de menu_rubriques effacer_meta("date_calcul_rubriques"); return $err; }
/** * Modifie un contenu * * Dépreciée : * Fonction générique pour l'API de modification de contenu * * @deprecated * @param string $type * Type d'objet * @param int $id * Identifiant de l'objet * @param array $options * Toutes les options * @param array|null $c * Couples champ/valeur à modifier * @param string $serveur * Nom du connecteur à la base de données * @return bool * true si quelque chose est modifié correctement * false sinon (erreur ou aucun champ modifié) */ function modifier_contenu($type, $id, $options, $c = null, $serveur = '') { $res = objet_modifier_champs($type, $id, $options, $c, $serveur); return $res === '' ? true : false; }
/** * Appelle toutes les fonctions de modification d'un objet * $err est un message d'erreur eventuelle * * @param int $id * @param array|null $set * @return mixed|string */ function reservation_credit_mouvement_modifier($id, $set = null) { $table_sql = 'spip_reservation_credit_mouvements'; $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table_sql); if (!$desc or !isset($desc['field'])) { spip_log("Objet 'spip_reservation_credit_mouvement' inconnu dans objet_modifier", _LOG_ERREUR); return _L("Erreur objet 'spip_reservation_credit_mouvement' inconnu"); } include_spip('inc/modifier'); $champ_date = ''; if (isset($desc['date']) and $desc['date']) { $champ_date = $desc['date']; } elseif (isset($desc['field']['date'])) { $champ_date = 'date'; } $white = array_keys($desc['field']); // on ne traite pas la cle primaire par defaut, notamment car // sur une creation, id_x vaut 'oui', et serait enregistre en id_x=0 dans la base $white = array_diff($white, array($desc['key']['PRIMARY KEY'])); if (isset($desc['champs_editables']) and is_array($desc['champs_editables'])) { $white = $desc['champs_editables']; } // Si il n'y pas encore de compte crédit pour l'email en question, on le crée $id_reservation_credit = _request('id_reservation_credit') ? _request('id_reservation_credit') : (isset($set['id_reservation_credit']) ? $set['id_reservation_credit'] : ''); $email = _request('email') ? _request('email') : (isset($set['email']) ? $set['email'] : ''); if (!$id_reservation_credit) { if (!($id_reservation_credit = sql_getfetsel('id_reservation_credit', 'spip_reservation_credits', 'email = ' . sql_quote($email)))) { $action = charger_fonction('editer_objet', 'action'); $reservation_credit = $action('new', 'reservation_credit'); $id_reservation_credit = $reservation_credit[0]; } } $c = collecter_requests($white, array($champ_date, 'statut', 'id_parent', 'id_secteur'), $set); $c['id_reservation_credit'] = $id_reservation_credit; // Si l'objet est publie, invalider les caches et demander sa reindexation if (objet_test_si_publie('reservation_credit_mouvement', $id)) { $invalideur = "id='reservation_credit_mouvement/{$id}'"; $indexation = true; } else { $invalideur = ""; $indexation = false; } if ($err = objet_modifier_champs('reservation_credit_mouvement', $id, array('nonvide' => '', 'invalideur' => $invalideur, 'indexation' => $indexation, 'date_modif' => isset($desc['field']['date_modif']) ? 'date_modif' : ''), $c)) { return $err; } // Modification de statut, changement de rubrique ? // FIXME: Ici lorsqu'un $set est passé, la fonction collecter_requests() retourne tout // le tableau $set hors black liste, mais du coup on a possiblement des champs en trop. $c = collecter_requests(array($champ_date, 'statut', 'id_parent'), array(), $set); $err = objet_instituer('reservation_credit_mouvement', $id, $c); // Actualiser le montant de crédit $sql = sql_select('montant,type,devise', 'spip_reservation_credit_mouvements', 'id_reservation_credit=' . $id_reservation_credit); $montant = array(); while ($data = sql_fetch($sql)) { $id = isset($data['devise']) ? $data['devise'] : 'sans_devise'; if ($data['type'] == 'credit') { $montant[$id] = $montant[$id] + $data['montant']; } elseif ($data['type'] == 'debit') { $montant[$id] = $montant[$id] - $data['montant']; } } sql_updateq('spip_reservation_credits', array('credit' => serialize($montant)), 'id_reservation_credit=' . $id_reservation_credit); return $err; }