/** * Point d'entrée d'édition d'un objet * * On ne peut entrer que par un appel en fournissant $id et $objet * ou avec un argument d'action sécurisée de type "objet/id" * * @param int $id * @param string $objet * @param array $set * @return array */ function action_editer_objet_dist($id = null, $objet = null, $set = null) { // appel direct depuis une url avec arg = "objet/id" if (is_null($id) or is_null($objet)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); list($objet, $id) = array_pad(explode("/", $arg, 2), 2, null); } // appel incorrect ou depuis une url erronnée interdit if (is_null($id) or is_null($objet)) { include_spip('inc/minipres'); echo minipres(_T('info_acces_interdit')); die; } // si id n'est pas un nombre, c'est une creation // mais on verifie qu'on a toutes les donnees qu'il faut. if (!($id = intval($id))) { // on ne sait pas si un parent existe mais on essaye $id_parent = _request('id_parent'); $id = objet_inserer($objet, $id_parent); } if (!($id = intval($id)) > 0) { return array($id, _L('echec enregistrement en base')); } // Enregistre l'envoi dans la BD $err = objet_modifier($objet, $id, $set); return array($id, $err); }
function action_deplacer_objets_dist() { include_spip('inc/autoriser'); if (!autoriser('ecrire')) { return plan_json_erreur(_T("plan:erreur_autorisation_insuffisante") . " " . _T("plan:erreur_deplacement_impossible")); } include_spip('base/objets'); $objet = objet_type(_request('objet')); $table = table_objet_sql($objet); $_id_table = id_table_objet($table); $ids = _request('id_objet'); $id_rubrique_old = _request('id_rubrique_source'); $id_rubrique_new = _request('id_rubrique_destination'); if (!is_array($ids) or !$objet) { return plan_json_erreur(_T("plan:erreur_aucun_identifiant") . " " . _T("plan:erreur_deplacement_impossible")); } if ($id_rubrique_old == $id_rubrique_new) { return plan_json_erreur(_T("plan:erreur_rubriques_parentes_incorrectes") . " " . _T("plan:erreur_deplacement_impossible")); } if ($objet != 'rubrique' and !$id_rubrique_new) { return plan_json_erreur(_T("plan:erreur_rubriques_parentes_incorrectes") . " " . _T("plan:erreur_deplacement_impossible")); } $ids = array_filter($ids); if ($objet == 'rubrique') { $champ = 'id_parent'; } else { $champ = 'id_rubrique'; } // ne modifier que si les emplacements n'ont pas déjà changé ! $ids = sql_allfetsel($_id_table, $table, array(sql_in($_id_table, $ids), $champ . '=' . sql_quote($id_rubrique_old))); $ids = array_map('array_shift', $ids); include_spip('action/editer_objet'); $errors = $success = array(); $modifs = array('id_parent' => $id_rubrique_new); foreach ($ids as $id) { if (autoriser('modifier', $objet, $id)) { if ($err = objet_modifier($objet, $id, $modifs)) { $errors["{$objet}-{$id}"] = $err; } else { $success["{$objet}-{$id}"] = true; } } else { $errors["{$objet}-{$id}"] = _T("plan:erreur_autorisation_insuffisante") . " " . _T("plan:erreur_deplacement_impossible"); } } // dans certains cas… on ne reçoit pas d'erreur… et pourtant ! if (!$errors) { // on verifie qu'il n'y a plus d'objets à l'ancien emplacement $ids = sql_allfetsel($_id_table, $table, array(sql_in($_id_table, $ids), $champ . '=' . sql_quote($id_rubrique_old))); $ids = array_map('array_shift', $ids); if ($ids) { foreach ($ids as $id) { $errors["{$objet}-{$id}"] = _T("plan:erreur_deplacement"); unset($success["{$objet}-{$id}"]); } } } return plan_json_envoi(array('done' => true, 'success' => $success, 'errors' => $errors)); }
/** * @param int $id_message * @return void */ function action_envoyer_message_dist($id_message = null) { if (is_null($id_message)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $id_message = $securiser_action(); } include_spip('inc/autoriser'); if (intval($id_message) and $type = sql_getfetsel('type', 'spip_messages', 'id_message=' . intval($id_message)) and autoriser('envoyermessage', $type, $id_message)) { include_spip('action/editer_objet'); objet_modifier('message', $id_message, array('statut' => 'publie')); } }
/** * @param int $id_message * @return void */ function action_supprimer_message_dist($id_message = null) { if (is_null($id_message)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $id_message = $securiser_action(); } include_spip('inc/autoriser'); if (autoriser('supprimer', 'message', $id_message)) { include_spip('action/editer_objet'); objet_modifier('message', $id_message, array('statut' => 'poub')); } }
function livraison_installer_modes() { include_spip("action/editer_objet"); if ($importer_csv = charger_fonction("importer_csv", "inc", true) and $f = find_in_path("base/livraisonmodes.csv")) { $modes = $importer_csv($f, true); foreach ($modes as $mode) { $id = objet_inserer("livraisonmode"); $set = $mode; $set['prix_poids_ht'] = preg_replace(",\\s+,", "\n", $set['prix_poids_ht']); $set['prix_volume_ht'] = preg_replace(",\\s+,", "\n", $set['prix_volume_ht']); $set['statut'] = 'prop'; objet_modifier("livraisonmode", $id, $set); } } }
/** * 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']); } } } } }
/** * Instituer un objet avec les puces rapides * @param null|string $arg * @return */ function action_instituer_objet_dist($arg = null) { if (is_null($arg)) { $securiser_action = charger_fonction('securiser_action', 'inc'); $arg = $securiser_action(); } list($objet, $id_objet, $statut) = preg_split('/\\W/', $arg); if (!$statut) { $statut = _request('statut_nouv'); } // cas POST if (!$statut) { return; } // impossible mais sait-on jamais if ($id_objet = intval($id_objet) and autoriser('instituer', $objet, $id_objet, '', array('statut' => $statut))) { include_spip('action/editer_objet'); objet_modifier($objet, $id_objet, array('statut' => $statut)); } }
/** * Point d'entree d'edition d'un objet * on ne peut entrer que par un appel en fournissant $id et $objet * mais pas pas une url * * @param int $id * @param string $objet * @param array $set * @return array */ function action_editer_objet_dist($id = null, $objet = null, $set = null) { // appel direct depuis une url interdit if (is_null($id) or is_null($objet)) { include_spip('inc/minipres'); echo minipres(_T('info_acces_interdit')); die; } // si id n'est pas un nombre, c'est une creation // mais on verifie qu'on a toutes les donnees qu'il faut. if (!($id = intval($id))) { // on ne sait pas si un parent existe mais on essaye $id_parent = _request('id_parent'); $id = objet_inserer($objet, $id_parent); } if (!($id = intval($id)) > 0) { return array($id, _L('echec enregistrement en base')); } // Enregistre l'envoi dans la BD $err = objet_modifier($objet, $id, $set); return array($id, $err); }
/** * Action sécurisée pour valider manuellement les membres du site * * On change le statut de l'auteur et on lui envoie un mail avec de quoi se loguer * * @return rien */ function action_valider_auteur_dist() { $securiser_action = charger_fonction('securiser_action', 'inc'); $id_auteur = $securiser_action(); if (!$id_auteur or !autoriser('valider', 'auteur', $id_auteur)) { include_spip('inc/minipres'); $msg = _T('valider_inscription:permissions_insuffisantes'); die(minipres($msg)); } include_spip('base/abstract_sql'); // le statut à donné a été enregistré dans le champs « prefs » $statut = sql_getfetsel('prefs', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); include_spip('action/editer_objet'); if ($err = objet_modifier('auteur', $id_auteur, array('statut' => $statut))) { include_spip('inc/minipres'); die(minipres(_T('valider_inscription:erreur_validation'), $err)); } $desc = sql_fetsel('statut, id_auteur, login, email', 'spip_auteurs', 'id_auteur=' . intval($id_auteur)); include_spip('action/inscrire_auteur'); // generer le mot de passe (ou le refaire si compte inutilise) $desc['pass'] = creer_pass_pour_auteur($id_auteur); // attribuer un jeton pour confirmation par clic sur un lien $desc['jeton'] = auteur_attribuer_jeton($id_auteur); // Si on doit lier l'auteur à une zone, il faut le faire ici, // parce que les visiteurs n'ont pas les autorisations nécessaires // lors de l'inscription if (test_plugin_actif('auteur2zone')) { include_spip('inc/config'); $config = lire_config('auteur2zone'); // Lier à la zone include_spip('action/editer_zone'); zone_lier($config['auteur_zone_auto'], 'auteur', $id_auteur); } $envoyer_inscription = charger_fonction('envoyer_inscription', ''); list($sujet, $msg, $from, $head) = $envoyer_inscription($desc, $nom, $statut); include_spip('inc/notifications'); notifications_envoyer_mails($desc['email'], $msg, $sujet, $from, $head); }
/** * Fonction de mise a jour par API editer_objet * @param $id * @param $data * @param $type * @param $ref * @return bool|mixed|string */ function crayons_objet_modifier($id, $data, $type, $ref) { if (include_spip('action/editer_objet') and function_exists('objet_modifier')) { return objet_modifier(objet_type($type), $id, $data); } // fallback return crayons_update($id, $data, $type); }
/** * Enregistre un massicotage dans la base de données * * @param string $objet : le type d'objet * @param integer $id_objet : l'identifiant de l'objet * @param array parametres : Un tableau de parametres pour le * massicotage, doit contenir les clés * 'zoom', 'x1', 'x2', 'y1', et 'y2' * * @return mixed Rien si tout s'est bien passé, un message d'erreur * sinon */ function massicot_enregistrer($objet, $id_objet, $parametres) { include_spip('action/editer_objet'); include_spip('action/editer_liens'); /* Tester l'existence des parametres nécessaires */ if (!isset($parametres['zoom'])) { return _T('massicot:erreur_parametre_manquant', array('parametre' => 'zoom')); } elseif (!isset($parametres['x1'])) { return _T('massicot:erreur_parametre_manquant', array('parametre' => 'x1')); } elseif (!isset($parametres['x2'])) { return _T('massicot:erreur_parametre_manquant', array('parametre' => 'x2')); } elseif (!isset($parametres['y1'])) { return _T('massicot:erreur_parametre_manquant', array('parametre' => 'y1')); } elseif (!isset($parametres['y2'])) { return _T('massicot:erreur_parametre_manquant', array('parametre' => 'y2')); } /* le rôle est traité à part */ if (isset($parametres['role'])) { $role = $parametres['role']; unset($parametres['role']); } else { $role = ''; } $chemin_image = massicot_chemin_image($objet, $id_objet); list($width, $height) = getimagesize($chemin_image); $id_massicotage = sql_getfetsel('id_massicotage', 'spip_massicotages_liens', array('objet=' . sql_quote($objet), 'id_objet=' . intval($id_objet), 'role=' . sql_quote($role))); if (!$id_massicotage) { $id_massicotage = objet_inserer('massicotage'); objet_associer(array('massicotage' => $id_massicotage), array($objet => $id_objet), array('role' => $role)); /* Le logo du site est un cas spécial. SPIP le traite comme le « site » * avec l'id 0, alors on fait pareil. */ if ($id_objet == 0) { // peut être le string '0' sql_insertq('spip_massicotages_liens', array('id_massicotage' => $id_massicotage, 'id_objet' => 0, 'objet' => 'site', 'role' => $role)); } } if ($err = objet_modifier('massicotage', $id_massicotage, array('traitements' => serialize($parametres)))) { return $err; } }
/** * Traitement du formulaire d'édition d'une date * * @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 array|string $options * Options. * @return Array * Retours des traitements */ function formulaires_dater_traiter_dist($objet, $id_objet, $retour = '', $options = array()) { $res = array('editable' => ' '); if (_request('changer')) { $_id_objet = id_table_objet($objet); $table = table_objet($objet); $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table); if (!$desc) { return array('message_erreur' => _L('erreur')); } #impossible en principe $champ_date = $desc['date'] ? $desc['date'] : 'date'; $set = array(); $charger = charger_fonction("charger", "formulaires/dater/"); $v = $charger($objet, $id_objet, $retour, $options); if ($v['_editer_date']) { if (!($d = dater_recuperer_date_saisie(_request('date_jour')))) { $d = array(date('Y'), date('m'), date('d')); } if (!($h = dater_recuperer_heure_saisie(_request('date_heure')))) { $h = array(0, 0); } $set[$champ_date] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]); } if (isset($desc['field']['date_redac']) and $v['_editer_date_anterieure']) { if (!_request('date_redac_jour') or _request('sans_redac')) { $set['date_redac'] = sql_format_date(0, 0, 0, 0, 0, 0); } else { if (!($d = dater_recuperer_date_saisie(_request('date_redac_jour'), "date_redac"))) { $d = array(date('Y'), date('m'), date('d')); } if (!($h = dater_recuperer_heure_saisie(_request('date_redac_heure')))) { $h = array(0, 0); } $set['date_redac'] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]); } } if (count($set)) { $publie_avant = objet_test_si_publie($objet, $id_objet); include_spip('action/editer_objet'); objet_modifier($objet, $id_objet, $set); $publie_apres = objet_test_si_publie($objet, $id_objet); if ($publie_avant !== $publie_apres) { // on refuse ajax pour forcer le rechargement de la page ici // on refera traiter une 2eme fois, mais c'est sans consequence refuser_traiter_formulaire_ajax(); } } } if ($retour) { $res['redirect'] = $retour; } set_request('date_jour'); set_request('date_redac_jour'); set_request('date_heure'); set_request('date_redac_heure'); return $res; }
/** * Traitement * * @param string $objet * @param integer $id_objet * @param string $retour * @return Array */ function formulaires_dater_traiter_dist($objet, $id_objet, $retour = '') { $res = array('editable' => ' '); if (_request('changer')) { $_id_objet = id_table_objet($objet); $table = table_objet($objet); $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table); if (!$desc) { return array('message_erreur' => _L('erreur')); } #impossible en principe $champ_date = $desc['date'] ? $desc['date'] : 'date'; $set = array(); if (!($d = dater_recuperer_date_saisie(_request('date_jour')))) { $d = array(date('Y'), date('m'), date('d')); } if (!($h = dater_recuperer_heure_saisie(_request('date_heure')))) { $h = array(0, 0); } $set[$champ_date] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]); if (isset($desc['field']['date_redac'])) { if (!_request('date_redac_jour') or _request('sans_redac')) { $set['date_redac'] = sql_format_date(0, 0, 0, 0, 0, 0); } else { if (!($d = dater_recuperer_date_saisie(_request('date_redac_jour'), "date_redac"))) { $d = array(date('Y'), date('m'), date('d')); } if (!($h = dater_recuperer_heure_saisie(_request('date_redac_heure')))) { $h = array(0, 0); } $set['date_redac'] = sql_format_date($d[0], $d[1], $d[2], $h[0], $h[1]); } } include_spip('action/editer_objet'); objet_modifier($objet, $id_objet, $set); } if ($retour) { $res['redirect'] = $retour; } set_request('date_jour'); set_request('date_redac_jour'); set_request('date_heure'); set_request('date_redac_heure'); return $res; }
function formulaires_editer_message_traiter_dist($id_message = 'new', $type = 'message', $retour = '', $accepter_email = 'oui', $destinataires = '', $titre = '', $texte = '') { // preformater le post // fixer le type de message // sans modifier le type d'un message existant if (intval($id_message) and $t = sql_getfetsel('type', 'spip_messages', 'id_message=' . intval($id_message))) { $type = $t; } set_request('type', $type); // formater les destinataires $d = _request('destinataires'); if (!$d) { $d = array(); } include_spip('inc/messages'); $d = messagerie_nettoyer_destinataires($d); // si email non acceptes, extraire les seuls id_auteur de la liste proposee if ($accepter_email !== 'oui') { // separer id_auteur et email $d = messagerie_destiner($d); // ne conserver que les id_auteur $d = reset($d); } // reinjecter sous forme de chaine set_request('destinataires', implode(',', $d)); // fixer l'auteur ! set_request('id_auteur', $GLOBALS['visiteur_session']['id_auteur']); if (_request('rv') == 'oui') { include_spip('inc/date_gestion'); $erreurs = array(); $date_debut = verifier_corriger_date_saisie('debut', true, $erreurs); $date_fin = verifier_corriger_date_saisie('fin', true, $erreurs); set_request('date_heure', date('Y-m-d H:i:s', $date_debut)); set_request('date_fin', date('Y-m-d H:i:s', $date_fin)); } else { set_request('date_heure'); set_request('date_fin'); } // on gere par les traitements standard // la diffusion du message se fait par pipeline post_edition sur instituer // et notification $res = formulaires_editer_objet_traiter('message', $id_message, 0, 0, $retour, ''); if ($id_message = $res['id_message'] and !_request('draft')) { include_spip('action/editer_objet'); objet_modifier('message', $id_message, array('statut' => 'publie')); // apres en message envoyes, retourner sur la boite d'envoi plutot que sur le message if ($res['redirect'] == generer_url_ecrire('message', 'id_message=' . $id_message)) { $res['redirect'] = generer_url_ecrire('messages', 'quoi=envoi'); } } set_request('destinataires', explode(',', _request('destinataires'))); return $res; }
/** * Crée une modification d'un objet * * Wrapper pour remplacer tous les obsoletes revision_xxx * * @deprecated * Utiliser objet_modifier(); * @uses objet_modifier() * * @param string $objet * Nom de l'objet * @param int $id_objet * Identifiant de l'objet * @param array $c * Couples des champs/valeurs modifiées * @return mixed|string */ function revision_objet($objet, $id_objet, $c = null) { $objet = objet_type($objet); // securite include_spip('action/editer_objet'); return objet_modifier($objet, $id_objet, $c); }
function csv2auteurs_supprimer_auteurs($Tid, $statut, $traitement = "supprimer_articles", $id_rubrique_archive = 1) { // passage à la poubelle $objet = 'auteur'; $set = array('statut' => '5poubelle'); foreach ($Tid as $id) { $Tarticles = sql_allfetsel('id_objet', 'spip_auteurs_liens', array('id_auteur=' . $id, 'objet="article"')); // auteur sans article et demande de suppression: suppression complète if (count($Tarticles) == 0 and _request('abs_poubelle') == 'supprimer') { sql_delete('spip_auteurs', "id_auteur={$id}"); } else { objet_modifier($objet, $id, $set); } // traitement des articles de l'auteur if (count($Tarticles) != 0) { // supprimer les articles $table_idarticle = array(); if ($traitement == 'supprimer_articles') { objet_dissocier(array('id_auteur' => $id), array('article' => $Tarticles)); foreach ($Tarticles as $idarticle) { $table_idarticle[] = $idarticle['id_objet']; } $inarticle = join(',', $table_idarticle); sql_delete('spip_articles', "id_article IN ({$inarticle})"); } // deplacer les articles dans la rubrique d'archivage if ($traitement == 'transferer_articles') { foreach ($Tarticles as $idarticle) { objet_modifier('article', $idarticle['id_objet'], array('id_parent' => $id_rubrique_archive)); } } } if (test_plugin_actif("accesrestreint")) { // suppression des zones de l'auteur $Tzones = sql_allfetsel('id_zone', 'spip_zones_liens', array('id_objet=' . $id, 'objet="auteur"')); foreach ($Tzones as $id_zone) { zone_lier($id_zone, 'auteur', $id, 'del'); } } // suppression des rubriques des admins restreints if ($statut == '0minirezo') { $Trubriques = sql_allfetsel('id_objet', 'spip_auteurs_liens', array('id_auteur=' . $id, 'objet="rubrique"')); objet_dissocier(array('id_auteur' => $id), array('rubrique' => $Trubriques)); } } }