/** * Permet de faire un comptage par table liee * * @syntaxe `{compteur table[, champ]}` * @link http://www.spip-contrib.net/Classer-les-articles-par-nombre-de#forum409210 * * @example * Pour avoir les auteurs classes par articles et * le nombre d'article de chacun : * * ``` * <BOUCLE1(AUTEURS){compteur articles}{par compteur_articles}> * #ID_AUTEUR : #COMPTEUR{articles} * </BOUCLE1> * ``` * * @note * Avec un seul argument {compteur autre_table} le groupby est fait * implicitement sur la cle primaire de la boucle en cours. * Avec un second argument {compteur autre_table,champ_fusion} * le groupby est fait sur le champ_fusion" * * @param string $idb * Identifiant de la boucle * @param Boucle[] $boucles * AST du squelette * @param Critere $crit * Paramètres du critère dans cette boucle * @param bool $left * true pour utiliser un left join plutôt qu'un inner join. * @return void */ function critere_compteur($idb, &$boucles, $crit, $left = false) { $boucle =& $boucles[$idb]; if (isset($crit->param[1])) { $_fusion = calculer_liste($crit->param[1], array(), $boucles, $boucle->id_parent); } else { $_fusion = "''"; } $params = $crit->param; $table = reset($params); $table = $table[0]->texte; $op = false; if (preg_match(',^(\\w+)([<>=])([0-9]+)$,', $table, $r)) { $table = $r[1]; if (count($r) >= 3) { $op = $r[2]; } if (count($r) >= 4) { $op_val = $r[3]; } } $type = objet_type($table); $type_id = id_table_objet($type); /** * Si la clé primaire est une clé multiple, on prend la première partie * Utile pour compter les versions de spip_versions par exemple */ if (count($types = explode(',', $type_id)) > 1) { $type_id = $types[0]; } $table_sql = table_objet_sql($type); $trouver_table = charger_fonction('trouver_table', 'base'); $arrivee = array($table, $trouver_table($table, $boucle->sql_serveur)); $depart = array($boucle->id_table, $trouver_table($boucle->id_table, $boucle->sql_serveur)); // noter les jointures deja installees $joins = array_keys($boucle->from); if ($compt = calculer_jointure($boucle, $depart, $arrivee)) { if ($_fusion != "''") { // en cas de jointure, on ne veut pas du group_by sur la cle primaire ! // cela casse le compteur ! foreach ($boucle->group as $k => $group) { if ($group == $boucle->id_table . '.' . $boucle->primary) { unset($boucle->group[$k]); } } $boucle->group[] = '".($gb=' . $_fusion . ')."'; } $boucle->select[] = "COUNT({$compt}.{$type_id}) AS compteur_{$table}"; if ($op) { $boucle->having[] = array("'" . $op . "'", "'compteur_" . $table . "'", $op_val); } if ($left) { foreach ($boucle->from as $k => $val) { if (!in_array($k, $joins)) { $boucle->from_type[$k] = 'left'; } } } } }
function genie_depublier_dist($time) { //va chercher les objets de spip_depublies avec une date_depublie pour aujourd'hui include_spip('base/abstract_sql'); $today = date('Y-m-d H:i:s'); if ($depublications = sql_allfetsel('*', 'spip_depublies', 'DATE_FORMAT(date_depublie, "%Y-%m-%d %H:%i:%s") <= ' . sql_quote($today) . ' AND DATE_FORMAT(date_depublie, "%Y-%m-%d %H:%i:%s") >0') and is_array($depublications)) { foreach ($depublications as $depublication) { $objet = $depublication['objet']; $id_objet = $depublication['id_objet']; $statut_depublication = $depublication['statut']; $date_depublie = $depublication['date_depublie']; spip_log("on veut depublier {$objet} {$id_objet} {$statut_depublication}", 'depublication'); //on cherche la table de l'objet donné $_id_objet = id_table_objet($objet); //id_article $table = table_objet_sql($objet); //articles //si le statut est différent de celui demandé if ($a_depublier = sql_getfetsel($_id_objet, $table, "statut != " . sql_quote($statut_depublication) . " AND {$_id_objet} = " . intval($id_objet))) { //si les conditions sont remplies, on change le statut dans cette table sql_updateq($table, array("statut" => $statut_depublication), "{$_id_objet}= " . intval($id_objet)); //et on supprime l'entrée sql_delete('spip_depublies', 'id_objet=' . intval($id_objet) . ' AND objet=' . sql_quote($objet)); } } } return 1; }
/** * Detecter les demande d'acces aux pages restreintes * et re-orienter vers une 401 si necessaire * * @param <type> $contexte * @return <type> */ function accesrestreint_page_indisponible($contexte){ if ($contexte['status']=='404' AND isset($contexte['type'])){ $objet = $contexte['type']; $table_sql = table_objet_sql($objet); $id_table_objet = id_table_objet($objet); if ($id = intval($contexte[$id_table_objet])){ $publie = true; $restreint = false; $trouver_table = charger_fonction('trouver_table','base'); $desc = $trouver_table($table_sql); if (isset($desc['field']['statut'])){ $statut = sql_getfetsel('statut', $table_sql, "$id_table_objet=".intval($id)); if ($statut!='publie') $publie = false; } include_spip('inc/autoriser'); if ($publie AND !autoriser('voir',$objet,$id)){ // c'est un contenu restreint $contexte['status'] = '401'; $contexte['code'] = '401 Unauthorized'; $contexte['fond'] = '401'; $contexte['erreur'] = _T('accesrestreint:info_acces_restreint'); $contexte['cible'] = self(); } } } return $contexte; }
/** * Retourne la description d'un champ extra indiqué * * Retourne le tableau de description des options de saisies * ou un des attributs de ce tableau * * @param string $objet * Type d'objet * @param string $colonne * Nom de la colonne SQL * @param string $demande * Nom du paramètre demandé. * Non renseigné, tout le tableau de description est retourné * @return mixed * - Tableau si toute la description est demandée * - Indéfini si un élément spécifique de la description est demandé. * - Chaine vide si le champs extra n'est pas trouvé */ function calculer_balise_CHAMP_EXTRA($objet, $colonne, $demande='') { // Si la balise n'est pas dans une boucle, on cherche un objet explicite dans le premier argument // de la forme "trucs/colonne" ou "spip_trucs/colonne" if (!$objet and $decoupe = explode('/', $colonne) and count($decoupe) == 2){ $objet = $decoupe[0]; $colonne = $decoupe[1]; } // recuperer la liste des champs extras existants include_spip('cextras_pipelines'); if (!$saisies = champs_extras_objet( $table = table_objet_sql($objet) )) { return ''; } include_spip('inc/saisies'); if (!$saisie = saisies_chercher($saisies, $colonne)) { return ''; } if (!$demande) { return $saisie['options']; // retourne la description de la saisie... } if (array_key_exists($demande, $saisie['options'])) { return $saisie['options'][$demande]; } return ''; }
function cextras_objets_valides(){ $objets = array(); $objets_extensibles = pipeline("objets_extensibles", array( 'article' => _T('cextras:table_article'), 'auteur' => _T('cextras:table_auteur'), 'breve' => _T('cextras:table_breve'), 'groupes_mot' => _T('cextras:table_groupes_mot'), 'mot' => _T('cextras:table_mot'), 'rubrique' => _T('cextras:table_rubrique'), 'site' => _T('cextras:table_site') )); ksort($objets_extensibles); foreach ($objets_extensibles as $objet => $traduction) { $objets[$objet] = array( 'table' => table_objet_sql($objet), 'type' => objet_type(table_objet($objet)), 'nom' => $traduction, ); } return $objets; }
/** * Supprimer les révisions des objets disparus */ function optimiser_base_revisions() { /** * On commence par récupérer la liste des types d'objet ayant au moins une révision */ $objets_revises = sql_select('objet', 'spip_versions', 'id_version=1', 'objet'); /** * Pour chaque objet, on va contruire un tableau des identifiants disparus * On supprimera ensuite les occurences dans spip_versions et spip_versions_fragments */ while ($objet = sql_fetch($objets_revises)) { $in = array(); $table = table_objet_sql($objet['objet']); $id_table_objet = id_table_objet($objet['objet']); $res = sql_select("A.id_objet AS id_objet, A.objet AS objet", "spip_versions AS A LEFT JOIN {$table} AS R\n\t\t\t\t\t\t\tON R.{$id_table_objet}=A.id_objet AND A.objet=" . sql_quote($objet['objet']), "R.{$id_table_objet} IS NULL AND A.objet=" . sql_quote($objet['objet']) . " AND A.id_objet > 0", "A.id_objet", "A.id_objet"); while ($row = sql_fetch($res)) { $in[$row['id_objet']] = true; } sql_free($res); /** * Si on a un array * On supprime toute occurence des objets disparus dans : * -* spip_versions * -* spip_versions_fragments */ if ($in) { foreach (array('spip_versions', 'spip_versions_fragments') as $table) { sql_delete($table, sql_in('id_objet', array_keys($in)) . " AND objet=" . sql_quote($objet['objet'])); } } } }
function shop_liste_etapes($id_panier) { static $lesetapes = array(); $etapes = array('panier', 'qui', 'commande', 'livraison', 'paiement'); if (!$id_panier) { return $etapes; } if (isset($lesetapes["{$id_panier}"])) { return $lesetapes["{$id_panier}"]; } if ($id_auteur = intval(sql_getfetsel('id_auteur', 'spip_paniers', 'id_panier=' . intval($id_panier)))) { $etapes = array_diff($etapes, array('qui')); } $items = sql_allfetsel("*", "spip_paniers_liens", "id_panier=" . intval($id_panier)); $livrable = false; foreach ($items as $item) { $table = table_objet_sql($item['objet']); $primary = id_table_objet($item['objet']); $objet = sql_fetsel("*", $table, "{$primary}=" . intval($item['id_objet'])); if (!isset($objet['immateriel']) or !$objet['immateriel']) { $livrable = true; break; } } if (!$livrable) { $etapes = array_diff($etapes, array('livraison')); } return $lesetapes["{$id_panier}"] = $etapes; }
function formulaires_editer_champs_extras_traiter_dist($objet, $redirect = '') { $retour = array('redirect' => $redirect); $table = table_objet_sql($objet); include_spip('inc/iextras'); $saisies = iextras_champs_extras_definis($table); $nouvelles_saisies = session_get('constructeur_formulaire_champs_extras_' . $table); $diff = saisies_comparer_par_identifiant($saisies, $nouvelles_saisies); $extras = array(); include_spip('inc/cextras'); // supprimer les champs supprimes champs_extras_supprimer($table, $diff['supprimees']); // ajouter les nouveaux champs; champs_extras_creer($table, $diff['ajoutees']); // modifier les champs modifies; if ($diff['modifiees']) { $anciennes = saisies_lister_par_identifiant($saisies); $anciennes = array_intersect_key($anciennes, $diff['modifiees']); champs_extras_modifier($table, $diff['modifiees'], $anciennes); } # champs_extras_modifier($table, # modifiees nouvelles, # modifiees anciennes); ecrire_meta("champs_extras_" . $table, serialize($nouvelles_saisies)); $retour['message_ok'] = 'Super !'; return $retour; }
/** * supprime/compte les elements listes d'un type donne * * @param nom $table * @param tableau $ids (si $id==-1, on vide/compte tout) * @param booleen $compter * @return array(nb objets, nb objets lies, ids trouves) */ function cs_corbeille_gerer($table, $ids=array(), $vider=false) { $params = cs_corbeille_table_infos($table); if (isset($params['table'])) $table = $params['table']; include_spip('base/abstract_sql'); $type = objet_type($table); $table_sql = table_objet_sql($type); $id_table = id_table_objet($type); if (!$params['statut']) return false; //echo "$type - $table_sql - $id_table - ",table_objet_sql($type),'<hr>'; // determine les index des elements a supprimer $ids = $ids===-1 ?array_map('reset',sql_allfetsel($id_table,$table_sql,'statut='.sql_quote($params['statut']))) :array_map('reset',sql_allfetsel($id_table,$table_sql,sql_in($id_table,$ids).' AND statut='.sql_quote($params['statut']))); if (!count($ids)) return array(0, 0, array()); // compte/supprime les elements definis par la liste des index if($vider) sql_delete($table_sql,sql_in($id_table,$ids)); $nb = count($ids); // compte/supprime des elements lies $nb_lies = 0; $f = $vider?'sql_delete':'sql_countsel'; if ($table_liee=$params['tableliee']) { $trouver_table = charger_fonction('trouver_table','base'); foreach($table_liee as $unetable) { $desc = $trouver_table($unetable); if (isset($desc['field'][$id_table])) $nb_lies += $f($unetable,sql_in($id_table,$ids)); elseif(isset($desc['field']['id_objet']) AND isset($desc['field']['objet'])) $nb_lies += $f($unetable,sql_in('id_objet',$ids)." AND objet=".sql_quote($type)); } } return array($nb, $vider?'-1':$nb_lies, $ids); }
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)); } } }
/** * Supprimer un lien entre un document et un objet * * @param int $id_document * @param string $objet * @param int $id_objet * @param bool $supprime * si true, le document est supprime si plus lie a aucun objet * @param bool $check * si true, on verifie les documents references dans le texte de l'objet * et on les associe si pas deja fait * @return bool */ function supprimer_lien_document($id_document, $objet, $id_objet, $supprime = false, $check = false) { if (!($id_document = intval($id_document))) { return false; } // D'abord on ne supprime pas, on dissocie include_spip('action/editer_liens'); objet_dissocier(array('document' => $id_document), array($objet => $id_objet)); // Si c'est une vignette, l'eliminer du document auquel elle appartient // cas tordu peu probable sql_updateq("spip_documents", array('id_vignette' => 0), "id_vignette=" . $id_document); // verifier son statut apres une suppression de lien include_spip('action/editer_document'); document_instituer($id_document); pipeline('post_edition', array('args' => array('operation' => 'delier_document', 'action' => 'delier_document', 'table' => 'spip_documents', 'id_objet' => $id_document, 'objet' => $objet, 'id' => $id_objet), 'data' => null)); if ($check) { // si demande, on verifie que ses documents vus sont bien lies ! $spip_table_objet = table_objet_sql($objet); $table_objet = table_objet($objet); $id_table_objet = id_table_objet($objet, $serveur); $champs = sql_fetsel('*', $spip_table_objet, addslashes($id_table_objet) . "=" . intval($id_objet)); $marquer_doublons_doc = charger_fonction('marquer_doublons_doc', 'inc'); $marquer_doublons_doc($champs, $id_objet, $objet, $id_table_objet, $table_objet, $spip_table_objet, '', $serveur); } // On supprime ensuite s'il est orphelin // et si demande // ici on ne bloque pas la suppression d'un document rattache a un autre if ($supprime and !sql_countsel('spip_documents_liens', "objet!='document' AND id_document=" . $id_document)) { $supprimer_document = charger_fonction('supprimer_document', 'action'); return $supprimer_document($id_document); } }
/** * Modifier la langue d'un objet * * @param string $objet * @param int $id * @param int $id_rubrique * @param string $changer_lang * @return string */ function action_instituer_langue_objet_dist($objet, $id, $id_rubrique, $changer_lang) { if ($changer_lang) { $table_objet_sql = table_objet_sql($objet); $id_table_objet = id_table_objet($objet); if ($changer_lang != "herit") { sql_updateq($table_objet_sql, array('lang' => $changer_lang, 'langue_choisie' => 'oui'), "{$id_table_objet}=" . intval($id)); include_spip('inc/rubriques'); if ($table_objet_sql == 'spip_rubriques') { calculer_langues_rubriques(); } $langues = calculer_langues_utilisees(); ecrire_meta('langues_utilisees', $langues); } else { $langue_parent = sql_getfetsel("lang", "spip_rubriques", "id_rubrique=" . intval($id_rubrique)); if (!$langue_parent) { $langue_parent = $GLOBALS['meta']['langue_site']; } sql_updateq($table_objet_sql, array('lang' => $langue_parent, 'langue_choisie' => 'non'), "{$id_table_objet}=" . intval($id)); $changer_lang = $langue_parent; if ($table_objet_sql == 'spip_rubriques') { include_spip('inc/rubriques'); calculer_langues_rubriques(); } } } return $changer_lang; }
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)); }
function lister_traductions($id_trad, $objet) { $table_objet_sql = table_objet_sql($objet); $primary = id_table_objet($objet); $rows = sql_allfetsel("{$primary} as id,lang", $table_objet_sql, 'id_trad=' . intval($id_trad)); lang_select(); return $rows; }
/** * Construire un tableau par popularite * classemnt => id_truc * * @param string $type * @param string $serveur * @return array */ function classement_populaires($type, $serveur = '') { static $classement = array(); if (isset($classement[$type])) { return $classement[$type]; } $classement[$type] = sql_allfetsel(id_table_objet($type, $serveur), table_objet_sql($type, $serveur), "statut='publie' AND popularite > 0", "", "popularite DESC", '', '', $serveur); $classement[$type] = array_map('reset', $classement[$type]); return $classement[$type]; }
function declarer_champs_extras($champs, $tables){ // ajoutons les champs un par un foreach ($champs as $c){ $table = table_objet_sql($c->table); if (isset($tables[$table]) and $c->champ and $c->sql) { $tables[$table]['field'][$c->champ] = $c->sql; } } return $tables; }
/** * * Surcharge pour permettre l'upload d'un document pour un visiteur anonyme * * http://code.spip.net/@autoriser_joindredocument_dist * * @return bool */ function autoriser_joindredocument($faire, $type, $id, $qui, $opt) { include_spip('inc/config'); $return = FALSE; $public = _request('exec') ? FALSE : TRUE; if (!$public and (($type == 'article' or in_array(table_objet_sql($type), explode(',', lire_config('documents_objets', '')))) and ($id > 0 and autoriser('modifier', $type, $id, $qui, $opt) or $id < 0 and abs($id) == $qui['id_auteur'] and autoriser('ecrire', $type, $id, $qui, $opt))) or $public and ($type == 'article' or in_array(table_objet_sql($type), explode(',', lire_config('documents_objets', ''))))) { $return = TRUE; } return $return; }
/** * Retourne le code HTML du portfolio, liste des documents et formulaire d'ajout de documents * * @note * Marque les documents vus dans les textes de l'objet avant le calcul ! * * @uses inc_marquer_doublons_doc_dist() * * @param int $id Identifiant de l'objet * @param string $type Type d'objet * @return string code HTML **/ function inc_documenter_objet_dist($id, $type) { $serveur = ''; // avant de documenter un objet, on verifie que ses documents vus sont bien lies ! $spip_table_objet = table_objet_sql($type); $table_objet = table_objet($type); $id_table_objet = id_table_objet($type, $serveur); $champs = sql_fetsel('*', $spip_table_objet, addslashes($id_table_objet) . "=" . intval($id)); $marquer_doublons_doc = charger_fonction('marquer_doublons_doc', 'inc'); $marquer_doublons_doc($champs, $id, $type, $id_table_objet, $table_objet, $spip_table_objet, '', $serveur); $contexte = array('objet' => $type, 'id_objet' => $id); return recuperer_fond('prive/objets/contenu/portfolio_document', array_merge($_GET, $contexte)); }
/** * Autorisation de voir les revisions ? * * Il faut : * - des revisions définies pour cet objet * - que l'objet existe * - que l'on soit autorisé à voir l'objet * * @param string $faire Action demandée * @param string $type Type d'objet sur lequel appliquer l'action * @param int $id Identifiant de l'objet * @param array $qui Description de l'auteur demandant l'autorisation * @param array $opt Options de cette autorisation * @return bool true s'il a le droit, false sinon */ function autoriser_voirrevisions_dist($faire, $type, $id, $qui, $opt) { $table = table_objet_sql($type); $id_table_objet = id_table_objet($type); include_spip('inc/revisions'); if (!liste_champs_versionnes($table)) { return false; } if (!($row = sql_fetsel("*", $table, "{$id_table_objet}=" . intval($id)))) { return false; } return autoriser('voir', $type, $id, $qui, $opt); }
/** * Detecter les demande d'acces aux pages restreintes * et re-orienter vers une 401 si necessaire * * @param array $contexte * @return array */ function accesrestreint_page_indisponible($contexte) { if ($contexte['status'] == '404') { $objet = ""; if (isset($contexte['type'])) { $objet = $contexte['type']; } elseif (isset($contexte['type-page'])) { $objet = $contexte['type-page']; } elseif (isset($contexte['fond_erreur'])) { include_spip('inc/urls'); define('_DEFINIR_CONTEXTE_TYPE_PAGE', true); $c2 = $contexte; list($fond2, $c2, $url_redirect) = urls_decoder_url(nettoyer_uri(), $contexte['fond_erreur'], $c2, true); $objet = $c2['type-page']; } if ($objet) { $table_sql = table_objet_sql($objet); $id_table_objet = id_table_objet($objet); if ($id = intval($contexte[$id_table_objet])) { $publie = true; if (include_spip("base/objets") and function_exists("objet_test_si_publie")) { $publie = objet_test_si_publie($objet, $id); } else { $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($table_sql); if (isset($desc['field']['statut'])) { $statut = sql_getfetsel('statut', $table_sql, "{$id_table_objet}=" . intval($id)); if ($statut != 'publie') { $publie = false; } } } include_spip('inc/autoriser'); if ($publie and !autoriser('voir', $objet, $id)) { // c'est un contenu restreint $contexte['status'] = '401'; $contexte['code'] = '401 Unauthorized'; $contexte['fond'] = '401'; $contexte['erreur'] = _T('accesrestreint:info_acces_restreint'); $contexte['cible'] = self(); if (!isset($contexte['objet'])) { $contexte['objet'] = $objet; $contexte['id_objet'] = $id; } } } } } return $contexte; }
/** * Déterminer le mode d'upload si la valeur au chargement du formulaire est "auto" * * @param string $mode * Le mode passé au formulaire * @param int|string $id_document * L'identifiant numérique du document à remplacer ou "new" par défaut * @param string $objet * Le type d'objet sur lequel ajouter le document * @return string $mode * Le mode définitif */ function joindre_determiner_mode($mode, $id_document, $objet) { if ($mode == 'auto') { if (intval($id_document)) { $mode = sql_getfetsel('mode', 'spip_documents', 'id_document=' . intval($id_document)); } if (!in_array($mode, array('choix', 'document', 'image'))) { $mode = 'choix'; if ($objet and !in_array(table_objet_sql($objet), explode(',', $GLOBALS['meta']["documents_objets"]))) { $mode = 'image'; } } } return $mode; }
function cs_titre_sql($table, $where) { $titre = cs_titre_champ($table); // Utiliser la bonne requete en fonction de la version de SPIP if(function_exists('sql_getfetsel') && function_exists('table_objet_sql')) { // SPIP 2.0 if($r = sql_getfetsel($titre, table_objet_sql($table), $where)) return $r; } else { if($r = spip_query("SELECT $titre FROM spip_$table WHERE $where")) // s'il existe un champ, on le retourne if($row = spip_fetch_array($r)) return $row[$titre]; } // sinon, rien ! return ''; }
function definir($params=array()) { foreach ($params as $cle=>$valeur) { if (isset($this->$cle)) { $this->$cle = $valeur; } } // calculer _objet et _table_sql $this->_type = objet_type(table_objet($this->table)); // article $this->_objet = table_objet($this->_type); // articles $this->_table_sql = table_objet_sql($this->table); // spip_articles // calculer l'id du champ extra $this->make_id(); }
function exec_puce_statut_args($id, $type) { if (in_array($type,array('article','breve','site'))) { $table = table_objet_sql($type); $prim = id_table_objet($type); $id = intval($id); $r = sql_fetsel("id_rubrique,statut", "$table", "$prim=$id"); $statut = $r['statut']; $id_rubrique = $r['id_rubrique']; } else { $id_rubrique = intval($id); $statut = 'prop'; // arbitraire } $puce_statut = charger_fonction('puce_statut', 'inc'); ajax_retour($puce_statut($id,$statut,$id_rubrique,$type, true)); }
/** * Traitement de l'affichage ajax des puces d'action rapide * * Appelle la fonction de traitement des puces statuts * après avoir retrouvé le statut en cours de l'objet * et son parent (une rubrique) * * @param int $id * Identifiant de l'objet * @param string $type * Type d'objet * @return string Code HTML **/ function exec_puce_statut_args($id, $type) { if ($table_objet_sql = table_objet_sql($type) and $d = lister_tables_objets_sql($table_objet_sql) and isset($d['statut_textes_instituer']) and $d['statut_textes_instituer']) { $prim = id_table_objet($type); $id = intval($id); $r = sql_fetsel("id_rubrique,statut", $table_objet_sql, "{$prim}={$id}"); $statut = $r['statut']; $id_rubrique = $r['id_rubrique']; } else { $id_rubrique = intval($id); $statut = 'prop'; // arbitraire } $puce_statut = charger_fonction('puce_statut', 'inc'); ajax_retour($puce_statut($id, $statut, $id_rubrique, $type, true)); }
/** * Calculer le poids (en g) et le volume (en cm3) de N objets * (a livrer dans une commande) * la quantite est fournie en argument car pour certains objets il peut y avoir des effet de seuil * du au packaging * Ex : des bouteilles envoyees par caisse de 6 meme si caisse incomplete * a traiter au cas par cas * * La fonction est specialisable en fonction du type, sous le nom * mesure_{objet}_dist() * * @param string $objet * @param int $id_objet * @param int $quantite * @return array ($poids,$volume) */ function mesure_defaut_dist($objet, $id_objet, $quantite = 1) { $poids = $volume = 0; $table_sql = table_objet_sql($objet); $primary = id_table_objet($objet); $row = sql_fetsel("*", $table_sql, $primary . "=" . intval($id_objet)); if (isset($row['poids'])) { $poids = floatval($row['poids']) * $quantite; } if (isset($row['volume'])) { $volume = floatval($row['volume']) * $quantite; } elseif (isset($row['longueur']) and isset($row['largeur']) and isset($row['hauteur'])) { $volume = floatval($row['longueur']) * floatval($row['largeur']) * floatval($row['hauteur']) * $quantite; } return array($poids, $volume); }
function formulaires_reviser_charger_dist($objet, $id_objet, $id_version, $id_diff) { if (!($objets = unserialize($GLOBALS['meta']['objets_versions']))) { $objets = array(); } if (!in_array(table_objet_sql($objet), $objets)) { return false; } $last_version = trouver_version_inf($objet, $id_objet); list($id_version, $id_diff) = check_version_diff($objet, $id_objet, $id_version, $id_diff, $last_version); if (!$id_version) { return false; } $valeurs = array('_last_version' => $last_version, '_objet' => $objet, '_id_objet' => $id_objet, 'id_version' => $id_version, 'id_diff' => $id_diff); return $valeurs; }
function autoriser_modifierurl($faire, $type = '', $id = 0, $qui = null, $opt = null) { if (autoriser('modifier', $type, $id, $qui, $opt)) { return true; } // si pas le droit de 'modifier', regarder d'un peu plus pres pourquoi if (!$type or !intval($id)) { return false; } // verifier si l'objet existe encore en base $table_sql = table_objet_sql($type); $primary = id_table_objet($type); if (!sql_countsel($table_sql, "{$primary}=" . intval($id))) { return autoriser('administrer', 'url'); } return false; }
function exec_dater_args($id, $type, $script) { if (!$id OR !autoriser('voir',$type,$id)) { include_spip('inc/minipres'); echo minipres(); } else { $table = table_objet_sql($type); if (!id_table_objet($table)) { spip_log("dater: $type table inconnue"); $type = 'article'; $table = table_objet_sql($type); } if (!preg_match('/^[_\w]+$/', $script)) $script = 'articles'; if (!function_exists($f = "dater_retour_$script")) $f = "dater_retour_articles"; include_spip('inc/actions'); ajax_retour($f($id, $type, $table)); } }
/** * Chargement du formulaire d'édition de liens * * #FORMULAIRE_EDITER_LIENS{auteurs,article,23} * pour associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens * #FORMULAIRE_EDITER_LIENS{article,23,auteurs} * pour associer des auteurs à l'article 23, sur la table pivot spip_articles_liens * #FORMULAIRE_EDITER_LIENS{articles,auteur,12} * pour associer des articles à l'auteur 12, sur la table pivot spip_articles_liens * #FORMULAIRE_EDITER_LIENS{auteur,12,articles} * pour associer des articles à l'auteur 12, sur la table pivot spip_auteurs_liens * * @param string $a * @param string|int $b * @param int|string $c * @param bool $editable * @return array */ function formulaires_editer_liens_charger_dist($a, $b, $c, $editable = true) { list($table_source, $objet, $id_objet, $objet_lien) = determine_source_lien_objet($a, $b, $c); if (!$table_source or !$objet or !$objet_lien or !$id_objet) { return false; } $objet_source = objet_type($table_source); $table_sql_source = table_objet_sql($objet_source); // verifier existence de la table xxx_liens include_spip('action/editer_liens'); if (!objet_associable($objet_lien)) { return false; } // L'éditabilité :) est définie par un test permanent (par exemple "associermots") ET le 4ème argument $editable = ($editable and autoriser('associer' . $table_source, $objet, $id_objet)); if (!$editable and !count(objet_trouver_liens(array($objet_lien => '*'), array($objet_lien == $objet_source ? $objet : $objet_source => '*')))) { return false; } $valeurs = array('id' => "{$table_source}-{$objet}-{$id_objet}-{$objet_lien}", '_vue_liee' => $table_source . "_lies", '_vue_ajout' => $table_source . "_associer", '_objet_lien' => $objet_lien, 'id_lien_ajoute' => _request('id_lien_ajoute'), 'objet' => $objet, 'id_objet' => $id_objet, 'objet_source' => $objet_source, 'table_source' => $table_source, 'recherche' => '', 'visible' => 0, 'ajouter_lien' => '', 'supprimer_lien' => '', '_oups' => _request('_oups'), 'editable' => $editable); return $valeurs; }