Ejegg has submitted this change and it was merged.

Change subject: finish moving Twig support into wmf_communication
......................................................................


finish moving Twig support into wmf_communication

* Render Twig templates using Sandbox extension for protection.
* Use Twig from Composer.

Change-Id: Iae504abc33b4aa78d0f92628d8721a93f7c0044e
---
M sites/all/modules/exchange_rates/exchange_rates.info
M sites/all/modules/exchange_rates/make_exchange_refs.drush.inc
D sites/all/modules/wmf_common/twig.inc
M sites/all/modules/wmf_common/wmf_common.info
M sites/all/modules/wmf_common/wmf_common.module
M sites/all/modules/wmf_communication/Templating.php
R sites/all/modules/wmf_communication/twigext_l10n/CldrData.php
R sites/all/modules/wmf_communication/twigext_l10n/TwigLocalization.php
R 
sites/all/modules/wmf_communication/twigext_l10n/tests/TwigLocalizationTest.test
R sites/all/modules/wmf_communication/twigext_l10n/tests/twigext_l10n_tests.info
R 
sites/all/modules/wmf_communication/twigext_l10n/tests/twigext_l10n_tests.module
M sites/all/modules/wmf_communication/wmf_communication.info
M sites/all/modules/wmf_unsubscribe/wmf_unsubscribe.module
13 files changed, 65 insertions(+), 90 deletions(-)

Approvals:
  Ejegg: Looks good to me, approved



diff --git a/sites/all/modules/exchange_rates/exchange_rates.info 
b/sites/all/modules/exchange_rates/exchange_rates.info
index 37b6d62..9605b13 100644
--- a/sites/all/modules/exchange_rates/exchange_rates.info
+++ b/sites/all/modules/exchange_rates/exchange_rates.info
@@ -2,6 +2,7 @@
 description = Downloads exchange rates and converts currencies.
 core = 7.x
 version = 2.x-dev
+dependencies[] = wmf_communication
 files[] = retrievers/EcbRetriever.php
 files[] = retrievers/ExchangeRateRetriever.php
-files[] = retrievers/OandaRetriever.php
\ No newline at end of file
+files[] = retrievers/OandaRetriever.php
diff --git a/sites/all/modules/exchange_rates/make_exchange_refs.drush.inc 
b/sites/all/modules/exchange_rates/make_exchange_refs.drush.inc
index 510a29a..3c0244a 100644
--- a/sites/all/modules/exchange_rates/make_exchange_refs.drush.inc
+++ b/sites/all/modules/exchange_rates/make_exchange_refs.drush.inc
@@ -1,4 +1,7 @@
 <?php
+
+use wmf_communication\Templating;
+
 /**
  * Implementation of hook_drush_command()
  */
@@ -44,17 +47,14 @@
 
 /* protected */
 function exchange_rates_make_ref_content( $format, $rates ) {
-    static $twig = null;
+    $twig = Templating::twig_from_directory( __DIR__ . '/templates' );
 
-    if ( !$twig ) {
-        module_load_include( 'inc', 'wmf_common', 'twig' );
-        $twig = wmf_common_get_twig( __DIR__ . "/templates" );
-    }
-
-    $filename = "ref_source.{$format}.twig";
-    return $twig->render( $filename, array(
+    $params = array(
         'generated_by' => basename( __FILE__ ) . ":templates/{$filename}",
         'last_updated' => variable_get( 'exchange_rates_bank_update', 0 ),
         'currency_rates' => $rates,
-    ) );
+    );
+
+    $filename = "ref_source.{$format}.twig";
+    return $twig->render( $filename, $params );
 }
diff --git a/sites/all/modules/wmf_common/twig.inc 
b/sites/all/modules/wmf_common/twig.inc
deleted file mode 100644
index f3bd13a..0000000
--- a/sites/all/modules/wmf_common/twig.inc
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-/**
- * Low-level interface to Symfony Twig.  Please use the 
wmf_communication::Templating class instead.
- */
-
-function wmf_common_get_twig_path()
-{
-    return variable_get(
-        'wmf_common_twig_location',
-        drupal_get_path('module', 'wmf_common') . DIRECTORY_SEPARATOR . "Twig"
-    );
-}
-
-function wmf_common_get_twig( $template_dir )
-{
-    $twig_path = wmf_common_get_twig_path();
-    require_once "{$twig_path}/lib/Twig/Autoloader.php";
-
-    Twig_Autoloader::register();
-
-    $cache_dir = drupal_realpath( file_default_scheme() . '://' ) . 
'/twig/cache';
-
-    $loader = new Twig_Loader_Filesystem( $template_dir );
-    $twig = new Twig_Environment( $loader, array(
-        'cache' => $cache_dir,
-        'auto_reload' => true,
-        'charset' => 'utf-8',
-    ) );
-
-    $twig->addExtension( new TwigLocalization() );
-
-    return $twig;
-}
diff --git a/sites/all/modules/wmf_common/wmf_common.info 
b/sites/all/modules/wmf_common/wmf_common.info
index 559fa7b..44419b9 100755
--- a/sites/all/modules/wmf_common/wmf_common.info
+++ b/sites/all/modules/wmf_common/wmf_common.info
@@ -7,6 +7,4 @@
 files[] = Queue.php
 files[] = WmfDatabase.php
 files[] = WmfException.php
-files[] = twigext_l10n/CldrData.php
-files[] = twigext_l10n/TwigLocalization.php
 files[] = tests/include/BaseWmfDrupalPhpUnitTestCase.php
diff --git a/sites/all/modules/wmf_common/wmf_common.module 
b/sites/all/modules/wmf_common/wmf_common.module
index 810f20d..3d12077 100644
--- a/sites/all/modules/wmf_common/wmf_common.module
+++ b/sites/all/modules/wmf_common/wmf_common.module
@@ -84,18 +84,6 @@
     '#description'   => t('Comma-delimited (no spaces) list of donor email 
addresses that will never trigger failmail'),
   );
 
-  $twig_path = variable_get('wmf_common_twig_location', 
drupal_get_path('module', 'wmf_common') . DIRECTORY_SEPARATOR . "Twig");
-  $twig_installed = file_exists(implode(DIRECTORY_SEPARATOR, array($twig_path, 
'lib', 'Twig', 'Autoloader.php')));
-  $twig_msg = $twig_installed ? '<span style="color:green;">Installed 
Correctly</span>' : '<span style="color:red;">Please install</span>';
-
-  $form['wmf_common_twig_location'] = array(
-    '#type'          => 'textfield',
-    '#title'         => t('Twig location'),
-    '#default_value' => $twig_path,
-    '#required'      => TRUE,
-    '#description'   => "{$twig_msg} " . t('Filesystem path of the Twig 
library.  Try: <code>git clone 
https://gerrit.wikimedia.org/r/wikimedia/fundraising/twig</code>'),
-  );
-
   $phpmailer_path = variable_get('wmf_common_phpmailer_location', 
drupal_get_path('module', 'wmf_common') . DIRECTORY_SEPARATOR . "PHPMailer");
   $phpmailer_installed = file_exists(implode(DIRECTORY_SEPARATOR, 
array($phpmailer_path, 'class.phpmailer.php')));
   $phpmailer_msg = $phpmailer_installed ? '<span 
style="color:green;">Installed Correctly</span>' : '<span 
style="color:red;">Please install.  Try: <code>git clone 
https://gerrit.wikimedia.org/r/wikimedia/fundraising/phpmailer</code></span>';
diff --git a/sites/all/modules/wmf_communication/Templating.php 
b/sites/all/modules/wmf_communication/Templating.php
index ef0594e..1550120 100644
--- a/sites/all/modules/wmf_communication/Templating.php
+++ b/sites/all/modules/wmf_communication/Templating.php
@@ -2,9 +2,11 @@
 
 use \Exception;
 
-// FIXME: encapsulate here, not in wmf_common
 use \Twig_Environment;
+use \Twig_Extension_Sandbox;
+use \Twig_Loader_Filesystem;
 use \Twig_Loader_String;
+use \Twig_Sandbox_SecurityPolicy;
 
 use \TwigLocalization;
 
@@ -35,12 +37,7 @@
      * @param string $format initial rendering mode (TODO: review usage)
      */
     function __construct( $templates_dir, $template_name, $lang_code, 
$template_params, $format = null ) {
-        // TODO: autoloaded Twig::get
-        if ( !function_exists( 'wmf_common_get_twig' ) ) {
-            module_load_include( 'inc', 'wmf_common', 'twig' );
-        }
-        $this->twig = wmf_common_get_twig( $templates_dir );
-        //TODO: class TemplatingTwig ; $this->twig = WmfTwig( $templates_dir );
+        $this->twig = Templating::twig_from_directory( $templates_dir );
 
         $this->templates_dir = $templates_dir;
         $this->template_name = $template_name;
@@ -52,6 +49,49 @@
         $this->language = $lang_code;
         $this->template_params = $template_params;
         $this->format = $format;
+    }
+
+    static function twig_from_directory( $template_dir ) {
+        # FIXME: Autoload in settings.php rather than assuming dir structure 
here.
+        require_once DRUPAL_ROOT . '/../vendor/autoload.php';
+
+        $loader = new Twig_Loader_Filesystem( $template_dir );
+        return Templating::twig_from_loader( $loader );
+    }
+
+    static protected function twig_from_loader( $loader ) {
+        $cache_dir = drupal_realpath( file_default_scheme() . '://' ) . 
'/twig/cache';
+
+        $twig = new Twig_Environment( $loader, array(
+            'cache' => $cache_dir,
+            'auto_reload' => true,
+            'charset' => 'utf-8',
+        ) );
+
+        $twig->addExtension( new TwigLocalization() );
+
+        $tags = array(
+            'if'
+        );
+        $filters = array(
+            'escape',
+            'l10n_currency',
+            'raw',
+        );
+        $methods = array(
+            //'Article' => array('getTitle', 'getBody'),
+        );
+        $properties = array(
+            //'Article' => array('title', 'body'),
+        );
+        $functions = array(
+            //'range'
+        );
+        $policy = new Twig_Sandbox_SecurityPolicy( $tags, $filters, $methods, 
$properties, $functions );
+        $sandbox = new Twig_Extension_Sandbox( $policy, true );
+        $twig->addExtension( $sandbox );
+
+        return $twig;
     }
 
     /**
@@ -141,17 +181,10 @@
      * TODO: clean up interface
      */
     static function renderStringTemplate( $template, $params ) {
-        // TODO: autoload instead
-        if ( !class_exists( 'Twig_Loader_String' ) ) {
-            module_load_include( 'inc', 'wmf_common', 'twig' );
-
-            // FIXME: throwaway call to initialize
-            wmf_common_get_twig( __DIR__ );
-        }
+        require_once DRUPAL_ROOT . '/../vendor/autoload.php';
 
         $loader = new Twig_Loader_String();
-        $twig = new Twig_Environment( $loader );
-        $twig->addExtension( new TwigLocalization() );
+        $twig = Templating::twig_from_loader( $loader );
 
         return $twig->render( $template, $params );
     }
diff --git a/sites/all/modules/wmf_common/twigext_l10n/CldrData.php 
b/sites/all/modules/wmf_communication/twigext_l10n/CldrData.php
similarity index 100%
rename from sites/all/modules/wmf_common/twigext_l10n/CldrData.php
rename to sites/all/modules/wmf_communication/twigext_l10n/CldrData.php
diff --git a/sites/all/modules/wmf_common/twigext_l10n/TwigLocalization.php 
b/sites/all/modules/wmf_communication/twigext_l10n/TwigLocalization.php
similarity index 100%
rename from sites/all/modules/wmf_common/twigext_l10n/TwigLocalization.php
rename to sites/all/modules/wmf_communication/twigext_l10n/TwigLocalization.php
diff --git 
a/sites/all/modules/wmf_common/twigext_l10n/tests/TwigLocalizationTest.test 
b/sites/all/modules/wmf_communication/twigext_l10n/tests/TwigLocalizationTest.test
similarity index 100%
rename from 
sites/all/modules/wmf_common/twigext_l10n/tests/TwigLocalizationTest.test
rename to 
sites/all/modules/wmf_communication/twigext_l10n/tests/TwigLocalizationTest.test
diff --git 
a/sites/all/modules/wmf_common/twigext_l10n/tests/twigext_l10n_tests.info 
b/sites/all/modules/wmf_communication/twigext_l10n/tests/twigext_l10n_tests.info
similarity index 100%
rename from 
sites/all/modules/wmf_common/twigext_l10n/tests/twigext_l10n_tests.info
rename to 
sites/all/modules/wmf_communication/twigext_l10n/tests/twigext_l10n_tests.info
diff --git 
a/sites/all/modules/wmf_common/twigext_l10n/tests/twigext_l10n_tests.module 
b/sites/all/modules/wmf_communication/twigext_l10n/tests/twigext_l10n_tests.module
similarity index 100%
rename from 
sites/all/modules/wmf_common/twigext_l10n/tests/twigext_l10n_tests.module
rename to 
sites/all/modules/wmf_communication/twigext_l10n/tests/twigext_l10n_tests.module
diff --git a/sites/all/modules/wmf_communication/wmf_communication.info 
b/sites/all/modules/wmf_communication/wmf_communication.info
index f35cf06..1d06663 100644
--- a/sites/all/modules/wmf_communication/wmf_communication.info
+++ b/sites/all/modules/wmf_communication/wmf_communication.info
@@ -12,6 +12,8 @@
 files[] = Recipient.php
 files[] = Templating.php
 files[] = Translation.php
+files[] = twigext_l10n/CldrData.php
+files[] = twigext_l10n/TwigLocalization.php
 files[] = CiviMail/CiviMailBulkStore.php
 files[] = CiviMail/CiviMailStore.php
 files[] = CiviMail/CiviMailingRecord.php
diff --git a/sites/all/modules/wmf_unsubscribe/wmf_unsubscribe.module 
b/sites/all/modules/wmf_unsubscribe/wmf_unsubscribe.module
index 90721a3..0745f1b 100755
--- a/sites/all/modules/wmf_unsubscribe/wmf_unsubscribe.module
+++ b/sites/all/modules/wmf_unsubscribe/wmf_unsubscribe.module
@@ -1,5 +1,7 @@
 <?php
 
+use wmf_communication\Templating;
+
 /**
  * Implements hook_menu
  */
@@ -165,23 +167,7 @@
  */
 function render_page( $page, $params=array(), $language='en' ){
 
-    $twig_include = implode(DIRECTORY_SEPARATOR, 
array(variable_get('wmf_common_twig_location', ''), 'lib', 'Twig', 
'Autoloader.php'));
-    if (!file_exists($twig_include))
-    {
-        watchdog("wmf_unsubscribe", "Twig libraries not found", array(), 
WATCHDOG_ERROR);
-        return "";
-
-    }
-    require_once $twig_include;
-
-    Twig_Autoloader::register();
-
-    $loader = new Twig_Loader_Filesystem( drupal_get_path( 'module', 
'wmf_unsubscribe' ) . '/templates/i18n/' );
-    $twig = new Twig_Environment( $loader, array(
-        'cache' => '/tmp/twig/cache/wmf_unsubscribe',
-        'auto_reload' => TRUE,
-        'charset' => 'utf-8',
-    ));
+    $twig = Templating::twig_from_directory( __DIR__ . '/templates/i18n/' );
 
     try{
         $template = $twig->loadTemplate( "$page.$language.html" );

-- 
To view, visit https://gerrit.wikimedia.org/r/161412
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Iae504abc33b4aa78d0f92628d8721a93f7c0044e
Gerrit-PatchSet: 6
Gerrit-Project: wikimedia/fundraising/crm
Gerrit-Branch: master
Gerrit-Owner: Awight <awi...@wikimedia.org>
Gerrit-Reviewer: Awight <awi...@wikimedia.org>
Gerrit-Reviewer: Ejegg <eeggles...@wikimedia.org>
Gerrit-Reviewer: Katie Horn <kh...@wikimedia.org>
Gerrit-Reviewer: Ssmith <ssm...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to