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); }); }); } }
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; }
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(); } } }
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();
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);