Beispiel #1
0
function action_joindre_sous_action($id, $id_document, $mode, $type, &$documents_actifs)
{
	$hash = _request('hash');
	$url = _request('url');
	$chemin = _request('chemin');
	$ancre = _request('ancre');
	$sousaction1 = _request('sousaction1');
	$sousaction2 = _request('sousaction2');
	$sousaction3 = _request('sousaction3');
	$sousaction4 = _request('sousaction4');
	$sousaction5 = _request('sousaction5'); // decompacter un zip
	$redirect = _request('redirect');
	$iframe_redirect = _request('iframe_redirect');

// pas terrible, mais c'est le pb du bouton Submit qui retourne son texte,
// et son transcodage est couteux et perilleux
	$sousaction = 
       ($sousaction1 ? 1 :
	($sousaction2 ? 2 :
	 ($sousaction3 ? 3 : 
	  ($sousaction4 ? 4 :
	   $sousaction5 ))));

	$path = ($sousaction1 ? ($_FILES ? $_FILES : $GLOBALS['HTTP_POST_FILES']) :
		($sousaction2 ? $url : $chemin));

	$sousaction = charger_fonction('joindre' . $sousaction, 'inc');
	$type_image = $sousaction($path, $mode, $type, $id, $id_document, 
		 $hash, $redirect, $documents_actifs, $iframe_redirect);

	$redirect = urldecode($redirect);
	if ($documents_actifs) {
		$redirect = parametre_url($redirect,'show_docs',join(',',$documents_actifs),'&');
	}

	if (!$ancre) {
		if ($mode=='image')
			$ancre = 'images';
		else if ($type_image)
			$ancre = 'portfolio';
		else
			$ancre = 'documents';
	}

	$redirect .= '#' . $ancre;
	if ($type == 'rubrique') {
		include_spip('inc/rubriques');
		calculer_rubriques_if($id, array('statut' => 'publie'));
	}

	if(_request("iframe") == 'iframe') {
		$redirect = parametre_url(urldecode($iframe_redirect),"show_docs",join(',',$documents_actifs),'&')."&iframe=iframe";
	}
	return $redirect;
}
Beispiel #2
0
function action_instituer_site_dist() {

	$securiser_action = charger_fonction('securiser_action', 'inc');
	$arg = $securiser_action();

	list($id_syndic, $statut) = preg_split('/\W/', $arg);

	$cond = "id_syndic=" . intval($id_syndic);
	$row = sql_fetsel("statut, id_rubrique", "spip_syndic", $cond);
	if (!$row OR ($row['statut'] == $statut)) return;

	sql_updateq("spip_syndic", array("statut" => $statut), $cond);
	include_spip('inc/rubriques');
	calculer_rubriques_if($row['id_rubrique'], array('statut' => $statut), $row['statut']);


}
Beispiel #3
0
function reorganiser_rubrique_rubrique($id_quoi, $id_cible)
{
    if ($id_quoi != $id_cible and autoriser('modifier', 'rubrique', $id_cible) and autoriser('modifier', 'rubrique', $id_quoi)) {
        if (!$id_cible) {
            $id_secteur = $id_quoi;
        } else {
            $id_secteur = sql_getfetsel("id_secteur", "spip_rubriques", "id_rubrique={$id_cible}");
        }
        $s = sql_fetsel("statut, id_parent, id_secteur", "spip_rubriques", "id_rubrique=" . intval($id_quoi));
        sql_updateq('spip_rubriques', array('id_parent' => $id_cible, 'id_secteur' => $id_secteur), "id_rubrique=" . intval($id_quoi));
        include_spip('inc/rubriques');
        // propager les secteurs si besoin
        if ($s['id_secteur'] != $id_secteur) {
            propager_les_secteurs();
        }
        // changer le statut de la rubrique source
        if ($s['statut'] == 'publie') {
            calculer_rubriques_if($s['id_parent'], array('id_rubrique' => $id_cible), 'publie');
        }
    }
}
Beispiel #4
0
function revisions_breves ($id_breve, $c=false) {

	// champs normaux
	if ($c === false) {
		$c = array();
		foreach (array(
			'titre', 'texte', 'lien_titre', 'lien_url',
			'id_parent', 'statut'
		) as $champ)
			if (($a = _request($champ)) !== null)
				$c[$champ] = $a;
	}

	// Si la breve est publiee, invalider les caches et demander sa reindexation
	$t = sql_getfetsel("statut", "spip_breves", "id_breve=$id_breve");
	if ($t == 'publie') {
		$invalideur = "id='id_breve/$id_breve'";
		$indexation = true;
	}

	include_spip('inc/modifier');
	modifier_contenu('breve', $id_breve,
		array(
			'nonvide' => array('titre' => _T('info_sans_titre')),
			'invalideur' => $invalideur,
			'indexation' => $indexation
		),
		$c);


	// Changer le statut de la breve ?
	$row = sql_fetsel("statut, id_rubrique,lang, langue_choisie", "spip_breves", "id_breve=$id_breve");

	$id_rubrique = $row['id_rubrique'];
	$statut_ancien = $statut = $row['statut'];
	$langue_old = $row['lang'];
	$langue_choisie_old = $row['langue_choisie'];

	if (_request('statut', $c)
	AND _request('statut', $c) != $statut
	AND autoriser('publierdans', 'rubrique', $id_rubrique)) {
		$statut = $champs['statut'] = _request('statut', $c);
	}

	// Changer de rubrique ?
	// Verifier que la rubrique demandee est a la racine et differente
	// de la rubrique actuelle
	if ($id_parent = intval(_request('id_parent', $c))
	AND $id_parent != $id_rubrique
	AND (NULL !== ($lang=sql_getfetsel('lang', 'spip_rubriques', "id_parent=0 AND id_rubrique=$id_parent")))) {
		$champs['id_rubrique'] = $id_parent;
		// - changer sa langue (si heritee)
		if ($langue_choisie_old != "oui") {
			if ($lang != $langue_old)
				$champs['lang'] = $lang;
		}
		// si la breve est publiee
		// et que le demandeur n'est pas admin de la rubrique
		// repasser la breve en statut 'prop'.
		if ($statut == 'publie') {
			if (!autoriser('publierdans','rubrique',$id_parent))
				$champs['statut'] = $statut = 'prop';
		}
	}

	if (!$champs) return;

	sql_updateq('spip_breves', $champs, "id_breve=$id_breve");

	//
	// Post-modifications
	//

	// Invalider les caches
	include_spip('inc/invalideur');
	suivre_invalideur("id='id_breve/$id_breve'");

	// Au besoin, changer le statut des rubriques concernees 
	include_spip('inc/rubriques');
	calculer_rubriques_if($id_rubrique, $champs, $statut_ancien);

	// Notifications
	if ($notifications = charger_fonction('notifications', 'inc')) {
		$notifications('instituerbreve', $id_breve,
			array('statut' => $statut, 'statut_ancien' => $statut_ancien)
		);
	}

}
/**
 * Instituer une rubrique (changer son parent)
 *
 * Change le parent d'une rubrique, si les autorisations sont correctes,
 * mais n'accèpte pas de déplacer une rubrique dans une de ses filles, tout de même !
 *
 * Recalcule les secteurs, les langues et déplace les brèves au passage.
 *
 * @param int $id_rubrique
 *     Identifiant de la rubrique à instituer
 * @param array $c
 *     Informations pour l'institution (id_rubrique, confirme_deplace)
 * @global array $GLOBALS ['visiteur_session']
 * @return string
 *     Chaîne vide : aucune erreur
 *     Chaîne : Texte du message d'erreur
 */
function rubrique_instituer($id_rubrique, $c)
{
    // traitement de la rubrique parente
    // interdiction de deplacer vers ou a partir d'une rubrique
    // qu'on n'administre pas.
    if (null !== ($id_parent = $c['id_parent'])) {
        $id_parent = intval($id_parent);
        $filles = calcul_branche_in($id_rubrique);
        if (strpos(",{$id_parent},", ",{$filles},") !== false) {
            spip_log("La rubrique {$id_rubrique} ne peut etre fille de sa descendante {$id_parent}");
        } else {
            $s = sql_fetsel("id_parent, statut", "spip_rubriques", "id_rubrique={$id_rubrique}");
            $old_parent = $s['id_parent'];
            if (!($id_parent != $old_parent and autoriser('publierdans', 'rubrique', $id_parent) and autoriser('creerrubriquedans', 'rubrique', $id_parent) and autoriser('publierdans', 'rubrique', $old_parent))) {
                if ($s['statut'] != 'new') {
                    spip_log("deplacement de {$id_rubrique} vers {$id_parent} refuse a " . $GLOBALS['visiteur_session']['id_auteur'] . ' ' . $GLOBALS['visiteur_session']['statut']);
                }
            } elseif (editer_rubrique_breves($id_rubrique, $id_parent, $c)) {
                $statut_ancien = $s['statut'];
                sql_updateq('spip_rubriques', array('id_parent' => $id_parent), "id_rubrique={$id_rubrique}");
                propager_les_secteurs();
                // Deplacement d'une rubrique publiee ==> chgt general de leur statut
                if ($statut_ancien == 'publie') {
                    calculer_rubriques_if($old_parent, array('id_rubrique' => $id_parent), $statut_ancien);
                } elseif (!$statut_ancien || $old_parent != $id_parent) {
                    effacer_meta("date_calcul_rubriques");
                }
                calculer_langues_rubriques();
            }
        }
    }
    return '';
    // pas d'erreur
}
Beispiel #6
0
/**
 * fabrique la requete d'institution de l'objet, avec champs herites
 *
 * @param string $objet
 * @param int $id
 * @param int $id_rubrique
 * @param string $statut
 * @param array $champs
 * @param bool $cond
 * @return 
 */
function objet_editer_heritage($objet, $id, $id_rubrique, $statut, $champs, $cond = true)
{
    $table_sql = table_objet_sql($objet);
    $trouver_table = charger_fonction('trouver_table', 'base');
    $desc = $trouver_table($table_sql);
    // Si on deplace l'objet
    // changer aussi son secteur et sa langue (si heritee)
    if (isset($champs['id_rubrique'])) {
        $row_rub = sql_fetsel("id_secteur, lang", "spip_rubriques", "id_rubrique=" . sql_quote($champs['id_rubrique']));
        $langue = $row_rub['lang'];
        if (isset($desc['field']['id_secteur'])) {
            $champs['id_secteur'] = $row_rub['id_secteur'];
        }
        if (isset($desc['field']['lang']) and isset($desc['field']['langue_choisie'])) {
            if (sql_fetsel('1', $table_sql, id_table_objet($objet) . "=" . intval($id) . " AND langue_choisie<>'oui' AND lang<>" . sql_quote($langue))) {
                $champs['lang'] = $langue;
            }
        }
    }
    if (!$champs) {
        return;
    }
    sql_updateq($table_sql, $champs, id_table_objet($objet) . '=' . intval($id));
    // Changer le statut des rubriques concernees
    if ($cond) {
        include_spip('inc/rubriques');
        //$postdate = ($GLOBALS['meta']["post_dates"] == "non" AND isset($champs['date']) AND (strtotime($champs['date']) < time()))?$champs['date']:false;
        $postdate = false;
        calculer_rubriques_if($id_rubrique, $champs, $statut, $postdate);
    }
}
Beispiel #7
0
/**
 * Instituer une breve : modifier son statut ou son parent
 *
 * @param int $id_breve
 * @param array $c
 * @return string
 */
function breve_instituer($id_breve, $c)
{
    $champs = array();
    // Changer le statut de la breve ?
    $row = sql_fetsel("statut, id_rubrique,lang, langue_choisie", "spip_breves", "id_breve=" . intval($id_breve));
    $id_rubrique = $row['id_rubrique'];
    $statut_ancien = $statut = $row['statut'];
    $langue_old = $row['lang'];
    $langue_choisie_old = $row['langue_choisie'];
    if ($c['statut'] and $c['statut'] != $statut and autoriser('publierdans', 'rubrique', $id_rubrique)) {
        $statut = $champs['statut'] = $c['statut'];
    }
    // Changer de rubrique ?
    // Verifier que la rubrique demandee est a la racine et differente
    // de la rubrique actuelle
    if ($id_parent = intval($c['id_parent']) and $id_parent != $id_rubrique and NULL !== ($lang = sql_getfetsel('lang', 'spip_rubriques', "id_parent=0 AND id_rubrique=" . intval($id_parent)))) {
        $champs['id_rubrique'] = $id_parent;
        // - changer sa langue (si heritee)
        if ($langue_choisie_old != "oui") {
            if ($lang != $langue_old) {
                $champs['lang'] = $lang;
            }
        }
        // si la breve est publiee
        // et que le demandeur n'est pas admin de la rubrique
        // repasser la breve en statut 'prop'.
        if ($statut == 'publie') {
            if (!autoriser('publierdans', 'rubrique', $id_parent)) {
                $champs['statut'] = $statut = 'prop';
            }
        }
    }
    // Envoyer aux plugins
    $champs = pipeline('pre_edition', array('args' => array('table' => 'spip_breves', 'id_objet' => $id_breve, 'action' => 'instituer', 'statut_ancien' => $statut_ancien), 'data' => $champs));
    if (!$champs) {
        return;
    }
    sql_updateq('spip_breves', $champs, "id_breve=" . intval($id_breve));
    //
    // Post-modifications
    //
    // Invalider les caches
    include_spip('inc/invalideur');
    suivre_invalideur("id='breve/{$id_breve}'");
    // Au besoin, changer le statut des rubriques concernees
    include_spip('inc/rubriques');
    calculer_rubriques_if($id_rubrique, $champs, $statut_ancien);
    // Pipeline
    pipeline('post_edition', array('args' => array('table' => 'spip_breves', 'id_objet' => $id_breve, 'action' => 'instituer', 'statut_ancien' => $statut_ancien), 'data' => $champs));
    // Notifications
    if ($notifications = charger_fonction('notifications', 'inc')) {
        $notifications('instituerbreve', $id_breve, array('statut' => $statut, 'statut_ancien' => $statut_ancien));
    }
    return '';
    // pas d'erreur
}
Beispiel #8
0
function instituer_rubrique($id_rubrique, $c) {
	// traitement de la rubrique parente
	// interdiction de deplacer vers ou a partir d'une rubrique
	// qu'on n'administre pas.

	$statut_ancien = $parent = '';
	if (NULL !== ($id_parent = $c['id_parent'])) {
		$id_parent = intval($id_parent);
		$filles = calcul_branche($id_rubrique);
		if (strpos(",$id_parent,", ",$filles,") !== false)
			spip_log("La rubrique $id_rubrique ne peut etre fille de sa descendante $id_parent");
		else {
			$s = sql_fetsel("id_parent, statut", "spip_rubriques", "id_rubrique=$id_rubrique");
			$old_parent = $s['id_parent'];

			if (!($id_parent != $old_parent
			AND autoriser('publierdans', 'rubrique', $id_parent)
			AND autoriser('creerrubriquedans', 'rubrique', $id_parent)
			AND autoriser('publierdans', 'rubrique', $old_parent)
			      )) {
				if ($s['statut'] != 'new') {
					spip_log("deplacement de $id_rubrique vers $id_parent refuse a " . $GLOBALS['visiteur_session']['id_auteur'] . ' '.  $GLOBALS['visiteur_session']['statut']);
				}
			} elseif (editer_rubrique_breves($id_rubrique, $id_parent, $c)) {
				$statut_ancien = $s['statut'];
				sql_updateq('spip_rubriques', array('id_parent' => $id_parent), "id_rubrique=$id_rubrique");


				propager_les_secteurs();

				// Deplacement d'une rubrique publiee ==> chgt general de leur statut
				if ($statut_ancien == 'publie')
					calculer_rubriques_if($old_parent, array('id_rubrique' => $id_parent), $statut_ancien);
				// Creation ou deplacement d'une rubrique non publiee
				// invalider le cache de leur menu
				elseif (!$statut_ancien || $old_parent!=$id_parent)
					effacer_meta("date_calcul_rubriques");

				calculer_langues_rubriques();

				return true;
			}
		}
	}
}
Beispiel #9
0
/**
 * Fabrique la requête de modification de l'article, avec champs hérités
 *
 * @global array $GLOBALS['meta']
 * 
 * @param int $id_article
 *     Identifiant de l'article
 * @param int $id_rubrique
 *     Identifiant de la rubrique parente
 * @param string $statut
 *     Statut de l'article (prop, publie, ...)
 * @param array $champs
 *     Couples (colonne => valeur) des champs qui ont été modifiés
 * @param bool $cond 
 *     True pour actualiser le statut et date de publication de la rubrique
 *     parente si nécessaire
 * @return void|null
 *     null si aucune action à faire
 *     void sinon
 */
function editer_article_heritage($id_article, $id_rubrique, $statut, $champs, $cond = true)
{
    // Si on deplace l'article
    //  changer aussi son secteur et sa langue (si heritee)
    if (isset($champs['id_rubrique'])) {
        $row_rub = sql_fetsel("id_secteur, lang", "spip_rubriques", "id_rubrique=" . sql_quote($champs['id_rubrique']));
        $langue = $row_rub['lang'];
        $champs['id_secteur'] = $row_rub['id_secteur'];
        if (sql_fetsel('1', 'spip_articles', "id_article={$id_article} AND langue_choisie<>'oui' AND lang<>" . sql_quote($langue))) {
            $champs['lang'] = $langue;
        }
    }
    if (!$champs) {
        return;
    }
    sql_updateq('spip_articles', $champs, "id_article={$id_article}");
    // Changer le statut des rubriques concernees
    if ($cond) {
        include_spip('inc/rubriques');
        $postdate = ($GLOBALS['meta']["post_dates"] == "non" and isset($champs['date']) and strtotime($champs['date']) < time()) ? $champs['date'] : false;
        calculer_rubriques_if($id_rubrique, $champs, $statut, $postdate);
    }
}
Beispiel #10
0
function revisions_sites ($id_syndic, $c=false) {

	include_spip('inc/rubriques');
	include_spip('inc/autoriser');

	// champs normaux
	if ($c === false) {
		$c = array();
		foreach (array(
			'nom_site', 'url_site', 'descriptif', 'url_syndic', 'syndication', 'statut', 'id_parent'
		) as $champ)
			if (($a = _request($champ)) !== null)
				$c[$champ] = $a;
	}

	// Si le site est publie, invalider les caches et demander sa reindexation
	$t = sql_getfetsel("statut", "spip_syndic", "id_syndic=$id_syndic");
	if ($t == 'publie') {
		$invalideur = "id='id_syndic/$id_syndic'";
		$indexation = true;
	}
	include_spip('inc/modifier');

	modifier_contenu('syndic', $id_syndic,
		array(
			'nonvide' => array('nom_site' => _T('info_sans_titre')),
			'invalideur' => $invalideur,
			'indexation' => $indexation
		),
		$c);


	$row = sql_fetsel("statut, id_rubrique, id_secteur", "spip_syndic", "id_syndic=$id_syndic");
	$id_rubrique = $row['id_rubrique'];
	$statut_ancien = $row['statut'];
	$id_secteur_old = $row['id_secteur'];

	$statut = $c['statut'];

	if ($statut
	AND $statut != $statut_ancien
	AND autoriser('publierdans','rubrique',$id_rubrique)) {
		$champs['statut'] = $statut;
		if ($statut == 'publie') {
			if ($d = _request('date', $c)) {
				$champs['date'] = $d;
			} else {
				$champs['date'] = date('Y-m-d H:i:s');
			}
		}
	} else
		$statut = $statut_ancien;

	// Changer de rubrique ?
	// Verifier que la rubrique demandee est differente de l'actuelle,
	// et qu'elle existe. Recuperer son secteur

	if ($id_parent = intval(_request('id_parent', $c))
	AND $id_parent != $id_rubrique
	AND ($id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', "id_rubrique=$id_parent"))) {
		$champs['id_rubrique'] = $id_parent;
		if ($id_secteur_old != $id_secteur)
			$champs['id_secteur'] = $id_secteur;
		// si le site est publie
		// et que le demandeur n'est pas admin de la rubrique
		// repasser le site en statut 'prop'.
		if ($statut == 'publie') {
			if (!autoriser('publierdans','rubrique',$id_parent))
				$champs['statut'] = $statut = 'prop';
		}
	}

	if (!$champs) return;

	// Enregistrer les modifications
	sql_updateq('spip_syndic', $champs, "id_syndic=$id_syndic");

	// Invalider les caches
	if ($statut == 'publie') {
		include_spip('inc/invalideur');
		suivre_invalideur("id='id_syndic/$id_syndic'");
	}

	// Notifications
	if ($notifications = charger_fonction('notifications', 'inc')) {
		$notifications('instituersite', $id_syndic,
			array('statut' => $statut, 'statut_ancien' => $statut_ancien, 'date'=>($champs['date']?$champs['date']:$row['date']))
		);
	}

	include_spip('inc/rubriques');
	calculer_rubriques_if($id_rubrique, $champs, $statut_ancien);
}
Beispiel #11
0
/**
 * determiner le statut d'un document : prepa/publie
 * si on trouve un element joint sans champ statut ou avec un statut='publie' alors le doc est publie aussi
 *
 * @param int $id_document
 * @param array $champs
 * @return bool
 */
function document_instituer($id_document, $champs = array())
{
    $statut = isset($champs['statut']) ? $champs['statut'] : null;
    $date_publication = isset($champs['date_publication']) ? $champs['date_publication'] : null;
    if (isset($champs['parents'])) {
        medias_revision_document_parents($id_document, $champs['parents']);
    }
    if (isset($champs['ajout_parents'])) {
        medias_revision_document_parents($id_document, $champs['ajout_parents'], true);
    }
    $row = sql_fetsel("statut,date_publication", "spip_documents", "id_document={$id_document}");
    $statut_ancien = $row['statut'];
    $date_publication_ancienne = $row['date_publication'];
    /* Autodetermination du statut si non fourni */
    if (is_null($statut)) {
        $statut = 'prepa';
        $trouver_table = charger_fonction('trouver_table', 'base');
        $res = sql_select('id_objet,objet', 'spip_documents_liens', "objet!='document' AND id_document=" . intval($id_document));
        // dans 10 ans, ca nous fera un bug a corriger vers 2018
        // penser a ouvrir un ticket d'ici la :p
        $date_publication = time() + 10 * 365 * 24 * 3600;
        include_spip('base/objets');
        while ($row = sql_fetch($res)) {
            if ($row['objet'] == 'rubrique' or objet_test_si_publie($row['objet'], $row['id_objet'])) {
                $statut = 'publie';
                $date_publication = 0;
                continue;
            } elseif ($row['objet'] == 'article' and $row2 = sql_fetsel('date', 'spip_articles', 'id_article=' . intval($row['id_objet']) . " AND statut='publie'")) {
                $statut = 'publie';
                $date_publication = min($date_publication, strtotime($row2['date']));
            }
        }
        $date_publication = date('Y-m-d H:i:s', $date_publication);
        if ($statut == 'publie' and $statut_ancien == 'publie' and $date_publication == $date_publication_ancienne) {
            return false;
        }
        if ($statut != 'publie' and $statut_ancien != 'publie' and $statut_ancien != '0') {
            return false;
        }
    }
    if ($statut !== $statut_ancien or $date_publication != $date_publication_ancienne) {
        sql_updateq('spip_documents', array('statut' => $statut, 'date_publication' => $date_publication), 'id_document=' . intval($id_document));
        if ($statut !== $statut_ancien) {
            $publier_rubriques = sql_allfetsel('id_objet', 'spip_documents_liens', "objet='rubrique' AND id_document=" . intval($id_document));
            if (count($publier_rubriques)) {
                include_spip('inc/rubriques');
                foreach ($publier_rubriques as $r) {
                    calculer_rubriques_if($r['id_objet'], array('statut' => $statut), $statut_ancien, false);
                }
            }
        }
        return true;
    }
    return false;
}