本文整理汇总了PHP中objet_associer函数的典型用法代码示例。如果您正苦于以下问题:PHP objet_associer函数的具体用法?PHP objet_associer怎么用?PHP objet_associer使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了objet_associer函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: formulaires_editer_mot_article_traiter_dist
function formulaires_editer_mot_article_traiter_dist($id_article = 'new', $id_groupe = '', $retour = '')
{
$message = array('editable' => true, 'message_ok' => '');
$id_mot_ancien = sql_getfetsel('mot.id_mot', 'spip_mots as mot left join spip_mots_liens as mots_liens ON (mot.id_mot=mots_liens.id_mot)', 'mots_liens.id_objet=' . intval($id_article) . ' AND mots_liens.objet = "article" AND mot.id_groupe=' . intval($id_groupe));
include_spip('action/editer_liens');
// si aucun mot selectionne on delie le mot de ce groupe
if (!($id_mot = _request('id_mot'))) {
objet_dissocier(array("mot" => $id_mot_ancien), array("article" => $id_article));
} else {
if ($id_mot_ancien != $id_mot) {
// on delie l'ancien mot
objet_dissocier(array("mot" => $id_mot_ancien), array("article" => $id_article));
// on lie le nouveau
objet_associer(array("mot" => $id_mot), array("article" => $id_article));
}
}
// on invalide le cache
include_spip('inc/invalideur');
suivre_invalideur("id='id_article/{$id_article}'");
if ($retour) {
include_spip('inc/headers');
$message .= redirige_formulaire($retour);
}
return $message;
}
示例2: action_ajouter_lien_dist
/**
* Action pour lier 2 objets entre eux
*
* L'argument attendu est `objet1-id1-objet2-id2` (type d'objet, identifiant)
* tel que `mot-7-rubrique-3`.
*
* @uses objet_associer()
*
* @param null|string $arg
* Clé des arguments. En absence utilise l'argument
* de l'action sécurisée.
* @return void
*/
function action_ajouter_lien_dist($arg = null)
{
if (is_null($arg)) {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
}
$arg = explode("-", $arg);
list($objet_source, $ids, $objet_lie, $idl) = $arg;
include_spip('action/editer_liens');
objet_associer(array($objet_source => $ids), array($objet_lie => $idl));
}
示例3: inc_marquer_doublons_doc_dist
function inc_marquer_doublons_doc_dist($champs, $id, $type, $id_table_objet, $table_objet, $spip_table_objet, $desc = array(), $serveur = '')
{
$champs_selection = array();
foreach ($GLOBALS['medias_liste_champs'] as $champs_choisis) {
if (isset($champs[$champs_choisis])) {
array_push($champs_selection, $champs_choisis);
}
}
if (count($champs_selection) == 0) {
return;
}
if (!$desc) {
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table($table_objet, $serveur);
}
$load = "";
// charger le champ manquant en cas de modif partielle de l 'objet
// seulement si le champ existe dans la table demande
$champs_a_traiter = "";
foreach ($champs_selection as $champs_a_parcourir) {
if (isset($desc['field'][$champs_a_parcourir])) {
$load = $champs_a_parcourir;
$champs_a_traiter .= $champs[$champs_a_parcourir];
}
}
if ($load) {
$champs[$load] = "";
$row = sql_fetsel($load, $spip_table_objet, "{$id_table_objet}=" . sql_quote($id));
if ($row and isset($row[$load])) {
$champs[$load] = $row[$load];
}
}
include_spip('inc/texte');
include_spip('base/abstract_sql');
include_spip('action/editer_liens');
include_spip('base/objets');
$modeles = lister_tables_objets_sql('spip_documents');
$modeles = $modeles['modeles'];
$GLOBALS['doublons_documents_inclus'] = array();
$env = array('objet' => $type, 'id_objet' => $id, $id_table_objet => $id);
traiter_modeles($champs_a_traiter, array('documents' => $modeles), '', '', null, $env);
// detecter les doublons
objet_qualifier_liens(array('document' => '*'), array($type => $id), array('vu' => 'non'));
if (count($GLOBALS['doublons_documents_inclus'])) {
// on repasse par une requete sur spip_documents pour verifier que les documents existent bien !
$in_liste = sql_in('id_document', $GLOBALS['doublons_documents_inclus']);
$res = sql_allfetsel("id_document", "spip_documents", $in_liste);
$res = array_map('reset', $res);
// Creer le lien s'il n'existe pas deja
objet_associer(array('document' => $res), array($type => $id), array('vu' => 'oui'));
objet_qualifier_liens(array('document' => $res), array($type => $id), array('vu' => 'oui'));
}
}
示例4: geol_albums_init
/**
* 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']);
}
}
}
}
}
示例5: medias_post_insertion
/**
* À chaque insertion d'un nouvel objet editorial
* auquel on a attaché des documents, restituer l'identifiant
* du nouvel objet crée sur les liaisons documents/objet,
* qui ont ponctuellement un identifiant id_objet négatif.
*
* @see medias_affiche_gauche()
* @pipeline post_insertion
*
* @param array $flux
* Données du pipeline
* @return array
* Données du pipeline
**/
function medias_post_insertion($flux)
{
$objet = objet_type($flux['args']['table']);
$id_objet = $flux['args']['id_objet'];
include_spip('inc/autoriser');
if (autoriser('joindredocument', $objet, $id_objet) and $id_auteur = intval($GLOBALS['visiteur_session']['id_auteur'])) {
# cf. HACK medias_affiche_gauche()
# rattrapper les documents associes a cet objet nouveau
# ils ont un id = 0-id_auteur
# utiliser l'api editer_lien pour les appels aux pipeline edition_lien
include_spip('action/editer_liens');
$liens = objet_trouver_liens(array('document' => '*'), array($objet => 0 - $id_auteur));
foreach ($liens as $lien) {
objet_associer(array('document' => $lien['document']), array($objet => $id_objet), $lien);
}
// un simple delete pour supprimer les liens temporaires
sql_delete("spip_documents_liens", array("id_objet = " . (0 - $id_auteur), "objet=" . sql_quote($objet)));
}
return $flux;
}
示例6: formulaires_lier_album_traiter
function formulaires_lier_album_traiter($id_article)
{
$id_collection = _request('pid_objet');
include_spip('action/editer_liens');
if (autoriser('lierobjet', 'collection', $id_collection)) {
$rang = sql_countsel('spip_collections_liens', 'id_collection=' . intval($id_collection));
$association = objet_associer(array('collection' => $id_collection), array('article' => $id_article), array('id_auteur' => $GLOBALS['visiteur_session']['id_auteur'] ? $GLOBALS['visiteur_session']['id_auteur'] : 0, 'rang' => $rang + 1));
}
if (!$association) {
return $res['message_erreur'] = _T('collection:erreur_association_collection');
} else {
$organiser = charger_fonction('collection_organiser_rangs', 'inc');
$organiser($id_collection);
include_spip('inc/invalideur');
suivre_invalideur('1');
}
$message['editable'] = true;
$message['message_ok'] = '<script type="text/javascript">if (window.jQuery) ajaxReload("albums");</script>';
return $message;
}
示例7: massicot_enregistrer
/**
* 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;
}
}
示例8: inc_marquer_doublons_doc_dist
/**
* Trouver les documents utilisés dans le texte d'un objet et enregistrer cette liaison comme vue.
*
* La liste des champs susceptibles de contenir des documents ou images est indiquée
* par la globale `medias_liste_champs` (un tableau).
*
* Le contenu de ces champs (du moins ceux qui existent pour l'objet demandé) est récupéré et analysé.
* La présence d'un modèle de document dans ces contenus, tel que imgXX, docXX ou embXX
* indique que le document est utilisé et doit être lié à l'objet, avec le champ `vu=oui`
*
* S'il y avait des anciens liens avec vu=oui qui n'ont plus lieu d'être, ils passent à non.
*
* @note
* La fonction pourrait avoir bien moins d'arguments : seuls $champs, $id, $type ou $objet, $desc, $serveur
* sont nécessaires. On calcule $desc s'il est absent, et il contient toutes les infos…
*
* @param array $champs
* Couples [champ => valeur] connus de l'objet
* @param int $id
* Identifiant de l'objet
* @param string $type
* Type d'objet éditorial (ex: article)
* @param string $id_table_objet
* Nom de la clé primaire sur la table sql de l'objet
* @param string $table_objet
* Nom de l'objet éditorial (ex: articles)
* @param string $spip_table_objet
* Nom de la table sql de l'objet
* @param array $desc
* Description de l'objet, si déjà calculé
* @param string $serveur
* Serveur sql utilisé.
* @return void|null
**/
function inc_marquer_doublons_doc_dist($champs, $id, $type, $id_table_objet, $table_objet, $spip_table_objet, $desc = array(), $serveur = '')
{
// On conserve uniquement les champs qui modifient le calcul des doublons de documents
// S'il n'il en a aucun, les doublons ne sont pas impactés, donc rien à faire d'autre..
if (!($champs = array_intersect_key($champs, array_flip($GLOBALS['medias_liste_champs'])))) {
return;
}
if (!$desc) {
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table($table_objet, $serveur);
}
// Il faut récupérer toutes les données qui impactent les liens de documents vus
// afin de savoir lesquels sont présents dans les textes, et pouvoir actualiser avec
// les liens actuellement enregistrés.
$absents = array();
// Récupérer chaque champ impactant qui existe dans la table de l'objet et qui nous manque
foreach ($GLOBALS['medias_liste_champs'] as $champ) {
if (isset($desc['field'][$champ]) and !isset($champs[$champ])) {
$absents[] = $champ;
}
}
// Retrouver les textes des champs manquants
if ($absents) {
$row = sql_fetsel($absents, $spip_table_objet, "{$id_table_objet}=" . sql_quote($id));
if ($row) {
$champs = array_merge($row, $champs);
}
}
include_spip('inc/texte');
include_spip('base/abstract_sql');
include_spip('action/editer_liens');
include_spip('base/objets');
// récupérer la liste des modèles qui considèrent un document comme vu s'ils sont utilisés dans un texte
$modeles = lister_tables_objets_sql('spip_documents');
$modeles = $modeles['modeles'];
// liste d'id_documents trouvés dans les textes
$GLOBALS['doublons_documents_inclus'] = array();
// detecter les doublons dans ces textes
traiter_modeles(implode(" ", $champs), array('documents' => $modeles), '', '', null, array('objet' => $type, 'id_objet' => $id, $id_table_objet => $id));
$texte_documents_vus = $GLOBALS['doublons_documents_inclus'];
// on ne modifie les liaisons que si c'est nécessaire
$bdd_documents_vus = array('oui' => array(), 'non' => array());
$liaisons = objet_trouver_liens(array('document' => '*'), array($type => $id));
foreach ($liaisons as $l) {
$bdd_documents_vus[$l['vu']][] = $l['id_document'];
}
// il y a des nouveaux documents vus dans le texte
$nouveaux = array_diff($texte_documents_vus, $bdd_documents_vus['oui']);
// il y a des anciens documents vus dans la bdd
$anciens = array_diff($bdd_documents_vus['oui'], $texte_documents_vus);
if ($nouveaux) {
// on vérifie que les documents indiqués vus existent réellement tout de même (en cas d'erreur de saisie)
$ids = sql_allfetsel("id_document", "spip_documents", sql_in('id_document', $nouveaux));
$ids = array_map('reset', $ids);
if ($ids) {
// Creer le lien s'il n'existe pas déjà
objet_associer(array('document' => $ids), array($type => $id), array('vu' => 'oui'));
objet_qualifier_liens(array('document' => $ids), array($type => $id), array('vu' => 'oui'));
}
}
if ($anciens) {
objet_qualifier_liens(array('document' => $anciens), array($type => $id), array('vu' => 'non'));
}
}
示例9: lien_ajouter_liaisons
/**
* Ajoute les liens demandés en prenant éventuellement en compte le rôle
*
* Appelle la fonction objet_associer. L'appelle autant de fois qu'il y
* a de rôles demandés pour cette liaison.
*
* @internal
* @param string $objet_source Objet source de la liaison (qui a la table de liaison)
* @param array|string $ids Identifiants pour l'objet source
* @param string $objet_lien Objet à lier
* @param array|string $idl Identifiants pour l'objet lié
* @param array $qualifs
* @return void
**/
function lien_ajouter_liaisons($objet_source, $ids, $objet_lien, $idl, $qualifs)
{
// retrouver la colonne de roles s'il y en a a lier
if (is_array($qualifs) and count($qualifs)) {
foreach ($qualifs as $qualif) {
objet_associer(array($objet_source => $ids), array($objet_lien => $idl), $qualif);
}
} else {
objet_associer(array($objet_source => $ids), array($objet_lien => $idl));
}
}
示例10: th_configurer_rubriques
function th_configurer_rubriques()
{
$mots = array('travail_en_cours' => 'Travail des classes', 'consignes' => 'Consignes', 'ressources' => 'Bibliothèque', 'blogs' => 'Blog public', 'evenements' => 'Blog privé', 'images_background' => 'Contenu éditorial', 'agora' => 'Discuter avec');
foreach ($mots as $mot => $titre) {
$count = (int) sql_countsel('spip_rubriques as sr
LEFT JOIN spip_mots_liens as sml
ON (sr.id_rubrique = sml.id_objet AND sml.objet = "rubrique")
LEFT JOIN spip_mots as sm
ON (sml.id_mot = sm.id_mot)', array('sm.titre = "' . $mot . '"', 'sr.id_parent = 0'));
if ($count < 1) {
include_spip('action/editer_rubrique');
$id_rubrique = rubrique_inserer(0);
rubrique_modifier($id_rubrique, array('titre' => $titre));
$id_mot = (int) sql_getfetsel('id_mot', 'spip_mots', 'titre = "' . $mot . '"');
include_spip('action/editer_liens');
$res = objet_associer(array("mots" => $id_mot), array("rubriques" => $id_rubrique));
}
}
}
示例11: mot_associer
/**
* Associer un mot a des objets listes sous forme
* array($objet=>$id_objets,...)
* $id_objets peut lui meme etre un scalaire ou un tableau pour une liste d'objets du meme type
*
* on peut passer optionnellement une qualification du (des) lien(s) qui sera
* alors appliquee dans la foulee.
* En cas de lot de liens, c'est la meme qualification qui est appliquee a tous
*
* Exemples:
* mot_associer(3, array('auteur'=>2));
* mot_associer(3, array('auteur'=>2), array('vu'=>'oui)); // ne fonctionnera pas ici car pas de champ 'vu' sur spip_mots_liens
*
* @param int $id_mot
* @param array $objets
* @param array $qualif
* @return string
*/
function mot_associer($id_mot, $objets, $qualif = null)
{
include_spip('action/editer_liens');
// si il s'agit d'un groupe avec 'unseul', alors supprimer d'abord les autres
// mots de ce groupe associe a ces objets
$id_groupe = sql_getfetsel('id_groupe', 'spip_mots', 'id_mot=' . intval($id_mot));
if (un_seul_mot_dans_groupe($id_groupe)) {
$mots_groupe = sql_allfetsel("id_mot", "spip_mots", "id_groupe=" . intval($id_groupe));
$mots_groupe = array_map('reset', $mots_groupe);
objet_dissocier(array('mot' => $mots_groupe), $objets);
}
return objet_associer(array('mot' => $id_mot), $objets, $qualif);
}
示例12: agenda_post_edition_lien
function agenda_post_edition_lien($flux)
{
// Si on est en train de lier ou délier quelque chose a un événement
if ($flux['args']['objet'] == 'evenement') {
// On cherche si cet événement a des répétitions
if ($id_evenement = $flux['args']['id_objet'] and $id_evenement > 0 and $repetitions = sql_allfetsel('id_evenement', 'spip_evenements', 'id_evenement_source = ' . $id_evenement) and is_array($repetitions)) {
include_spip('action/editer_liens');
// On a la liste des ids des répétitions
$repetitions = array_map('reset', $repetitions);
// Si c'est un ajout de lien, on l'ajoute à toutes les répétitions
if ($flux['args']['action'] == 'insert') {
objet_associer(array($flux['args']['objet_source'] => $flux['args']['id_objet_source']), array('evenement' => $repetitions));
} elseif ($flux['args']['action'] == 'delete') {
objet_dissocier(array($flux['args']['objet_source'] => $flux['args']['id_objet_source']), array('evenement' => $repetitions));
}
}
}
return $flux;
}
示例13: souscription_bank_abos_renouveler
/**
* Gerer le renouvellement lors de la notification de paiement d'une echeance par le presta bancaire
*
* @param array
* @return array
*/
function souscription_bank_abos_renouveler($flux)
{
if (!$flux['data']) {
$id = $flux['args']['id'];
if (strncmp($id, "uid:", 4) == 0) {
$where = "abonne_uid=" . sql_quote(substr($id, 4));
} else {
$where = "id_souscription=" . intval($id);
}
if ($row = sql_fetsel("*", "spip_souscriptions", $where, '', 'date_souscription DESC')) {
$options = array('auteur' => $row['courriel'], 'parrain' => 'souscription', 'tracking_id' => $row['id_souscription'], 'id_auteur' => $row['id_auteur']);
$inserer_transaction = charger_fonction("inserer_transaction", "bank");
include_spip("action/editer_liens");
// verifier que c'est bien l'echeance attendue
// et sinon generer des transactions offline de rattrapage
if (!intval($row["date_echeance"])) {
$row["date_echeance"] = $row["date_souscription"];
}
$date_echeance = $row['date_echeance'];
$datem45 = date('Y-m-d H:i:s', strtotime("-45 day"));
while ($date_echeance < $datem45) {
$o = $options;
$o['champs']['date_transaction'] = $date_echeance;
$o['champs']['mode'] = 'offline';
$prochaine_echeance = date('Y-m-d H:i:s', strtotime("+1 month", strtotime($date_echeance)));
if ($id_transaction = $inserer_transaction($row['montant'], $o)) {
// regler la transacton offline
$regler_transaction = charger_fonction('regler_transaction', 'bank');
$regler_transaction($id_transaction);
// mettre a jour la souscription
$set = array('statut' => 'ok', 'abo_statut' => 'ok', 'montant_cumul' => round(floatval($row['montant_cumul']) + floatval($row['montant']), 2), 'date_echeance' => $prochaine_echeance, 'abo_fin_raison' => '');
sql_updateq('spip_souscriptions', $set, "id_souscription=" . intval($row['id_souscription']));
$row = sql_fetsel("*", "spip_souscriptions", "id_souscription=" . intval($row['id_souscription']));
objet_associer(array("souscription" => $row['id_souscription']), array("transaction" => $id_transaction));
}
$date_echeance = $prochaine_echeance;
}
// si il y a deja eu une transaction echeance il y a moins de 15j sur cette souscription
// c'est un double appel, renvoyer l'id_transaction concerne
$datem15 = date('Y-m-d H:i:s', strtotime("-15 day"));
if ($id_transaction = sql_getfetsel("id_transaction", "spip_transactions", "statut<>" . sql_quote('commande') . " AND date_transaction>" . sql_quote($datem15) . " AND parrain=" . sql_quote('souscription') . " AND tracking_id=" . intval($row['id_souscription']) . " AND id_auteur=" . intval($row['id_auteur']), "", "date_transaction")) {
$flux['data'] = $id_transaction;
} elseif ($id_transaction = $inserer_transaction($row['montant'], $options)) {
$prochaine_echeance = $row['date_echeance'];
$datep15 = date('Y-m-d H:i:s', strtotime("+15 day"));
// recaler la prochaine echeance si trop en avance (double appel anterieur ou erreur de calcul)
while ($prochaine_echeance > $datep15) {
$prochaine_echeance = date('Y-m-d H:i:s', strtotime("-1 month", strtotime($prochaine_echeance)));
}
// l'incrementer pour atteindre celle du mois prochain
while ($prochaine_echeance < $datep15) {
$prochaine_echeance = date('Y-m-d H:i:s', strtotime("+1 month", strtotime($prochaine_echeance)));
}
// a ce stade on ne sait pas encore si la transaction est reussie ou en echec
// on ne peut donc pas incrementer le montant cumul, mais seulement mettre a jour les echeances etc
// si echec => declenchera une resiliation
// si succes => declenchera un traitement reglement ou l'on mettra a jour le cumul
$set = array('id_transaction_echeance' => $id_transaction, 'statut' => 'ok', 'abo_statut' => 'ok', 'date_echeance' => $prochaine_echeance, 'abo_fin_raison' => '');
sql_updateq('spip_souscriptions', $set, "id_souscription=" . intval($row['id_souscription']));
$row = sql_fetsel("*", "spip_souscriptions", "id_souscription=" . intval($row['id_souscription']));
objet_associer(array("souscription" => $row['id_souscription']), array("transaction" => $id_transaction));
$flux['data'] = $id_transaction;
// verifier si ce n'est pas la derniere transaction, auquel cas on notifie
if ($row['date_echeance'] > $row['date_fin'] and $row['date_fin'] > $row['date_souscription']) {
// Notifications
if ($notifications = charger_fonction('notifications', 'inc', true)) {
$notifications('informersouscriptionterminee', $row['id_souscription']);
}
}
}
}
}
return $flux;
}
示例14: formulaires_souscription_traiter_dist
/**
* Chargement du formulaire d'édition de souscription
*
* Déclarer les champs postés et y intégrer les valeurs par défaut
*
* @uses formulaires_editer_objet_charger()
*
* @param int$id_souscription_campagne
* Identifiant de la campagne de souscription
* @return array
* Retours des traitements
*/
function formulaires_souscription_traiter_dist($id_souscription_campagne)
{
$lier_trad = 0;
$config_fonc = '';
$row = array();
$hidden = '';
$retour = '';
$ret = array();
$campagne = sql_fetsel("*", "spip_souscription_campagnes", "id_souscription_campagne=" . intval($id_souscription_campagne));
set_request("id_souscription_campagne", $id_souscription_campagne);
set_request('type_souscription', $campagne['type_objectif']);
if (!in_array(_request('envoyer_info'), array('on', 'off'))) {
set_request('envoyer_info', 'off');
}
$where_deja = array('courriel=' . sql_quote(_request('courriel')), 'statut=' . sql_quote('prepa'), "date_souscription>" . sql_quote(date('Y-m-d H:i:s', strtotime("-1 day"))), 'id_souscription_campagne=' . intval($id_souscription_campagne));
$erreurs = array();
$montant = formulaires_souscription_trouver_montant($campagne, $erreurs);
$abo = false;
if (strncmp($montant, "abo", 3) == 0) {
$abo = true;
$montant = substr($montant, 3);
set_request("abo_statut", "commande");
$where_deja[] = 'abo_statut=' . sql_quote('commande');
} else {
$where_deja[] = 'abo_statut=' . sql_quote('non');
}
set_request('montant', $montant);
$where_deja[] = 'montant=' . sql_quote($montant, '', 'text');
// si on a une souscription du meme montant, meme email, en commande, qui date de moins de 24h
// on la reutilise pour pas generer plein de souscription en base en cas de retour arriere/modif saisie/revalidation
if (!($id_souscription = sql_getfetsel('id_souscription', 'spip_souscriptions', $where_deja))) {
$id_souscription = 'new';
}
$ret = formulaires_editer_objet_traiter('souscription', $id_souscription, '', $lier_trad, $retour, $config_fonc, $row, $hidden);
if ($ret['id_souscription']) {
// recuperer l'id_auteur de la souscription, qui a pu etre renseigne en post_edition par un autre plugin
// ou recupere de la session courante hors espace prive
$souscription = sql_fetsel("*", "spip_souscriptions", "id_souscription=" . intval($ret['id_souscription']));
$id_auteur = $souscription['id_auteur'];
// generer la transaction et l'associer a la souscription
$inserer_transaction = charger_fonction('inserer_transaction', 'bank');
$options = array("auteur" => _request('courriel'), "id_auteur" => $id_auteur, "parrain" => "souscription", "tracking_id" => $ret['id_souscription'], "force" => false);
if ($id_transaction = $inserer_transaction($montant, $options) and $hash = sql_getfetsel('transaction_hash', "spip_transactions", "id_transaction=" . intval($id_transaction))) {
// associer transaction et souscription
include_spip("action/editer_liens");
objet_associer(array("souscription" => $ret['id_souscription']), array("transaction" => $id_transaction));
sql_updateq("spip_souscriptions", array('id_transaction_echeance' => $id_transaction), "id_souscription=" . intval($ret['id_souscription']));
// si pas d'auteur ni en base ni en session, passer nom et prenom en session pour un eventuel usage dans le paiement (SEPA)
if (!$id_auteur and (!isset($GLOBALS['visiteur_session']['id_auteur']) or !$GLOBALS['visiteur_session']['id_auteur'])) {
include_spip('inc/session');
if ($souscription['nom']) {
session_set("session_nom", $souscription['nom']);
}
if ($souscription['prenom']) {
session_set("session_prenom", $souscription['prenom']);
}
}
$target = $abo ? "payer-abonnement" : "payer-acte";
spip_log(sprintf("La souscription [%s], associee a la transaction [%s] a bien ete cree.", $ret['id_souscription'], $id_transaction), "souscription");
if (lire_config("souscription/processus_paiement", "redirige") === "redirige") {
$ret['redirect'] = generer_url_public($target, "id_transaction={$id_transaction}&transaction_hash={$hash}", false, false);
} else {
$ret['message_ok'] = _T('souscription:message_regler_votre_' . $campagne['type_objectif']);
$GLOBALS['formulaires_souscription_paiement'] = recuperer_fond("content/{$target}", array('id_transaction' => $id_transaction, 'transaction_hash' => $hash, 'class' => 'souscription_paiement'));
}
} else {
spip_log(sprintf("Erreur lors de la creation de la transaction liee a la souscription [%s].", $ret['id_souscription']), "souscription");
$ret['message_erreur'] = _T('souscription:erreur_echec_creation_transaction');
}
}
// si API newsletter est dispo ET que case inscription est cochee, inscrire a la newsletter
if (_request("envoyer_info") === "on" and $subscribe = charger_fonction("subscribe", "newsletter", true)) {
$email = _request("courriel");
$nom = array(_request("prenom"), _request("nom"));
$nom = array_filter($nom);
$nom = implode(" ", $nom);
$subscribe($email, array('nom' => $nom));
}
return $ret;
}
示例15: objet_dupliquer_liens
/**
* Dupliquer tous les liens entrant ou sortants d'un objet
* vers un autre (meme type d'objet, mais id different)
* si $types est fourni, seuls les liens depuis/vers les types listes seront copies
* si $exclure_types est fourni, les liens depuis/vers les types listes seront ignores
*
* @api
* @param string $objet
* @param int $id_source
* @param int $id_cible
* @param array $types
* @param array $exclure_types
* @return int
* Nombre de liens copiés
*/
function objet_dupliquer_liens($objet, $id_source, $id_cible, $types = null, $exclure_types = null)
{
include_spip('base/objets');
$tables = lister_tables_objets_sql();
$n = 0;
foreach ($tables as $table_sql => $infos) {
if ((is_null($types) or in_array($infos['type'], $types)) and (is_null($exclure_types) or !in_array($infos['type'], $exclure_types))) {
if (objet_associable($infos['type'])) {
$liens = $infos['type'] == $objet ? objet_trouver_liens(array($objet => $id_source), '*') : objet_trouver_liens(array($infos['type'] => '*'), array($objet => $id_source));
foreach ($liens as $lien) {
$n++;
if ($infos['type'] == $objet) {
objet_associer(array($objet => $id_cible), array($lien['objet'] => $lien[$lien['objet']]), $lien);
} else {
objet_associer(array($infos['type'] => $lien[$infos['type']]), array($objet => $id_cible), $lien);
}
}
}
}
}
return $n;
}