Exemplo n.º 1
0
 /**
  * Get list of all available permissions on the system
  */
 public static function availablePermissions()
 {
     $permissions = array('Super admin', 'Content', 'Pages', 'Design', 'Plugins', 'Config', 'Config advanced', 'Languages', 'System', 'Administrators', 'Log', 'Email', 'Repository', 'Repository upload');
     $plugins = \Ip\Internal\Plugins\Model::getActivePluginNames();
     foreach ($plugins as $plugin) {
         if (is_file(ipFile('Plugin/' . $plugin . '/AdminController.php'))) {
             array_push($permissions, $plugin);
         }
     }
     $permissions = ipFilter('ipAvailablePermissions', $permissions);
     return $permissions;
 }
Exemplo n.º 2
0
 /**
  * @param string $currentModule Name of the current (active) module
  * @return \Ip\Internal\Admin\MenuItem[]
  */
 public function getAdminMenuItems($currentModule)
 {
     $answer = array();
     $modules = \Ip\Internal\Plugins\Model::getModules();
     foreach ($modules as $module) {
         // skipping modules that don't have 'index' (default) action in AdminController
         $controllerClass = 'Ip\\Internal\\' . $module . '\\AdminController';
         if (!class_exists($controllerClass) || !method_exists($controllerClass, 'index')) {
             continue;
         }
         $moduleItem = new \Ip\Internal\Admin\MenuItem();
         $moduleItem->setTitle(__($module, 'Ip-admin', false));
         $moduleItem->setUrl(ipActionUrl(array('aa' => $module . '.index')));
         $moduleItem->setIcon($this->getAdminMenuItemIcon($module));
         if ($module == $currentModule) {
             $moduleItem->markAsCurrent(true);
         }
         if (ipAdminPermission($module)) {
             $answer[] = $moduleItem;
         }
     }
     $plugins = \Ip\Internal\Plugins\Service::getActivePlugins();
     foreach ($plugins as $plugin) {
         $controllerClass = '\\Plugin\\' . $plugin['name'] . '\\AdminController';
         if (!class_exists($controllerClass) || !method_exists($controllerClass, 'index')) {
             continue;
         }
         $moduleItem = new \Ip\Internal\Admin\MenuItem();
         $moduleItem->setTitle(__($plugin['title'], 'Ip-admin', false));
         $moduleItem->setUrl(ipActionUrl(array('aa' => $plugin['name'])));
         $moduleItem->setIcon($this->getAdminMenuItemIcon($plugin['name']));
         if ($plugin['name'] == $currentModule) {
             $moduleItem->markAsCurrent(true);
         }
         if (ipAdminPermission($plugin['name'])) {
             $answer[] = $moduleItem;
         }
     }
     $answer = ipFilter('ipAdminMenu', $answer);
     return $answer;
 }
Exemplo n.º 3
0
 /**
  * @ignore
  * @param Request $request
  * @param array $options
  * @param bool $subrequest
  * @return Response\Json|Response\PageNotFound|Response\Redirect
  * @throws Exception
  * @ignore
  */
 public function _handleOnlyRequest(\Ip\Request $request, $options = array(), $subrequest = true)
 {
     if (empty($options['skipInitEvents'])) {
         \Ip\ServiceLocator::dispatcher()->_bindApplicationEvents();
     }
     $result = ipJob('ipRouteLanguage', array('request' => $request, 'relativeUri' => $request->getRelativePath()));
     if ($result) {
         $requestLanguage = $result['language'];
         $routeLanguage = $requestLanguage->getCode();
         ipRequest()->_setRoutePath($result['relativeUri']);
     } else {
         $routeLanguage = null;
         $requestLanguage = ipJob('ipRequestLanguage', array('request' => $request));
         ipRequest()->_setRoutePath($request->getRelativePath());
     }
     //find out and set locale
     $locale = $requestLanguage->getCode();
     if (strlen($locale) == '2') {
         $locale = strtolower($locale) . '_' . strtoupper($locale);
     } else {
         $locale = str_replace('-', '_', $locale);
     }
     $locale .= '.utf8';
     if ($locale == "tr_TR.utf8" && (PHP_MAJOR_VERSION == 5 && PHP_MINOR_VERSION < 5)) {
         //Overcoming this bug https://bugs.php.net/bug.php?id=18556
         setlocale(LC_COLLATE, $locale);
         setlocale(LC_MONETARY, $locale);
         setlocale(LC_NUMERIC, $locale);
         setlocale(LC_TIME, $locale);
         setlocale(LC_MESSAGES, $locale);
         setlocale(LC_CTYPE, "en_US.utf8");
     } else {
         setLocale(LC_ALL, $locale);
     }
     setlocale(LC_NUMERIC, "C");
     //user standard C syntax for numbers. Otherwise you will get funny things with when autogenerating CSS, etc.
     ipContent()->_setCurrentLanguage($requestLanguage);
     $_SESSION['ipLastLanguageId'] = $requestLanguage->getId();
     if (empty($options['skipTranslationsInit'])) {
         if (!empty($options['translationsLanguageCode'])) {
             $languageCode = $options['translationsLanguageCode'];
         } else {
             $languageCode = $requestLanguage->getCode();
         }
         $this->initTranslations($languageCode);
     }
     if (empty($options['skipModuleInit'])) {
         $this->modulesInit();
     }
     ipEvent('ipInitFinished');
     $routeAction = ipJob('ipRouteAction', array('request' => $request, 'relativeUri' => ipRequest()->getRoutePath(), 'routeLanguage' => $routeLanguage));
     if (!empty($routeAction)) {
         if (!empty($routeAction['page'])) {
             ipContent()->_setCurrentPage($routeAction['page']);
         }
         if (!empty($routeAction['environment'])) {
             ipRoute()->setEnvironment($routeAction['environment']);
         } else {
             if (!empty($routeAction['controller']) && $routeAction['controller'] == 'AdminController') {
                 ipRoute()->setEnvironment(\Ip\Route::ENVIRONMENT_ADMIN);
             } else {
                 ipRoute()->setEnvironment(\Ip\Route::ENVIRONMENT_PUBLIC);
             }
         }
         if (!empty($routeAction['controller'])) {
             ipRoute()->setController($routeAction['controller']);
         }
         if (!empty($routeAction['plugin'])) {
             ipRoute()->setPlugin($routeAction['plugin']);
         }
         if (!empty($routeAction['name'])) {
             ipRoute()->setName($routeAction['name']);
         }
         if (!empty($routeAction['action'])) {
             ipRoute()->setAction($routeAction['action']);
         }
     }
     //check for CSRF attack
     if (empty($options['skipCsrfCheck']) && $request->isPost() && $request->getPost('securityToken') != $this->getSecurityToken() && (empty($routeAction['controller']) || $routeAction['controller'] != 'PublicController')) {
         ipLog()->error('Core.possibleCsrfAttack', array('post' => ipRequest()->getPost()));
         $data = array('status' => 'error');
         if (ipConfig()->isDevelopmentEnvironment()) {
             $data['errors'] = array('securityToken' => __('Possible CSRF attack. Please pass correct securityToken.', 'Ip-admin'));
         }
         // TODO JSONRPC
         return new \Ip\Response\Json($data);
     }
     if (empty($routeAction)) {
         $routeAction = array('plugin' => 'Core', 'controller' => 'PublicController', 'action' => 'pageNotFound');
     }
     $eventInfo = $routeAction;
     if (!empty($routeAction['plugin'])) {
         $plugin = $routeAction['plugin'];
         $controller = $routeAction['controller'];
         if (in_array($plugin, \Ip\Internal\Plugins\Model::getModules())) {
             $controllerClass = 'Ip\\Internal\\' . $plugin . '\\' . $controller;
         } else {
             if (!in_array($plugin, \Ip\Internal\Plugins\Service::getActivePluginNames())) {
                 throw new \Ip\Exception("Plugin '" . esc($plugin) . "' doesn't exist or isn't activated.");
             }
             $controllerClass = 'Plugin\\' . $plugin . '\\' . $controller;
         }
         if (!class_exists($controllerClass)) {
             throw new \Ip\Exception('Requested controller doesn\'t exist. ' . esc($controllerClass));
         }
         // check if user is logged in
         if ($controller == 'AdminController' && !\Ip\Internal\Admin\Backend::userId()) {
             if (ipConfig()->get('rewritesDisabled')) {
                 return new \Ip\Response\Redirect(ipConfig()->baseUrl() . 'index.php/admin');
             } else {
                 return new \Ip\Response\Redirect(ipConfig()->baseUrl() . 'admin');
             }
         }
         if ($controller == 'AdminController') {
             if (!ipAdminPermission($plugin)) {
                 throw new \Ip\Exception('User has no permission to access ' . esc($plugin) . '');
             }
         }
         $eventInfo['controllerClass'] = $controllerClass;
         $eventInfo['controllerType'] = $controller;
     }
     if (empty($eventInfo['page'])) {
         $eventInfo['page'] = null;
     }
     // change layout if safe mode
     if (\Ip\Internal\Admin\Service::isSafeMode()) {
         ipSetLayout(ipFile('Ip/Internal/Admin/view/safeModeLayout.php'));
     } else {
         if ($eventInfo['page']) {
             ipSetLayout($eventInfo['page']->getLayout());
         }
     }
     ipEvent('ipBeforeController', $eventInfo);
     $controllerAnswer = ipJob('ipExecuteController', $eventInfo);
     return $controllerAnswer;
 }
Exemplo n.º 4
0
 /**
  * @ignore
  */
 public function _bindApplicationEvents()
 {
     // Parse event files:
     $coreModules = \Ip\Internal\Plugins\Model::getModules();
     foreach ($coreModules as $module) {
         $this->bindPluginEvents($module, '\\Ip\\Internal');
     }
     $plugins = \Ip\Internal\Plugins\Service::getActivePluginNames();
     foreach ($plugins as $plugin) {
         $this->bindPluginEvents($plugin);
     }
 }
Exemplo n.º 5
0
 public static function sendUsageStatistics($data = array(), $timeout = 3)
 {
     if (!function_exists('curl_init')) {
         return;
     }
     if (!isset($data['action'])) {
         $data['action'] = 'Ping.default';
     }
     if (!isset($data['php'])) {
         $data['php'] = phpversion();
     }
     if (!isset($data['db'])) {
         $data['db'] = null;
         // todo: make a db type/version check stable to work during install and later on
         //            if (class_exists('PDO')) {
         //                $pdo = ipDb()->getConnection();
         //                if ($pdo) {
         //                    $data['db'] = $pdo->getAttribute(\PDO::ATTR_SERVER_VERSION);
         //                }
         //            }
     }
     if (!isset($data['developmentEnvironment'])) {
         $data['developmentEnvironment'] = ipConfig()->get('developmentEnvironment');
     }
     if (!isset($data['showErrors'])) {
         $data['showErrors'] = ipConfig()->get('showErrors');
     }
     if (!isset($data['debugMode'])) {
         $data['debugMode'] = ipConfig()->get('debugMode');
     }
     if (!isset($data['timezone'])) {
         $data['timezone'] = ipConfig()->get('timezone');
     }
     if (!isset($data['data'])) {
         $data['data'] = array();
     }
     if (!isset($data['websiteId'])) {
         $data['websiteId'] = ipStorage()->get('Ip', 'websiteId');
     }
     if (!isset($data['websiteUrl'])) {
         $data['websiteUrl'] = ipConfig()->baseUrl();
     }
     if (!isset($data['version'])) {
         $data['version'] = \Ip\Application::getVersion();
     }
     if (!isset($data['locale'])) {
         $data['locale'] = \Ip\ServiceLocator::translator()->getAdminLocale();
     }
     if (!isset($data['doSupport'])) {
         $data['doSupport'] = ipStorage()->get('Ip', 'getImpressPagesSupport');
     }
     if (!isset($data['administrators'])) {
         $administrators = \Ip\Internal\Administrators\Model::getAll();
         $adminCollection = array();
         foreach ($administrators as $admin) {
             $permissions = \Ip\Internal\AdminPermissionsModel::getUserPermissions($admin['id']);
             $adminCollection[] = array('id' => $admin['id'], 'email' => $admin['email'], 'permissions' => $permissions);
         }
         $data['administrators'] = $adminCollection;
     }
     if (!isset($data['themes'])) {
         $data['themes'] = array('active' => ipConfig()->theme(), 'all' => \Ip\Internal\Design\Model::instance()->getAvailableThemes());
     }
     if (!isset($data['plugins'])) {
         $plugins = \Ip\Internal\Plugins\Model::getAllPluginNames();
         $activePlugins = \Ip\Internal\Plugins\Service::getActivePluginNames();
         $pluginCollection = array();
         foreach ($plugins as $pluginName) {
             $pluginCollection[] = array('name' => $pluginName, 'active' => in_array($pluginName, $activePlugins) ? true : false);
         }
         $data['plugins'] = $pluginCollection;
     }
     if (!isset($data['languages'])) {
         $data['languages'] = ipContent()->getLanguages();
     }
     if (!isset($data['pages'])) {
         $result = array();
         try {
             $table = ipTable('page');
             $sql = "\n                    SELECT\n                        `languageCode` AS `language`, COUNT( 1 ) AS `quantity`\n                    FROM\n                        {$table}\n                    GROUP BY\n                        `languageCode`\n                ";
             $result = ipDb()->fetchAll($sql);
         } catch (\Exception $e) {
             // Do nothing.
         }
         $data['pages'] = $result;
     }
     $postFields = 'data=' . urlencode(serialize($data));
     // Use sockets instead of CURL
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, ipConfig()->get('usageStatisticsUrl', 'http://service.impresspages.org/stats'));
     curl_setopt($ch, CURLOPT_POST, 1);
     curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
     //        curl_setopt($ch, CURLOPT_REFERER, ipConfig()->baseUrl());
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
     curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
     curl_exec($ch);
 }
Exemplo n.º 6
0
 public static function getPluginData($pluginName)
 {
     $activePlugins = Service::getActivePluginNames();
     $config = Model::getPluginConfig($pluginName);
     $pluginRecord = array('description' => '', 'title' => $pluginName, 'name' => $pluginName, 'version' => '', 'author' => '', 'labelType' => 'default', 'label' => __('Inactive', 'Ip-admin'), 'active' => false);
     if (in_array($pluginName, $activePlugins)) {
         $pluginRecord['active'] = true;
         $pluginRecord['labelType'] = 'success';
         // Bootstrap class
         $pluginRecord['label'] = __('Active', 'Ip-admin');
     }
     if (isset($config['description'])) {
         $pluginRecord['description'] = $config['description'];
     }
     if (isset($config['version'])) {
         $pluginRecord['version'] = $config['version'];
     }
     if (isset($config['title'])) {
         $pluginRecord['title'] = $config['title'];
     }
     if (isset($config['author'])) {
         $pluginRecord['author'] = $config['author'];
     }
     if (isset($config['name'])) {
         $pluginRecord['name'] = $config['name'];
     }
     if (isset($config['options'])) {
         $pluginRecord['options'] = $config['options'];
     }
     return $pluginRecord;
 }
Exemplo n.º 7
0
 public function downloadPlugins()
 {
     ipRequest()->mustBePost();
     $plugins = ipRequest()->getPost('plugins');
     if (!is_writable(Model::pluginInstallDir())) {
         return JsonRpc::error(__('Directory is not writable. Please check your email and install the plugin manually.', 'Ip-admin', false), 777);
     }
     try {
         if (!is_array($plugins)) {
             return JsonRpc::error(__('Download failed: invalid parameters', 'Ip-admin', false), 101);
         }
         if (function_exists('set_time_limit')) {
             set_time_limit(count($plugins) * 180 + 30);
         }
         $pluginDownloader = new PluginDownloader();
         foreach ($plugins as $plugin) {
             if (!empty($plugin['url']) && !empty($plugin['name']) && !empty($plugin['signature'])) {
                 $pluginDownloader->downloadPlugin($plugin['name'], $plugin['url'], $plugin['signature']);
             }
         }
     } catch (\Ip\Exception $e) {
         return JsonRpc::error($e->getMessage(), $e->getCode());
     } catch (\Exception $e) {
         return JsonRpc::error(__('Unknown error. Please see logs.', 'Ip-admin', false), 987);
     }
     return JsonRpc::result(array('plugins' => $plugins));
 }
Exemplo n.º 8
0
 /**
  * Get controller class
  * @return string
  */
 public function controllerClass()
 {
     if ($this->controllerClass != null) {
         return $this->controllerClass;
     }
     if ($this->plugin == null) {
         return null;
     }
     if (in_array($this->plugin, \Ip\Internal\Plugins\Model::getModules())) {
         $controllerClass = 'Ip\\Internal\\' . $this->plugin . '\\' . $this->controller;
     } else {
         $controllerClass = 'Plugin\\' . $this->plugin . '\\' . $this->controller;
     }
     $this->controllerClass = $controllerClass;
     return $this->controllerClass;
 }