Example #1
0
 public function init()
 {
     $plugin = $this;
     // register plugin controller
     DatawrapperHooks::register(DatawrapperHooks::GET_ADMIN_PAGES, function () use($plugin) {
         return array('url' => '/users', 'title' => __('Users', $plugin->getName()), 'controller' => array($plugin, 'users'), 'order' => '2');
     });
     $this->declareAssets(array('vendor/serious-toolkit/serious-widget.js', 'dw.admin.users.js', 'users.css'), "|/admin/users|");
     $user = DatawrapperSession::getUser();
     if ($user->isAdmin()) {
         $this->registerController(function ($app) use($plugin) {
             $app->get('/admin/users/:user_id', function ($uid) use($app, $plugin) {
                 $theUser = UserQuery::create()->findPk($uid);
                 $page = array('title' => 'Users ยป ' . $theUser->guessName());
                 // manually add the admin nav menu vars
                 global $__dw_admin_pages;
                 foreach ($__dw_admin_pages as $adm_pg) {
                     $page['adminmenu'][$adm_pg['url']] = $adm_pg['title'];
                 }
                 add_header_vars($page, 'admin');
                 $page['the_user'] = $theUser;
                 $page['userPlugins'] = DatawrapperPluginManager::getUserPlugins($theUser->getId(), false);
                 $app->render('plugins/admin-users/admin-user-detail.twig', $page);
             });
         });
     }
 }
Example #2
0
function dwInitTwigEnvironment(Twig_Environment $twig)
{
    $twig->setCache(ROOT_PATH . '/tmp/twig');
    $twig->enableAutoReload();
    $twig->addExtension(new Twig_I18n_Extension());
    $twig->addFilter(new Twig_SimpleFilter('purify', function ($dirty) {
        return dwGetHTMLPurifier()->purify($dirty);
    }));
    $twig->addFilter(new Twig_SimpleFilter('json', function ($arr) {
        $mask = 0;
        if (!empty($opts)) {
            if (!empty($opts['pretty'])) {
                $mask = $mask | JSON_PRETTY_PRINT;
            }
        }
        return json_encode($arr, $mask);
    }));
    $twig->addFilter(new Twig_SimpleFilter('css', function ($arr) {
        $css = '';
        foreach ($arr as $prop => $val) {
            $css .= $prop . ':' . $val . ';';
        }
        return $css;
    }));
    $twig->addFunction(new Twig_SimpleFunction('hook', function () {
        call_user_func_array(array(DatawrapperHooks::getInstance(), 'execute'), func_get_args());
    }));
    $twig->addFunction(new Twig_SimpleFunction('has_hook', function ($hook) {
        return DatawrapperHooks::getInstance()->hookRegistered($hook);
    }));
    $twig->addFunction(new Twig_SimpleFunction('has_plugin', function ($plugin) {
        return DatawrapperPluginManager::loaded($plugin);
    }));
    $twig->addFilter(new Twig_SimpleFilter('lettering', function ($text) {
        $out = '';
        foreach (str_split($text) as $i => $char) {
            $out .= '<span class="char' . $i . '">' . $char . '</span>';
        }
        return $out;
    }, array('is_safe' => array('html'))));
    $loc = DatawrapperSession::getLanguage();
    if ($loc == 'en') {
        $loc = 'en-US';
    }
    \Moment\Moment::setLocale(str_replace('-', '_', $loc));
    $twig->addFilter(new Twig_SimpleFilter('reltime', function ($time) {
        // return $time;
        return (new \Moment\Moment($time))->fromNow()->getRelative();
    }));
    if (!empty($GLOBALS['dw_config']['debug'])) {
        $twig->addFilter('var_dump', new Twig_Filter_Function('var_dump'));
    }
    return $twig;
}
Example #3
0
function dwInitTwigEnvironment(Twig_Environment $twig)
{
    $twig->setCache(ROOT_PATH . '/tmp/twig');
    $twig->enableAutoReload();
    $twig->addExtension(new Twig_I18n_Extension());
    $twig->addFilter(new Twig_SimpleFilter('purify', function ($dirty) {
        return dwGetHTMLPurifier()->purify($dirty);
    }));
    $twig->addFilter(new Twig_SimpleFilter('json', function ($arr) {
        $mask = 0;
        if (!empty($opts)) {
            if (!empty($opts['pretty'])) {
                $mask = $mask | JSON_PRETTY_PRINT;
            }
        }
        return json_encode($arr, $mask);
    }));
    $twig->addFilter(new Twig_SimpleFilter('css', function ($arr) {
        $css = '';
        foreach ($arr as $prop => $val) {
            $css .= $prop . ':' . $val . ';';
        }
        return $css;
    }));
    $twig->addFunction(new Twig_SimpleFunction('hook', function () {
        call_user_func_array(array(DatawrapperHooks::getInstance(), 'execute'), func_get_args());
    }));
    $twig->addFunction(new Twig_SimpleFunction('has_hook', function ($hook) {
        return DatawrapperHooks::getInstance()->hookRegistered($hook);
    }));
    $twig->addFunction(new Twig_SimpleFunction('has_plugin', function ($plugin) {
        return DatawrapperPluginManager::loaded($plugin);
    }));
    $twig->addFilter(new Twig_SimpleFilter('lettering', function ($text) {
        $out = '';
        foreach (str_split($text) as $i => $char) {
            $out .= '<span class="char' . $i . '">' . $char . '</span>';
        }
        return $out;
    }, array('is_safe' => array('html'))));
    return $twig;
}
 public static function login($user, $keepLoggedIn = true, $dontLog = false)
 {
     $_SESSION['dw-user-id'] = $user->getId();
     self::getInstance()->user = $user;
     if (!$dontLog) {
         Action::logAction($user, 'login');
     }
     // reload plugins since there might be new plugins
     // becoming available after logins
     DatawrapperPluginManager::load();
     $_SESSION['persistent'] = $keepLoggedIn;
     $_SESSION['last_action_time'] = time();
     // make sure that the charts of the guest now belong to
     // the logged or newly created user
     $charts = ChartQuery::create()->findByGuestSession(session_id());
     foreach ($charts as $chart) {
         $chart->setAuthorId($user->getId());
         $chart->setGuestSession('');
         $chart->save();
     }
     // restore user organization
     if (empty($_SESSION['dw-user-organization'])) {
         // let's check the last chart
         $lastChart = ChartQuery::create()->filterByUser($user)->filterByOrganizationId(null, Criteria::ISNOTNULL)->orderByLastModifiedAt(Criteria::DESC)->findOne();
         if (!empty($lastChart)) {
             $_SESSION['dw-user-organization'] = $lastChart->getOrganization()->getId();
         }
     }
 }
Example #5
0
    fwrite($h, microtime(true) . ': ' . $txt . "\n");
    fclose($h);
}
require ROOT_PATH . 'lib/l10n.php';
require ROOT_PATH . 'lib/utils/parse_config.php';
parse_config();
if (!defined('NO_SLIM')) {
    // Initialize Slim app..
    if (ROOT_PATH == '../') {
        // ..either with TwigView for Datawrapper UI,...
        require_once ROOT_PATH . 'vendor/Slim-Extras/Views/TwigView.php';
        TwigView::$twigDirectory = ROOT_PATH . 'vendor/Twig';
        $app = new Slim(array('view' => new TwigView(), 'templates.path' => '../templates', 'session.handler' => null));
    } else {
        // ..or with JSONView for API.
        require ROOT_PATH . 'lib/api/views/JSONView.php';
        $app = new Slim(array('view' => 'JSONView'));
    }
}
require ROOT_PATH . 'lib/visualization/DatawrapperVisualization.php';
require ROOT_PATH . 'lib/theme/DatawrapperTheme.php';
require ROOT_PATH . 'lib/plugin/DatawrapperPlugin.php';
require ROOT_PATH . 'lib/hooks/DatawrapperHooks.php';
require ROOT_PATH . 'lib/mail.php';
require ROOT_PATH . 'lib/utils/memcache.php';
require ROOT_PATH . 'lib/utils/vksprintf.php';
require ROOT_PATH . 'lib/utils/copy_recursively.php';
require ROOT_PATH . 'lib/plugin/load_plugins.php';
require_once ROOT_PATH . 'lib/utils/i18n.php';
DatawrapperPluginManager::load();
Example #6
0
function has_plugin($plugin)
{
    return DatawrapperPluginManager::loaded($plugin);
}
<?php

/*
 * render templates provided by plugins
 */
$app->get('/plugins/:plugin/:template', function ($plugin_id, $template) use($app) {
    disable_cache($app);
    if (PluginQuery::create()->isInstalled($plugin_id)) {
        if (file_exists(ROOT_PATH . 'templates/plugins/' . $plugin_id . '/' . $template)) {
            $app->render('plugins/' . $plugin_id . '/' . $template, array('l10n__domain' => '/plugins/' . $plugin_id . '/...', 'plugin_config' => DatawrapperPluginManager::getInstance($plugin_id)->getConfig()));
            return;
        }
    }
    $app->notFound();
});
// also execute plugin controller
DatawrapperHooks::execute(DatawrapperHooks::GET_PLUGIN_CONTROLLER, $app);