Ejemplo n.º 1
0
/**
 * 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';
                }
            }
        }
    }
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
/**
 * 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;
}
Ejemplo n.º 4
0
/**
 * 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 '';
}
Ejemplo n.º 5
0
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']));
            }
        }
    }
}
Ejemplo n.º 7
0
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;
}
Ejemplo n.º 9
0
/**
 * 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));
		}
	}
}
Ejemplo n.º 11
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;
}
Ejemplo n.º 13
0
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;
}
Ejemplo n.º 15
0
/**
 * 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];
}
Ejemplo n.º 16
0
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;
}
Ejemplo n.º 18
0
/**
 * 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);
}
Ejemplo n.º 20
0
/**
 * 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;
}
Ejemplo n.º 21
0
/**
 * 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;
}
Ejemplo n.º 22
0
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 '';
}
Ejemplo n.º 23
0
	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();
	}
Ejemplo n.º 24
0
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));
}
Ejemplo n.º 25
0
/**
 * 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));
}
Ejemplo n.º 26
0
/**
 * 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);
}
Ejemplo n.º 27
0
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;
}
Ejemplo n.º 28
0
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;
}
Ejemplo n.º 29
0
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));
	}
}
Ejemplo n.º 30
0
/**
 * 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;
}