aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/phpbb/template/twig/extension.php
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/phpbb/template/twig/extension.php')
-rw-r--r--phpBB/phpbb/template/twig/extension.php182
1 files changed, 182 insertions, 0 deletions
diff --git a/phpBB/phpbb/template/twig/extension.php b/phpBB/phpbb/template/twig/extension.php
new file mode 100644
index 0000000000..6847dbd9f8
--- /dev/null
+++ b/phpBB/phpbb/template/twig/extension.php
@@ -0,0 +1,182 @@
+<?php
+/**
+*
+* @package phpBB3
+* @copyright (c) 2013 phpBB Group
+* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
+*
+*/
+
+namespace phpbb\template\twig;
+
+class extension extends \Twig_Extension
+{
+ /** @var \phpbb\template\context */
+ protected $context;
+
+ /** @var \phpbb\user */
+ protected $user;
+
+ /**
+ * Constructor
+ *
+ * @param \phpbb\template\context $context
+ * @param \phpbb\user $user
+ * @return \phpbb\template\twig\extension
+ */
+ public function __construct(\phpbb\template\context $context, $user)
+ {
+ $this->context = $context;
+ $this->user = $user;
+ }
+
+ /**
+ * Get the name of this extension
+ *
+ * @return string
+ */
+ public function getName()
+ {
+ return 'phpbb';
+ }
+
+ /**
+ * Returns the token parser instance to add to the existing list.
+ *
+ * @return array An array of Twig_TokenParser instances
+ */
+ public function getTokenParsers()
+ {
+ return array(
+ new \phpbb\template\twig\tokenparser\defineparser,
+ new \phpbb\template\twig\tokenparser\includeparser,
+ new \phpbb\template\twig\tokenparser\includejs,
+ new \phpbb\template\twig\tokenparser\includecss,
+ new \phpbb\template\twig\tokenparser\event,
+ new \phpbb\template\twig\tokenparser\includephp,
+ new \phpbb\template\twig\tokenparser\php,
+ );
+ }
+
+ /**
+ * Returns a list of filters to add to the existing list.
+ *
+ * @return array An array of filters
+ */
+ public function getFilters()
+ {
+ return array(
+ new \Twig_SimpleFilter('subset', array($this, 'loop_subset'), array('needs_environment' => true)),
+ new \Twig_SimpleFilter('addslashes', 'addslashes'),
+ );
+ }
+
+ /**
+ * Returns a list of global functions to add to the existing list.
+ *
+ * @return array An array of global functions
+ */
+ public function getFunctions()
+ {
+ return array(
+ new \Twig_SimpleFunction('lang', array($this, 'lang')),
+ );
+ }
+
+ /**
+ * Returns a list of operators to add to the existing list.
+ *
+ * @return array An array of operators
+ */
+ public function getOperators()
+ {
+ return array(
+ array(
+ '!' => array('precedence' => 50, 'class' => 'Twig_Node_Expression_Unary_Not'),
+ ),
+ array(
+ // precedence settings are copied from similar operators in Twig core extension
+ '||' => array('precedence' => 10, 'class' => 'Twig_Node_Expression_Binary_Or', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
+ '&&' => array('precedence' => 15, 'class' => 'Twig_Node_Expression_Binary_And', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
+
+ 'eq' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Equal', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
+
+ 'ne' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_NotEqual', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
+ 'neq' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_NotEqual', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
+ '<>' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_NotEqual', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
+
+ '===' => array('precedence' => 20, 'class' => '\phpbb\template\twig\node\expression\binary\equalequal', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
+ '!==' => array('precedence' => 20, 'class' => '\phpbb\template\twig\node\expression\binary\notequalequal', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
+
+ 'gt' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Greater', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
+ 'gte' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_GreaterEqual', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
+ 'ge' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_GreaterEqual', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
+ 'lt' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_Less', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
+ 'lte' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_LessEqual', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
+ 'le' => array('precedence' => 20, 'class' => 'Twig_Node_Expression_Binary_LessEqual', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
+
+ 'mod' => array('precedence' => 60, 'class' => 'Twig_Node_Expression_Binary_Mod', 'associativity' => \Twig_ExpressionParser::OPERATOR_LEFT),
+ ),
+ );
+ }
+
+ /**
+ * Grabs a subset of a loop
+ *
+ * @param Twig_Environment $env A Twig_Environment instance
+ * @param mixed $item A variable
+ * @param integer $start Start of the subset
+ * @param integer $end End of the subset
+ * @param Boolean $preserveKeys Whether to preserve key or not (when the input is an array)
+ *
+ * @return mixed The sliced variable
+ */
+ function loop_subset(\Twig_Environment $env, $item, $start, $end = null, $preserveKeys = false)
+ {
+ // We do almost the same thing as Twig's slice (array_slice), except when $end is positive
+ if ($end >= 1)
+ {
+ // When end is > 1, subset will end on the last item in an array with the specified $end
+ // This is different from slice in that it is the number we end on rather than the number
+ // of items to grab (length)
+
+ // Start must always be the actual starting number for this calculation (not negative)
+ $start = ($start < 0) ? sizeof($item) + $start : $start;
+ $end = $end - $start;
+ }
+
+ // We always include the last element (this was the past design)
+ $end = ($end == -1 || $end === null) ? null : $end + 1;
+
+ return twig_slice($env, $item, $start, $end, $preserveKeys);
+ }
+
+ /**
+ * Get output for a language variable (L_FOO, LA_FOO)
+ *
+ * This function checks to see if the language var was outputted to $context
+ * (e.g. in the ACP, L_TITLE)
+ * If not, we return the result of $user->lang()
+ *
+ * @param string $lang name
+ * @return string
+ */
+ function lang()
+ {
+ $args = func_get_args();
+ $key = $args[0];
+
+ $context = $this->context->get_data_ref();
+ $context_vars = $context['.'][0];
+
+ if (isset($context_vars['L_' . $key]))
+ {
+ return $context_vars['L_' . $key];
+ }
+
+ // LA_ is transformed into lang(\'$1\')|addslashes, so we should not
+ // need to check for it
+
+ return call_user_func_array(array($this->user, 'lang'), $args);
+ }
+}
;/bridgehead> <para>Les médias cochés seront utilisés pour maintenir les paquetages installés à jour, il est obligatoire de les cocher. Seuls les média mentionnant "Updates" dans leur nom doivent être sélectionnés. Pour des raisons de sécurité, cette colonne n'est pas modifiable dans cet outil, vous devez ouvrir une console sous root et taper <emphasis role="bold">drakrpm-edit-media --expert.</emphasis></para> <bridgehead>Colonne Média :</bridgehead> <para>Affiche le nom du médium. Les dépôts officiels de Mageia pour les versions finales sont structurés à minima en trois médias :</para> <itemizedlist> <listitem> <para><emphasis role="bold">Core</emphasis> contient la plupart des programmes disponibles et supportés par Mageia.</para> </listitem> <listitem> <para><emphasis role="bold">Nonfree</emphasis> contient quelques programmes non libres.</para> </listitem> <listitem> <para><emphasis role="bold">Tainted</emphasis> contient logiciels libres mais qui peuvent être soumis à des droits dans certains pays.</para> <para>Chaque médium possède 4 sous-catégories :</para> </listitem> <listitem> <para><emphasis role="bold">Release</emphasis> sont les paquetages tels qu'ils étaient le jour de l'édition de la version concernée de Mageia.</para> </listitem> <listitem> <para><emphasis role="bold">Updates</emphasis> contient les paquetages mis à jour depuis l'édition pour raisons de sécurité ou de bugs résolus. Chacun devrait valider ce médium, même avec une connexion Internet très lente.</para> </listitem> <listitem> <para><emphasis role="bold">Backports</emphasis> contient quelques paquetages de nouvelles versions rétroportées depuis Cauldron (la prochaine version en cours de développement).</para> </listitem> <listitem> <para><emphasis role="bold">Testing</emphasis> est utilisée provisoirement pour les tests de nouvelles mises à jour, le temps que les rapporteurs de bogues et l'équipe qualité valident les corrections.</para> </listitem> </itemizedlist> </section> <section> <title xml:id="drakrpm-edit-media-right-button">Les boutons à droite</title> <para><guibutton>Enlever :</guibutton></para> <para>Pour supprimer un médium, cliquer dessus puis sur ce bouton. Il est conseillé de supprimer le médium utilisé pour l'installation (CD ou DVD par exemple) car tous les paquetages qu'il contient sont dans le médium officiel Core Release.</para> <para><guibutton>Éditer :</guibutton></para> <para>Permet de modifier la configuration du médium sélectionné (URL, téléchargeur et proxy).</para> <para><guibutton>Ajouter :</guibutton></para> <para>Ajoute les dépôts officiels rendus disponibles sur Internet par Mageia. Ils ne contiennent que des logiciels sûrs et suffisamment testés. Cliquer sur le bouton <guibutton>Ajouter </guibutton>ouvre une fenêtre qui donne le choix entre installer les "Sources de mises à jour uniquement" ou bien le "Jeu complet des sources". Le premier choix constitue l'essentiel, le second est plus d'ordre pratique.</para> <para><guibutton>Les flèches haut et bas :</guibutton></para> <para>Change l'ordre dans la liste. Quand Drakrpm recherche un paquetage, il parcours la liste dans l'ordre affiché et installe le premier paquetage trouvé (pour un même numéro de version, sinon il installe la dernière version). Donc, si possible, placer en tête les dépôts les plus rapides.</para> </section> <section> <title xml:id="drakrpm-edit-media-menu">Le menu</title> <para><guimenu>Fichier -> Mettre à jour :</guimenu></para> <para>Une fenêtre apparaît avec la liste des medias. Sélectionner ceux qui sont à mettre à jour et cliquer sur le bouton <guibutton>Mettre à jour</guibutton>.</para> <para><guimenu>Fichier -> Ajouter un miroir de média spécifique :</guimenu></para> <para>Supposons que les miroirs actuels ne conviennent pas, parce qu'ils sont trop lents ou trop souvent indisponibles par exemple, il est possible de choisir un autre miroir. Sélectionner tous les médias en place et cliquer sur <guibutton>Enlever </guibutton>pour les supprimer. Cliquer sur <guimenu>Fichier -> Ajouter un miroir de média spécifique</guimenu>, Choisir entre mise à jour uniquement ou bien le jeu complet (Si vous ne savez pas, choisir le <guibutton>Jeu complet des sources</guibutton>) et accepter le contact en cliquant sur <guibutton>Oui</guibutton>. Cette fenêtre s'ouvre :</para> <mediaobject> <imageobject> <imagedata fileref="drakrpmEditMedia2.png"/> </imageobject> </mediaobject> <para>Une liste de pays est affichée sur la gauche, choisir le vôtre ou un pays voisin en cliquant sur le symbole >, cela affichera tous les miroirs disponibles dans ce pays. En choisir un et cliquer sur <guibutton>OK</guibutton>.</para> <para><guimenu>Fichier -> Ajouter un média personnalisé :</guimenu></para> <para>Il est possible d'installer un nouveau médium (venant d'une tierce partie par exemple) qui n'est pas supporté par Mageia. Une nouvelle fenêtre apparaît :</para> <para><mediaobject> <imageobject> <imagedata fileref="rpmdrakeEditMedia1.png"/> </imageobject> </mediaobject>Sélectionner le type de médium, trouver un nom évocateur qui définit bien le médium et donner l'adresse URL (ou le chemin, suivant le type de médium).</para> <para><guimenu>Options -> Options générales :</guimenu></para> <para>Cette entrée permet de choisir quand "Vérifier les RPM à installer" (toujours ou jamais), le programme de téléchargement (curl, wget ou aria2) et de définir la politique de téléchargement pour l'information sur les paquetages (sur demande - par défaut -, mises à jour seulement, toujours ou jamais).</para> <para><guimenu>Options -> Gérer les clés :</guimenu></para> <para>Pour garantir un haut niveau de sécurité, des clés numériques sont utilisées pour authentifier le media. Il est possible d'autoriser ou de refuser une clé pour chaque média. Dans la fenêtre qui apparaît, sélectionner un médium puis cliquer sur <guibutton>Ajouter</guibutton> pour autoriser une nouvelle clé ou pour sélectionner une clé et cliquer sur <guibutton>Enlever</guibutton> pour refuser cette clé.</para> <para><warning> <para>Faire cela avec précaution, comme pour tout ce qui concerne la sécurité.</para> </warning><guimenu>Options -> Serveur mandataire (proxy):</guimenu></para> <para>En cas de besoin d'un serveur proxy pour l'accès à Internet, le configurer ici. Il suffit de donner le <guibutton>Nom du serveur mandataire</guibutton> et si nécessaire un <guilabel>nom d'utilisateur</guilabel> et son <guilabel>mot de passe</guilabel>.</para> <para/> <para>Pour plus d'informations sur la configuration des medias, consulter la page du Wiki Mageia (en anglais) : <link ns2:href="https://wiki.mageia.org/en/Software_management">https://wiki.mageia.org/en/Software_management</link>.</para> </section> </section>