Exemplo n.º 1
0
function type_urls_URL_objet_exec() {
	global $type_urls;
	$type = _request('type_objet');
	$trouver_table = charger_fonction('trouver_table', 'base');
	$desc = $trouver_table(table_objet($type));
	$table = $desc['table'];
	$champ_titre = $desc['titre']?$desc['titre']:'titre';
	$col_id =  @$desc['key']["PRIMARY KEY"];
	if (!$col_id) return false; // Quand $type ne reference pas une table
	$id_objet = intval(_request('id_objet'));

	// chercher dans la table des URLS
	include_spip('base/abstract_sql');
	//  Recuperer une URL propre correspondant a l'objet.
	$row = sql_fetsel("U.url, O.$champ_titre", "$table AS O LEFT JOIN spip_urls AS U ON (U.type='$type' AND U.id_objet=O.$col_id)", "O.$col_id=$id_objet", '', 'U.date DESC', 1);
	if (!$row) return false; # Quand $id_objet n'est pas un numero connu
	// Calcul de l'URL complete
	$url = str_replace('.././','../',generer_url_entite($id_objet, $type, '', '', true));
	$row2 = !strlen($url2 = $row['url'])
		// si l'URL n'etait pas presente en base, maintenant elle l'est !
		?sql_fetsel("url", "spip_urls", "id_objet=$id_objet AND type='$type'", '', 'date DESC', 1)
		:array('url'=>$url2);
	include_spip('inc/charsets');
	//  titre || url complete || type d'URLs || URL recalculee || url propre en base
	echo charset2unicode($row['titre']).'||'.$url.'||'.$type_urls.'||'.$row2['url'].'||'.$url2;
}
Exemplo n.º 2
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;
}
Exemplo n.º 3
0
function formulaires_forum_prive_charger_dist($objet, $id_objet, $id_forum, $afficher_previsu, $statut, $retour = '')
{
    if (!function_exists($f = 'forum_recuperer_titre')) {
        $f = 'forum_recuperer_titre_dist';
    }
    // si objet, il faut un titre, sinon on est dans un statut privrac/privadm qui permet un forum sans objet
    if ($objet and $id_objet and !($titre = $f($objet, $id_objet, $id_forum, false))) {
        return false;
    }
    $primary = id_table_objet($objet);
    $table = table_objet($objet);
    // Tableau des valeurs servant au calcul d'une signature de securite.
    // Elles seront placees en Input Hidden pour que inc/forum_insert
    // recalcule la meme chose et verifie l'identite des resultats.
    // Donc ne pas changer la valeur de ce tableau entre le calcul de
    // la signature et la fabrication des Hidden
    // Faire attention aussi a 0 != ''
    $ids = array();
    $ids[$primary] = ($x = intval($id_objet)) ? $x : '';
    $ids['id_objet'] = ($x = intval($id_objet)) ? $x : '';
    $ids['objet'] = $objet;
    $ids['id_forum'] = ($x = intval($id_forum)) ? $x : '';
    // ne pas mettre '', sinon le squelette n'affichera rien.
    $previsu = ' ';
    // pour les hidden
    $script_hidden = "";
    foreach ($ids as $id => $v) {
        $script_hidden .= "<input type='hidden' name='{$id}' value='{$v}' />";
    }
    $config = array();
    foreach (array('afficher_barre', 'forum_titre', 'forums_texte', 'forums_urlref') as $k) {
        $config[$k] = ' ';
    }
    return array('nom_site' => '', 'table' => $table, 'texte' => '', 'config' => $config, 'titre' => $titre, '_hidden' => $script_hidden, 'url_site' => "http://", 'id_forum' => $id_forum, '_sign' => implode('_', $ids), '_autosave_id' => $ids);
}
Exemplo n.º 4
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);
    }
}
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));
		}
	}
}
Exemplo n.º 6
0
/**
 * Retrouve la traduction d'un rôle dans un objet donné 
 *
 * @param string $role
 *     Le role dans la base de donnée
 * @param string $objet
 *     L'objet sur lequel est le rôle
 * @return string
 *     Le texte du rôle dans la langue en cours
 * 
**/
function filtre_role_dist($role, $objet) {
	if (!$role) return '';
	if (!$objet) return $role;
	$roles = roles_presents(table_objet(objet_type($objet)));
	if (isset($roles['titres'][$role])) {
		return _T($roles['titres'][$role]);
	}
	return $role;
}
Exemplo n.º 7
0
/**
 * Boite de configuration des objets articles
 *
 * @param array $flux
 * @return array
 */
function petitions_afficher_config_objet($flux)
{
    if (($type = $flux['args']['type']) == 'article' and $id = $flux['args']['id']) {
        if (autoriser('modererpetition', $type, $id)) {
            $table = table_objet($type);
            $id_table_objet = id_table_objet($type);
            $flux['data'] .= recuperer_fond("prive/configurer/petitionner", array($id_table_objet => $id));
        }
    }
    return $flux;
}
/**
 * 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));
}
Exemplo n.º 9
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();
	}
Exemplo n.º 10
0
/**
 * Charger les données de #FORMULAIRE_TRADUIRE
 *
 * @param string $objet
 *     Type d'objet
 * @param int $id_objet
 *     Identifiant de l'objet
 * @param string $retour
 *     URL de retour
 * @param bool $traduire
 *     Permet de désactiver la gestion de traduction sur un objet ayant id_trad
 * @return array|bool
 *     False si l'identifiant n'est pas numérique ou si l'objet n'a pas de langue
 *     Contexte à transmettre au squelette du formulaire sinon
 */
function formulaires_traduire_charger_dist($objet, $id_objet, $retour = '', $traduire = true)
{
    if (!intval($id_objet)) {
        return false;
    }
    $valeurs = formulaires_editer_objet_charger($objet, $id_objet, null, 0, $retour, '');
    // verifier que l'objet indique possede bien des champs id_trad et lang
    // attention, charger renomme lang => langue pour ne pas perturber la langue d'affichage du squelette
    if (!isset($valeurs['langue'])) {
        return false;
    }
    $valeurs['editable'] = autoriser('changerlangue', $objet, $id_objet);
    $valeurs['_langue'] = '';
    $langue_parent = '';
    $id_parent = '';
    if (isset($valeurs['id_rubrique'])) {
        $id_parent = $valeurs['id_rubrique'];
    }
    if (isset($valeurs['id_parent'])) {
        $id_parent = $valeurs['id_parent'];
    }
    if ($id_parent) {
        $langue_parent = sql_getfetsel("lang", "spip_rubriques", "id_rubrique=" . intval($id_parent));
    }
    if (!$langue_parent) {
        $langue_parent = $GLOBALS['meta']['langue_site'];
    }
    if ($valeurs['editable'] and in_array(table_objet_sql($objet), explode(',', $GLOBALS['meta']['multi_objets']))) {
        $valeurs['_langue'] = $valeurs['langue'];
    }
    $valeurs['langue_parent'] = $langue_parent;
    $valeurs['_objet'] = $objet;
    $valeurs['_id_objet'] = $id_objet;
    $valeurs['changer_lang'] = '';
    $valeurs['_traduisible'] = autoriser('changertraduction', $objet, $id_objet);
    $valeurs['_traduire'] = '';
    if (isset($valeurs['id_trad']) and $valeurs['_traduisible']) {
        $valeurs['_traduire'] = $traduire ? ' ' : '';
        $valeurs['_vue_traductions'] = "prive/objets/liste/" . (trouver_fond($f = table_objet($objet) . "-trad", "prive/objets/liste") ? $f : "objets-trad");
        // pour afficher la liste des trad sur la base de l'id_trad en base
        // independamment d'une saisie en cours sur id_trad
        $valeurs['_lister_id_trad'] = $valeurs['id_trad'];
        $valeurs['_id_parent'] = $id_parent;
    }
    $valeurs['_saisie_en_cours'] = (!_request('annuler') and (_request('changer_lang') !== null or _request('changer_id_trad') !== null));
    $valeurs['_pipeline'] = array('traduire', array('type' => $objet, 'id' => $id_objet));
    return $valeurs;
}
Exemplo n.º 11
0
function inc_editer_mots_dist($objet, $id_objet, $cherche_mot, $select_groupe, $flag, $visible = false, $url_base='') {
	if ($GLOBALS['meta']["articles_mots"] == 'non')	return '';
	if (!preg_match('/^[0-9, ]*$/', $select_groupe)) return '';
	$trouver_table = charger_fonction('trouver_table', 'base');
	$nom = table_objet($objet);
	$desc = $trouver_table($nom);
	$table_id =  @$desc['key']["PRIMARY KEY"];

	$reponse = ($flag AND $cherche_mot)
		? chercher_inserer_mot($cherche_mot, $select_groupe, $objet, $id_objet, $nom, $table_id, $url_base)
		: '';

	list($liste, $mots) = afficher_mots_cles($flag, $objet, $id_objet, $nom, $table_id, $url_base);

	$aff =false;
	$bouton = _T('titre_mots_cles').aide ("artmots");

	if ($liste)
		$aff = true;

	if ($flag) { 	// si droit de modif donner le formulaire
		$visible = ($visible OR $cherche_mot OR ($flag === 'ajax'));
		list($visible, $res) = formulaire_mots_cles($id_objet, $mots, $nom, $table_id, $url_base, $visible, $objet);

		if ($res) {
			$liste .= debut_block_depliable($visible,"lesmots")
				. $res
				. creer_mot($nom, $id_objet, $table_id, $url_base, $cherche_mot, $select_groupe)
				. fin_block();
			$bouton = bouton_block_depliable($bouton, $visible,"lesmots");
			$aff = true;
		}
	}

	if (!$aff)
		return '';

	$res = debut_cadre_enfonce("mot-cle-24.gif", true, "", $bouton)
	  . $reponse
	  . $liste
	  . fin_cadre_enfonce(true);

	return ajax_action_greffe("editer_mots", $id_objet, $res);
}
Exemplo n.º 12
0
function nettoyer_url_page($url, $contexte=array())
{
	$url_objets = urls_liste_objets();
	$raccourci_url_page_html = ',^(?:[^?]*/)?('. $url_objets . ')([0-9]+)(?:\.html)?([?&].*)?$,';
	$raccourci_url_page_id = ',^(?:[^?]*/)?('. $url_objets .')\.php3?[?]id_\1=([0-9]+)([?&].*)?$,';
	$raccourci_url_page_spip = ',^(?:[^?]*/)?(?:spip[.]php)?[?]('. $url_objets .')([0-9]+)(&.*)?$,';

	if (preg_match($raccourci_url_page_html, $url, $regs)
	OR preg_match($raccourci_url_page_id, $url, $regs)
	OR preg_match($raccourci_url_page_spip, $url, $regs)) {
		$type = preg_replace(',s$,', '', table_objet($regs[1]));
		if ($type == 'syndic') $type = 'site';
		$_id = id_table_objet($regs[1]);
		$contexte[$_id] = $regs[2];
		$suite = $regs[3];
		return array($contexte, $type, null, $type, $suite);
	}
	return array();
}
Exemplo n.º 13
0
function exec_iconifier_args($id, $primary, $script, $iframe=false)
{
	$type = objet_type(table_objet(substr($primary, 3)));
	if (!preg_match('/^\w+$/', "$primary$script")
	  OR !autoriser('iconifier', $type, $id)) {
		include_spip('inc/minipres');
		echo minipres();
	} else {

		$iconifier = charger_fonction('iconifier', 'inc');
		$ret = $iconifier($primary, $id, $script, $visible=true);
	
		if ($iframe!=='iframe') 
			ajax_retour($ret);
		else {
			echo "<div class='upload_answer upload_document_added'>$ret</div>";
		}
	}
}?>
Exemplo n.º 14
0
/**
 * Ajouter un traitement automatique sur une balise
 *
 * On peut restreindre l'application du traitement au balises appelées dans un
 * type de boucle via le paramètre optionnel $table.
 *
 * @param array $interfaces
 *    Les interfaces du pipeline declarer_tables_interfaces
 * @param string $traitement
 *    Un format comme pour sprintf, dans lequel le compilateur passera la valeur de la balise
 * @param string $balise
 *    Le nom de la balise à laquelle on veut appliquer le traitement
 * @param string $table (optionnel)
 *    Un type de boucle auquel on veut restreindre le traitement.
 */
function ajouter_traitement_automatique($interfaces, $traitement, $balise, $table = 0)
{
    $table_traitements = $interfaces['table_des_traitements'];
    if (!isset($table_traitements[$balise])) {
        $table_traitements[$balise] = array();
    }
    /* On essaie d'être tolérant sur le nom de la table */
    if ($table) {
        include_spip('base/objets');
        $table = table_objet($table);
    }
    if (isset($table_traitements[$balise][$table])) {
        $traitement_existant = $table_traitements[$balise][$table];
    }
    if (!isset($traitement_existant) or !$traitement_existant) {
        $traitement_existant = '%s';
    }
    $interfaces['table_des_traitements'][$balise][$table] = sprintf($traitement, $traitement_existant);
    return $interfaces;
}
Exemplo n.º 15
0
function action_plan_dist()
{
    include_spip('inc/autoriser');
    if (!autoriser('ecrire')) {
        return false;
    }
    include_spip('base/objets');
    include_spip('inc/utils');
    $objet = table_objet(_request('objet'));
    $env = array('id_rubrique' => intval(_request('id_rubrique')), 'lister' => $objet == 'rubriques' ? 'rubrique' : 'tout', 'conteneur' => 'non');
    if ($statut = _request('statut')) {
        $env['statut'] = $statut;
    }
    $fond = "prive/squelettes/inclure/plan-{$objet}";
    header("Content-Type: text/html; charset=" . $GLOBALS['meta']['charset']);
    if (trouver_fond($fond)) {
        echo recuperer_fond($fond, $env);
    } else {
        echo "";
    }
}
Exemplo n.º 16
0
/**
 * Retrouve la source et l'objet de la liaison
 *
 * À partir des 3 premiers paramètres transmis au formulaire,
 * la fonction retrouve :
 * - l'objet dont on utilise sa table de liaison (table_source)
 * - l'objet et id_objet sur qui on lie des éléments (objet, id_objet)
 * - l'objet que l'on veut lier dessus (objet_lien)
 * 
 * @param string $a
 * @param string|int $b
 * @param int|string $c
 * @return array
 *   ($table_source,$objet,$id_objet,$objet_lien)
 */
function determine_source_lien_objet($a, $b, $c)
{
    $table_source = $objet_lien = $objet = $id_objet = null;
    // auteurs, article, 23 :
    // associer des auteurs à l'article 23, sur la table pivot spip_auteurs_liens
    if (is_numeric($c) and !is_numeric($b)) {
        $table_source = table_objet($a);
        $objet_lien = objet_type($a);
        $objet = objet_type($b);
        $id_objet = $c;
    }
    // article, 23, auteurs
    // associer des auteurs à l'article 23, sur la table pivot spip_articles_liens
    if (is_numeric($b) and !is_numeric($c)) {
        $table_source = table_objet($c);
        $objet_lien = objet_type($a);
        $objet = objet_type($a);
        $id_objet = $b;
    }
    return array($table_source, $objet, $id_objet, $objet_lien);
}
Exemplo n.º 17
0
/**
 * Vérifie qu'un objet dispose de rôles fonctionnels
 *
 * Retourne une description des rôles si c'est le cas
 *
 * @param string $objet
 *     Objet source qui possède la table de liaison
 * @param string $objet_destination
 *     Objet sur quoi on veut lier
 *     Si défini, le retour ne contient que les roles possibles pour cet objet
 *     Sinon retourne tous les roles possibles quelque soit l'objet
 * @return bool|array
 *     false si rôles indisponibles on non déclarés
 *     array : description des roles applicables dans 3 index : colonne, titres, roles
 **/
function roles_presents($objet, $objet_destination = '')
{
    $desc = lister_tables_objets_sql(table_objet_sql($objet));
    // pas de liste de roles, on sort
    if (!isset($desc['roles_titres']) or !($titres = $desc['roles_titres'])) {
        return false;
    }
    // on vérifie que la table de liaison existe
    include_spip('action/editer_liens');
    if (!($lien = objet_associable($objet))) {
        return false;
    }
    // on cherche ensuite si la colonne existe bien dans la table de liaison (par défaut 'role')
    $colonne = isset($desc['roles_colonne']) ? $desc['roles_colonne'] : 'role';
    $trouver_table = charger_fonction('trouver_table', 'base');
    list(, $table_lien) = $lien;
    $desc_lien = $trouver_table($table_lien);
    if (!isset($desc_lien['field'][$colonne])) {
        return false;
    }
    // sur quoi peuvent s'appliquer nos rôles
    if (!($application = $desc['roles_objets'])) {
        return false;
    }
    // destination presente, on restreint si possible
    if ($objet_destination) {
        $objet_destination = table_objet($objet_destination);
        // pour l'objet
        if (isset($application[$objet_destination])) {
            $application = $application[$objet_destination];
            // sinon pour tous les objets
        } elseif (isset($application['*'])) {
            $application = $application['*'];
        } else {
            return false;
        }
    }
    // tout est ok
    return array('titres' => $titres, 'roles' => $application, 'colonne' => $colonne);
}
Exemplo n.º 18
0
/**
 * Chargement du formulaire d'édition d'un mot
 *
 * @see formulaires_editer_objet_charger()
 *
 * @param int|string $id_mot
 *     Identifiant du mot. 'new' pour un nouveau mot.
 * @param int $id_groupe
 *     Identifiant du groupe parent (si connu)
 * @param string $retour
 *     URL de redirection après le traitement
 * @param string $associer_objet
 *     Éventuel 'objet|x' indiquant de lier le mot créé à cet objet,
 *     tel que 'article|3'
 * @param string $dummy1 ?
 * @param string $dummy2 ?
 * @param string $config_fonc
 *     Nom de la fonction ajoutant des configurations particulières au formulaire
 * @param array $row
 *     Valeurs de la ligne SQL du mot, si connu
 * @param string $hidden
 *     Contenu HTML ajouté en même temps que les champs cachés du formulaire.
 * @return array
 *     Environnement du formulaire
 **/
function formulaires_editer_mot_charger_dist($id_mot = 'new', $id_groupe = 0, $retour = '', $associer_objet = '', $dummy1 = '', $dummy2 = '', $config_fonc = 'mots_edit_config', $row = array(), $hidden = '')
{
    $valeurs = formulaires_editer_objet_charger('mot', $id_mot, $id_groupe, '', $retour, $config_fonc, $row, $hidden);
    if ($valeurs['id_parent'] && !$valeurs['id_groupe']) {
        $valeurs['id_groupe'] = $valeurs['id_parent'];
    }
    if ($associer_objet) {
        if (intval($associer_objet)) {
            // compat avec l'appel de la forme ajouter_id_article
            $objet = 'article';
            $id_objet = intval($associer_objet);
        } else {
            list($objet, $id_objet) = explode('|', $associer_objet);
        }
    }
    $valeurs['table'] = $associer_objet ? table_objet($objet) : '';
    // Si nouveau et titre dans l'url : fixer le titre
    if ($id_mot == 'oui' and strlen($titre = _request('titre'))) {
        $valeurs['titre'] = $titre;
    }
    return $valeurs;
}
Exemplo n.º 19
0
function dater_table($id, $type)
{
	$trouver_table = charger_fonction('trouver_table', 'base');
	$nom = table_objet($type);
	$desc = $trouver_table($nom);
        $table = $desc['table'];
        $col_id =  @$desc['key']["PRIMARY KEY"];
	if (!$table OR !$col_id) {
		spip_log("action_dater: table $type ?");
		return;
	}
	include_spip('public/interfaces');
	$champ = @$GLOBALS['table_date'][$nom];
	if (!$champ) $champ = 'date';
	$date = format_mysql_date(_request('annee'), _request('mois'), _request('jour'), _request('heure'), _request('minute'));
	// utiliser instituer_xx si dispo
	if (include_spip('action/editer_'.$type) AND function_exists($f='instituer_'.$type)){
		$f($id,array($champ => $date));
	}
	else
		sql_updateq($table, array($champ => $date), "$col_id=$id");
	return $date;
}
Exemplo n.º 20
0
function balise_FORMULAIRE_UPLOAD_stat($args, $filtres) {
	// si on force les parametres par #FORMULAIRE_UPLOAD{article,12,inc-upload_truc}
	// on enleve les parametres calcules
	if (isset($args[3])) {
		array_shift($args);
		array_shift($args);
	}
	$objet = $args[0];
	$id_objet = $args[1];
	if(!$fond_documents = $args[2])
		$fond_documents = 'inc-upload_documents';
	// pas dans une boucle ? on attache a l'auteur connecté
	if ($objet == 'balise_hors_boucle') {
		$objet = 'auteur';
		$id_objet = $GLOBALS['auteur_session']['id_auteur'];
	} else {
		$objet = table_objet($objet);
	}
	// on envoie les arguments a la fonction charger 
	// du formulaire CVT fomulaires/upload.php
	return array($objet, $id_objet, $fond_documents);

}
Exemplo n.º 21
0
function styliser_par_objets($flux)
{
    if (test_espace_prive() and !($squelette = $flux['data']) and strncmp($flux['args']['fond'], 'prive/objets/', 13) == 0 and $echafauder = charger_fonction('echafauder', 'prive', true)) {
        if (strncmp($flux['args']['fond'], 'prive/objets/liste/', 19) == 0) {
            $table = table_objet(substr($flux['args']['fond'], 19));
            $table_sql = table_objet_sql($table);
            $objets = lister_tables_objets_sql();
            if (isset($objets[$table_sql])) {
                $flux['data'] = $echafauder($table, $table, $table_sql, "prive/objets/liste/objets", $flux['args']['ext']);
            }
        }
        if (strncmp($flux['args']['fond'], 'prive/objets/contenu/', 21) == 0) {
            $type = substr($flux['args']['fond'], 21);
            $table = table_objet($type);
            $table_sql = table_objet_sql($table);
            $objets = lister_tables_objets_sql();
            if (isset($objets[$table_sql])) {
                $flux['data'] = $echafauder($type, $table, $table_sql, "prive/objets/contenu/objet", $flux['args']['ext']);
            }
        }
    }
    return $flux;
}
Exemplo n.º 22
0
function medias_post_edition($flux)
{
    // le serveur n'est pas toujours la
    $serveur = isset($flux['args']['serveur']) ? $flux['args']['serveur'] : '';
    // si on ajoute un document, mettre son statut a jour
    if ($flux['args']['action'] == 'ajouter_document') {
        include_spip('action/editer_document');
        // mettre a jour le statut si necessaire
        document_instituer($flux['args']['id_objet']);
    } elseif ($flux['args']['table'] !== 'spip_documents') {
        $type = isset($flux['args']['type']) ? $flux['args']['type'] : objet_type($flux['args']['table']);
        // verifier d'abord les doublons !
        include_spip('inc/autoriser');
        if (autoriser('autoassocierdocument', $type, $flux['args']['id_objet'])) {
            $table_objet = isset($flux['args']['table_objet']) ? $flux['args']['table_objet'] : table_objet($flux['args']['table'], $serveur);
            $marquer_doublons_doc = charger_fonction('marquer_doublons_doc', 'inc');
            $marquer_doublons_doc($flux['data'], $flux['args']['id_objet'], $type, id_table_objet($type, $serveur), $table_objet, $flux['args']['table'], '', $serveur);
        }
        if ($flux['args']['action'] == 'instituer' or isset($flux['data']['statut'])) {
            include_spip('base/abstract_sql');
            $id = $flux['args']['id_objet'];
            $docs = array_map('reset', sql_allfetsel('id_document', 'spip_documents_liens', 'id_objet=' . intval($id) . ' AND objet=' . sql_quote($type)));
            include_spip('action/editer_document');
            foreach ($docs as $id_document) {
                // mettre a jour le statut si necessaire
                document_instituer($id_document);
            }
        }
    } else {
        if ($flux['args']['table'] !== 'spip_documents') {
            // verifier les doublons !
            $marquer_doublons_doc = charger_fonction('marquer_doublons_doc', 'inc');
            $marquer_doublons_doc($flux['data'], $flux['args']['id_objet'], $flux['args']['type'], id_table_objet($flux['args']['type'], $serveur), $flux['args']['table_objet'], $flux['args']['spip_table_objet'], '', $serveur);
        }
    }
    return $flux;
}
Exemplo n.º 23
0
/**
 * Affichage des liste d'objets
 * 
 * Surcharge pour aiguiller vers la mise en squelettes des listes
 *
 * @deprecated Créer ou utiliser un squelette dans `prive/objets/liste/`
 *   pour la table en question et l'appeler avec une inclusion.
 * 
 * @param string $vue
 *     Nom de l'objet
 * @param array $contexte
 *     Contexte du squelette
 * @param bool $force
 *     Si `true` le titre est affiché même s'il n'y a aucun élément dans la liste.
 * @return string
 *     Code HTML de la liste
 */
function inc_lister_objets_dist($vue, $contexte = array(), $force = false)
{
    $res = "";
    // debug
    if (!is_array($contexte)) {
        return _L('$contexte doit etre un tableau dans inc/lister_objets');
    }
    $fond = "prive/objets/liste/{$vue}";
    if (!find_in_path($fond . "." . _EXTENSION_SQUELETTES)) {
        // traiter les cas particuliers
        include_spip('base/connect_sql');
        $vue = table_objet($vue);
        $fond = "prive/objets/liste/{$vue}";
        if (!find_in_path($fond . "." . _EXTENSION_SQUELETTES)) {
            return _L("vue {$vue} introuvable pour lister les objets");
        }
    }
    $contexte['sinon'] = $force ? $contexte['titre'] : '';
    $res = recuperer_fond($fond, $contexte, array('ajax' => true));
    if (_request('var_liste')) {
        echo var_export($contexte, true);
    }
    return $res;
}
Exemplo n.º 24
0
function base_trouver_table_dist($nom, $serveur=''){
	static $nom_cache_desc_sql=array();
	global $tables_principales, $tables_auxiliaires, $table_des_tables;
	
	if (!spip_connect($serveur)
	OR !preg_match('/^[a-zA-Z0-9._-]*/',$nom))
		return null;

	$connexion = &$GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];

	// le nom du cache depend du serveur mais aussi du nom de la db et du prefixe
	// ce qui permet une auto invalidation en cas de modif manuelle du fichier
	// de connexion, et tout risque d'ambiguite
	if (!isset($nom_cache_desc_sql[$serveur]))
		$nom_cache_desc_sql[$serveur] =
		  _DIR_CACHE . 'sql_desc_'
		  . ($serveur ? "$serveur_":"")
		  . substr(md5($connexion['db'].":".$connexion['prefixe']),0,8)
			.'.txt';

	// un appel avec $nom vide est une demande explicite de vidange du cache des descriptions
	if (!$nom){
		spip_unlink($nom_cache_desc_sql[$serveur]);
		$connexion['tables'] = array();
		return null;
	}

	$nom_sql = $nom;
	if (preg_match('/\.(.*)$/', $nom, $s))
		$nom_sql = $s[1];
	else
		$nom_sql = $nom;

	$desc = '';

	// base sous SPIP: gerer les abreviations explicites des noms de table
	if ($connexion['spip_connect_version']) {
		include_spip('public/interfaces');
		if (isset($table_des_tables[$nom])) {
			$nom = $table_des_tables[$nom];
			$nom_sql = 'spip_' . $nom;
		}
	}

	// si c'est la premiere table qu'on cherche
	// et si on est pas explicitement en recalcul
	// on essaye de recharger le cache des decriptions de ce serveur
	// dans le fichier cache
	if (!isset($connexion['tables'][$nom])
	  AND $GLOBALS['var_mode']!=='recalcul'
	  AND (!isset($connexion['tables']) OR !$connexion['tables'])) {
		if (lire_fichier($nom_cache_desc_sql[$serveur],$desc_cache)
		  AND $desc_cache=unserialize($desc_cache))
		  $connexion['tables'] = $desc_cache;
	}
	if (!isset($connexion['tables'][$nom])) {
		include_spip('base/serial');

		if (isset($tables_principales[$nom_sql]))
			$fdesc = $tables_principales[$nom_sql];
		// meme si pas d'abreviation declaree, trouver la table spip_$nom
		// si c'est une table principale,
		// puisqu'on le fait aussi pour les tables auxiliaires
		elseif ($nom_sql==$nom AND isset($tables_principales['spip_' .$nom])){
			$nom_sql = 'spip_' . $nom;
			$fdesc = &$tables_principales[$nom_sql];
		}
		else {
			include_spip('base/auxiliaires');
			if (isset($tables_auxiliaires['spip_' .$nom])) {
				$nom_sql = 'spip_' . $nom;
				$fdesc = &$tables_auxiliaires[$nom_sql];
			} else {  # table locale a cote de SPIP, comme non SPIP:
				$fdesc = array();
			}
		}

		// faut il interpreter le prefixe 'spip_' ?
		$transposer_spip = ($nom_sql != $nom);
		
		// La *vraie* base a la priorite
		if (true /*  !$bdesc OR !$bdesc['field']  */) {
			$desc = sql_showtable($nom_sql, $transposer_spip, $serveur);
			if (!$desc OR !$desc['field']) {
				if (!$fdesc) {
					spip_log("trouver_table: table inconnue '$serveur' '$nom'");
					return null;
				}
				// on ne sait pas lire la structure de la table :
				// on retombe sur la description donnee dans les fichiers spip
				$desc = $fdesc;
			}
		}
		// S'il n'y a pas de key (cas d'une VIEW),
		// on va inventer une PRIMARY KEY en prenant le premier champ
		// de la table
		if (!$desc['key']){
			$p = array_keys($desc['field']);
			$desc['key']['PRIMARY KEY'] = array_shift($p);
		}

		$desc['table']= $nom_sql;
		$desc['connexion']= $serveur;
		// objet_type peut provoquer un appel reentrant ici.
		// pour ne pas faire de boucle infinie, on stocke ce qu'on a deja trouve
		$connexion['tables'][$nom] = $desc;

		$table = table_objet(objet_type($nom));
		$desc['titre'] = isset($GLOBALS['table_titre'][$table])
		? $GLOBALS['table_titre'][$table]
		: (isset($desc['field']['titre']) ? 'titre' : '');
		$connexion['tables'][$nom] = $desc;
		// une nouvelle table a ete decrite
		// mettons donc a jour le cache des descriptions de ce serveur
		if (is_writeable(_DIR_CACHE))
			ecrire_fichier($nom_cache_desc_sql[$serveur],serialize($connexion['tables']));
	}

	$connexion['tables'][$nom]['id_table']=$nom;
	return $connexion['tables'][$nom];
}
Exemplo n.º 25
0
function inc_recherche_to_array_dist($recherche, $options = array())
{
    // options par defaut
    $options = array_merge(array('score' => true, 'champs' => false, 'toutvoir' => false, 'matches' => false, 'jointures' => false), $options);
    include_spip('inc/rechercher');
    include_spip('inc/autoriser');
    $requete = array("SELECT" => array(), "FROM" => array(), "WHERE" => array(), "GROUPBY" => array(), "ORDERBY" => array(), "LIMIT" => "", "HAVING" => array());
    $table = sinon($options['table'], 'article');
    if ($options['champs']) {
        $champs = $options['champs'];
    } else {
        $l = liste_des_champs();
        $champs = $l['article'];
    }
    $serveur = $options['serveur'];
    list($methode, $q, $preg) = expression_recherche($recherche, $options);
    $jointures = $options['jointures'] ? liste_des_jointures() : array();
    $_id_table = id_table_objet($table);
    // c'est un pis-aller : ca a peu de chance de marcher, mais mieux quand meme que en conservant la ','
    // (aka ca marche au moins dans certains cas comme avec spip_formulaires_reponses_champs)
    if (strpos($_id_table, ",") !== false) {
        $_id_table = explode(',', $_id_table);
        $_id_table = reset($_id_table);
    }
    $requete['SELECT'][] = "t." . $_id_table;
    $a = array();
    // Recherche fulltext
    foreach ($champs as $champ => $poids) {
        if (is_array($champ)) {
            spip_log("requetes imbriquees interdites");
        } else {
            if (strpos($champ, ".") === FALSE) {
                $champ = "t.{$champ}";
            }
            $requete['SELECT'][] = $champ;
            $a[] = $champ . ' ' . $methode . ' ' . $q;
        }
    }
    if ($a) {
        $requete['WHERE'][] = join(" OR ", $a);
    }
    $requete['FROM'][] = table_objet_sql($table) . ' AS t';
    $results = array();
    $s = sql_select($requete['SELECT'], $requete['FROM'], $requete['WHERE'], implode(" ", $requete['GROUPBY']), $requete['ORDERBY'], $requete['LIMIT'], $requete['HAVING'], $serveur);
    while ($t = sql_fetch($s, $serveur) and (!isset($t['score']) or $t['score'] > 0)) {
        $id = intval($t[$_id_table]);
        if ($options['toutvoir'] or autoriser('voir', $table, $id)) {
            // indiquer les champs concernes
            $champs_vus = array();
            $score = 0;
            $matches = array();
            $vu = false;
            foreach ($champs as $champ => $poids) {
                $champ = explode('.', $champ);
                $champ = end($champ);
                // translitteration_rapide uniquement si on est deja en utf-8
                $value = $GLOBALS['meta']['charset'] == 'utf-8' ? translitteration_rapide($t[$champ]) : translitteration($t[$champ]);
                if ($n = $options['score'] || $options['matches'] ? preg_match_all($preg, $value, $regs, PREG_SET_ORDER) : preg_match($preg, $value)) {
                    $vu = true;
                    if ($options['champs']) {
                        $champs_vus[$champ] = $t[$champ];
                    }
                    if ($options['score']) {
                        $score += $n * $poids;
                    }
                    if ($options['matches']) {
                        $matches[$champ] = $regs;
                    }
                    if (!$options['champs'] and !$options['score'] and !$options['matches']) {
                        break;
                    }
                }
            }
            if ($vu) {
                if (!isset($results)) {
                    $results = array();
                }
                $results[$id] = array();
                if ($champs_vus) {
                    $results[$id]['champs'] = $champs_vus;
                }
                if ($score) {
                    $results[$id]['score'] = $score;
                }
                if ($matches) {
                    $results[$id]['matches'] = $matches;
                }
            }
        }
    }
    // Gerer les donnees associees
    // ici on est un peu naze : pas capables de reconstruire une jointure complexe
    // on ne sait passer que par table de laison en 1 coup
    if (isset($jointures[$table]) and $joints = recherche_en_base($recherche, $jointures[$table], array_merge($options, array('jointures' => false)))) {
        include_spip('action/editer_liens');
        $trouver_table = charger_fonction('trouver_table', 'base');
        $cle_depart = id_table_objet($table);
        $table_depart = table_objet($table, $serveur);
        $desc_depart = $trouver_table($table_depart, $serveur);
        $depart_associable = objet_associable($table);
        foreach ($joints as $table_liee => $ids_trouves) {
            // on peut definir une fonction de recherche jointe pour regler les cas particuliers
            if (!($rechercher_joints = charger_fonction("rechercher_joints_{$table}_{$table_liee}", "inc", true) or $rechercher_joints = charger_fonction("rechercher_joints_objet_{$table_liee}", "inc", true) or $rechercher_joints = charger_fonction("rechercher_joints_{$table}_objet_lie", "inc", true))) {
                $cle_arrivee = id_table_objet($table_liee);
                $table_arrivee = table_objet($table_liee, $serveur);
                $desc_arrivee = $trouver_table($table_arrivee, $serveur);
                // cas simple : $cle_depart dans la table_liee
                if (isset($desc_arrivee['field'][$cle_depart])) {
                    $s = sql_select("{$cle_depart}, {$cle_arrivee}", $desc_arrivee['table_sql'], sql_in($cle_arrivee, array_keys($ids_trouves)), '', '', '', '', $serveur);
                } elseif (isset($desc_depart['field'][$cle_arrivee])) {
                    $s = sql_select("{$cle_depart}, {$cle_arrivee}", $desc_depart['table_sql'], sql_in($cle_arrivee, array_keys($ids_trouves)), '', '', '', '', $serveur);
                } elseif ($l = objet_associable($table_liee)) {
                    list($primary, $table_liens) = $l;
                    $s = sql_select("id_objet as {$cle_depart}, {$primary} as {$cle_arrivee}", $table_liens, array("objet='{$table}'", sql_in($primary, array_keys($ids_trouves))), '', '', '', '', $serveur);
                } elseif ($l = $depart_associable) {
                    list($primary, $table_liens) = $l;
                    $s = sql_select("{$primary} as {$cle_depart}, id_objet as {$cle_arrivee}", $table_liens, array("objet='{$table_liee}'", sql_in('id_objet', array_keys($ids_trouves))), '', '', '', '', $serveur);
                } elseif ($t = $trouver_table($table_arrivee . "_" . $table_depart, $serveur) or $t = $trouver_table($table_depart . "_" . $table_arrivee, $serveur)) {
                    $s = sql_select("{$cle_depart},{$cle_arrivee}", $t["table_sql"], sql_in($cle_arrivee, array_keys($ids_trouves)), '', '', '', '', $serveur);
                }
            } else {
                list($cle_depart, $cle_arrivee, $s) = $rechercher_joints($table, $table_liee, array_keys($ids_trouves), $serveur);
            }
            while ($t = is_array($s) ? array_shift($s) : sql_fetch($s)) {
                $id = $t[$cle_depart];
                $joint = $ids_trouves[$t[$cle_arrivee]];
                if (!isset($results)) {
                    $results = array();
                }
                if (!isset($results[$id])) {
                    $results[$id] = array();
                }
                if (isset($joint['score']) and $joint['score']) {
                    if (!isset($results[$id]['score'])) {
                        $results[$id]['score'] = 0;
                    }
                    $results[$id]['score'] += $joint['score'];
                }
                if (isset($joint['champs']) and $joint['champs']) {
                    foreach ($joint['champs'] as $c => $val) {
                        $results[$id]['champs'][$table_liee . '.' . $c] = $val;
                    }
                }
                if (isset($joint['matches']) and $joint['matches']) {
                    foreach ($joint['matches'] as $c => $val) {
                        $results[$id]['matches'][$table_liee . '.' . $c] = $val;
                    }
                }
            }
        }
    }
    return $results;
}
Exemplo n.º 26
0
function cextras_pre_edition($flux){

	// recuperer les champs crees par les plugins
	if ($extras = cextras_get_extras_match($flux['args']['table'])) {
		// recherchons un eventuel prefixe utilise pour poster les champs
		$type = objet_type(table_objet($flux['args']['table']));
		$prefixe = _request('prefixe_champs_extras_' . $type);
		if (!$prefixe) {
			$prefixe = '';
		}
		foreach ($extras as $c) {
			if (_request('cextra_' . $prefixe . $c->champ)) {
				$extra = _request($prefixe . $c->champ);
				if (is_array($extra))
					$extra = join(',',$extra);
				$flux['data'][$c->champ] = corriger_caracteres($extra);
			}
		}
	}

	return $flux;
}
Exemplo n.º 27
0
/**
 * Charger l'env du squelette de #FORMULAIRE_FORUM
 * @param string $objet
 * @param int $id_objet
 * @param int $id_forum
 * @param int|array $ajouter_mot
 *   mots ajoutés cochés par defaut
 * @param $ajouter_groupe
 *   groupes ajoutables
 * @param $afficher_previsu
 *   previsu oui ou non
 * @param $retour
 *   url de retour
 * @return array|bool
 */
function formulaires_forum_charger_dist($objet, $id_objet, $id_forum, $ajouter_mot, $ajouter_groupe, $afficher_previsu, $retour)
{
    if (!function_exists($f = 'forum_recuperer_titre')) {
        $f = 'forum_recuperer_titre_dist';
    }
    if (!($titre = $f($objet, $id_objet, $id_forum))) {
        return false;
    }
    // ca s'apparenterait presque a une autorisation...
    // si on n'avait pas a envoyer la valeur $accepter_forum au formulaire
    $accepter_forum = controler_forum($objet, $id_objet);
    if ($accepter_forum == 'non') {
        return false;
    }
    $primary = id_table_objet($objet);
    // table a laquelle sont associes les mots :
    if ($GLOBALS['meta']["mots_cles_forums"] != "oui") {
        $table = '';
    } else {
        $table = table_objet($objet);
    }
    // exiger l'authentification des posteurs pour les forums sur abo
    if ($accepter_forum == "abo") {
        if (!isset($GLOBALS["visiteur_session"]['statut']) or !$GLOBALS["visiteur_session"]['statut']) {
            return array('action' => '', 'editable' => false, 'login_forum_abo' => ' ', 'inscription' => generer_url_public('identifiants', 'lang=' . $GLOBALS['spip_lang']), 'oubli' => generer_url_public('spip_pass', 'lang=' . $GLOBALS['spip_lang'], true));
        }
    }
    // Tableau des valeurs servant au calcul d'une signature de securite.
    // Elles seront placees en Input Hidden pour que inc/forum_insert
    // recalcule la meme chose et verifie l'identite des resultats.
    // Donc ne pas changer la valeur de ce tableau entre le calcul de
    // la signature et la fabrication des Hidden
    // Faire attention aussi a 0 != ''
    $ids = array();
    $ids[$primary] = ($x = intval($id_objet)) ? $x : '';
    $ids['id_objet'] = ($x = intval($id_objet)) ? $x : '';
    $ids['objet'] = $objet;
    $ids['id_forum'] = ($x = intval($id_forum)) ? $x : '';
    // ne pas mettre '', sinon le squelette n'affichera rien.
    $previsu = ' ';
    if (_request('formulaire_action')) {
        $arg = forum_fichier_tmp(join('', $ids));
        $securiser_action = charger_fonction('securiser_action', 'inc');
        // on sait que cette fonction est dans le fichier associe
        $hash = calculer_action_auteur("ajout_forum-{$arg}");
    } else {
        $arg = $hash = '';
    }
    // pour les hidden
    $script_hidden = "";
    foreach ($ids as $id => $v) {
        $script_hidden .= "<input type='hidden' name='{$id}' value='{$v}' />";
    }
    $script_hidden .= "<input type='hidden' name='arg' value='{$arg}' />";
    $script_hidden .= "<input type='hidden' name='hash' value='{$hash}' />";
    $script_hidden .= "<input type='hidden' name='verif_{$hash}' value='ok' />";
    if ($formats = forum_documents_acceptes()) {
        include_spip('inc/securiser_action');
        $cle = calculer_cle_action('ajouter-document-' . $objet . '-' . $id_objet);
    } else {
        $cle = null;
    }
    // Valeurs par defaut du formulaire
    // si le formulaire a ete sauvegarde, restituer les valeurs de session
    $vals = array('titre' => $titre, 'texte' => '', 'nom_site' => '', 'url_site' => 'http://');
    return array_merge($vals, array('modere' => $accepter_forum != 'pri' ? '' : ' ', 'table' => $table, 'config' => array('afficher_barre' => $GLOBALS['meta']['forums_afficher_barre'] != 'non' ? ' ' : ''), '_hidden' => $script_hidden, 'cle_ajouter_document' => $cle, 'formats_documents_forum' => forum_documents_acceptes(), 'ajouter_document' => isset($_FILES['ajouter_document']['name']) ? $_FILES['ajouter_document']['name'] : '', 'nobot' => $cle ? _request($cle) : _request('nobot'), 'ajouter_groupe' => $ajouter_groupe, 'ajouter_mot' => is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot), 'id_forum' => $id_forum, '_sign' => implode('_', $ids), '_autosave_id' => $ids));
}
Exemplo n.º 28
0
/**
 * Autorisation de changer la date d'un contenu
 *
 * @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_dater_dist($faire, $type, $id, $qui, $opt)
{
    if (!isset($opt['statut'])) {
        $table = table_objet($type);
        $trouver_table = charger_fonction('trouver_table', 'base');
        $desc = $trouver_table($table);
        if (!$desc) {
            return false;
        }
        if (isset($desc['field']['statut'])) {
            $statut = sql_getfetsel("statut", $desc['table'], id_table_objet($type) . "=" . intval($id));
        } else {
            $statut = 'publie';
        }
        // pas de statut => publie
    } else {
        $statut = $opt['statut'];
    }
    if ($statut == 'publie' or $statut == 'prop' and $type == 'article' and $GLOBALS['meta']["post_dates"] == "non") {
        return autoriser('modifier', $type, $id);
    }
    return false;
}
Exemplo n.º 29
0
/**
 * Determininer si un objet est publie ou non
 * 
 * On se base pour cela sur sa declaration de statut
 * pour des cas particuliers non declarables, on permet de fournir une fonction
 * base_xxxx_test_si_publie qui sera appele par la fonction
 *
 * @param string $objet
 * @param int $id_objet
 * @param string $serveur
 * @return bool
 */
function objet_test_si_publie($objet, $id_objet, $serveur = '')
{
    // voir si une fonction est definie pour faire le boulot
    // elle a la priorite dans ce cas
    if ($f = charger_fonction($objet . "_test_si_publie", "base", true)) {
        return $f($objet, $id_objet, $serveur);
    }
    // sinon on se fie a la declaration de l'objet si presente
    $id_table = $table_objet = table_objet($objet);
    $id_table_objet = id_table_objet($objet, $serveur);
    $trouver_table = charger_fonction('trouver_table', 'base');
    if ($desc = $trouver_table($table_objet, $serveur) and isset($desc['statut']) and $desc['statut']) {
        $boucle = new Boucle();
        $boucle->show = $desc;
        $boucle->nom = 'objet_test_si_publie';
        $boucle->id_boucle = $id_table;
        $boucle->id_table = $id_table;
        $boucle->sql_serveur = $serveur;
        $boucle->select[] = $id_table_objet;
        $boucle->from[$table_objet] = table_objet_sql($objet, $serveur);
        $boucle->where[] = $id_table . "." . $id_table_objet . '=' . intval($id_objet);
        include_spip('public/compiler');
        include_spip('public/composer');
        instituer_boucle($boucle, false);
        $res = calculer_select($boucle->select, $boucle->from, $boucle->from_type, $boucle->where, $boucle->join, $boucle->group, $boucle->order, $boucle->limit, $boucle->having, $table_objet, $id_table, $serveur);
        if (sql_fetch($res)) {
            return true;
        }
        return false;
    }
    // si pas d'info statut ni de fonction : l'objet est publie
    return true;
}
Exemplo n.º 30
0
function get_table_id($table)
{
    static $catab = array('tables_principales' => 'base/serial', 'tables_auxiliaires' => 'base/auxiliaires');
    $try = array($table, 'spip_' . $table);
    foreach ($catab as $categ => $catinc) {
        include_spip($catinc);
        foreach ($try as $nom) {
            if (isset($GLOBALS[$categ][$nom])) {
                return array($nom, preg_split('/\\s*,\\s*/', $GLOBALS[$categ][$nom]['key']['PRIMARY KEY']));
            }
        }
    }
    if ($try = table_objet($table)) {
        return array('spip_' . $try, array(id_table_objet($table)));
    }
    return array(false, false);
}