/** * 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']); } } } } }
/** * 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 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; }
/** * Changer de statut si transaction en attente * * @pipeline trig_bank_reglement_en_attente * * @param array $flux * @return array */ function reservation_bank_trig_bank_reglement_en_attente($flux) { $id_reservation = sql_getfetsel('id_reservation', 'spip_transactions', 'id_transaction=' . $flux['args']['id_transaction']); include_spip('action/editer_objet'); objet_instituer('reservation', $id_reservation, array('statut' => 'attente_paiement')); return $flux; }
/** * Traitements du formulaire instituer objet * * @param string $objet * Type d'objet * @param int $id_objet * Identifiant de l'objet * @param string $retour * URL de redirection après le traitement * @param bool $editable * Indique si le statut est éditable ou non. * @return array * Retour des traitements */ function formulaires_instituer_objet_traiter_dist($objet, $id_objet, $retour = "", $editable = true) { $c = array('statut' => _request('statut')); // si on a envoye une 'date_posterieure', l'enregistrer // todo dans le HTML if ($d = _request('date_posterieure')) { $c['date'] = $d; } include_spip('action/editer_objet'); if ($err = objet_instituer($objet, $id_objet, $c)) { $res = array('message_erreur' => $err); } else { $res = array('message_ok' => _T('info_modification_enregistree')); if ($retour) { $res['redirect'] = $retour; } set_request('statut'); set_request('date_posterieure'); } return $res; }
function instituer_syndic($id_syndic, $c, $calcul_rub = true) { include_spip('action/editer_objet'); return objet_instituer('site', $id_syndic, $c, $calcul_rub); }