| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- <?php
- /*
- * This file is part of MODX Revolution.
- *
- * Copyright (c) MODX, LLC. All Rights Reserved.
- *
- * For complete copyright and license information, see the COPYRIGHT and LICENSE
- * files found in the top-level directory of this distribution.
- */
- /**
- * Loads update user page
- *
- * @package modx
- * @subpackage manager.controllers
- */
- class SecurityUserUpdateManagerController extends modManagerController {
- /** @var string $onUserFormRender */
- public $onUserFormRender = '';
- /** @var array $extendedFields */
- public $extendedFields = array();
- /** @var array $remoteFields */
- public $remoteFields = array();
- /** @var modUser $user */
- public $user;
- /**
- * Check for any permissions or requirements to load page
- * @return bool
- */
- public function checkPermissions() {
- return $this->modx->hasPermission('edit_user');
- }
- /**
- * Register custom CSS/JS for the page
- * @return void
- */
- public function loadCustomCssJs() {
- $mgrUrl = $this->modx->getOption('manager_url',null,MODX_MANAGER_URL);
- $this->addHtml('<script type="text/javascript">
- // <![CDATA[
- MODx.onUserFormRender = "'.$this->onUserFormRender.'";
- MODx.perm.set_sudo = '.($this->modx->hasPermission('set_sudo') ? 1 : 0).';
- // ]]>
- </script>');
- /* register JS scripts */
- $this->addJavascript($mgrUrl.'assets/modext/widgets/core/modx.orm.js');
- $this->addJavascript($mgrUrl.'assets/modext/widgets/core/modx.grid.settings.js');
- $this->addJavascript($mgrUrl.'assets/modext/widgets/security/modx.grid.user.settings.js');
- $this->addJavascript($mgrUrl.'assets/modext/widgets/security/modx.grid.user.group.js');
- $this->addJavascript($mgrUrl.'assets/modext/widgets/security/modx.panel.user.js');
- $this->addJavascript($mgrUrl.'assets/modext/sections/security/user/update.js');
- $this->addHtml('<script type="text/javascript">
- // <![CDATA[
- Ext.onReady(function() {
- MODx.load({
- xtype: "modx-page-user-update"
- ,user: "'.$this->user->get('id').'"
- '.(!empty($this->remoteFields) ? ',remoteFields: '.$this->modx->toJSON($this->remoteFields) : '').'
- '.(!empty($this->extendedFields) ? ',extendedFields: '.$this->modx->toJSON($this->extendedFields) : '').'
- });
- });
- // ]]>
- </script>');
- }
- /**
- * Custom logic code here for setting placeholders, etc
- * @param array $scriptProperties
- * @return mixed
- */
- public function process(array $scriptProperties = array()) {
- $placeholders = array();
- /* get user */
- if (empty($scriptProperties['id']) || strlen($scriptProperties['id']) !== strlen((integer)$scriptProperties['id'])) {
- return $this->failure($this->modx->lexicon('user_err_ns'));
- }
- $this->user = $this->modx->getObject('modUser', array('id' => $scriptProperties['id']));
- if ($this->user == null) return $this->failure($this->modx->lexicon('user_err_nf'));
- /* process remote data, if existent */
- $this->remoteFields = array();
- $remoteData = $this->user->get('remote_data');
- if (!empty($remoteData)) {
- $this->remoteFields = $this->_parseCustomData($remoteData);
- }
- /* parse extended data, if existent */
- $this->user->getOne('Profile');
- if ($this->user->Profile) {
- $this->extendedFields = array();
- $extendedData = $this->user->Profile->get('extended');
- if (!empty($extendedData)) {
- $this->extendedFields = $this->_parseCustomData($extendedData);
- }
- }
- /* invoke OnUserFormPrerender event */
- $onUserFormPrerender = $this->modx->invokeEvent('OnUserFormPrerender', array(
- 'id' => $this->user->get('id'),
- 'user' => &$this->user,
- 'mode' => modSystemEvent::MODE_UPD,
- ));
- if (is_array($onUserFormPrerender)) {
- $onUserFormPrerender = implode('',$onUserFormPrerender);
- }
- $placeholders['OnUserFormPrerender'] = $onUserFormPrerender;
- /* invoke OnUserFormRender event */
- $onUserFormRender = $this->modx->invokeEvent('OnUserFormRender', array(
- 'id' => $this->user->get('id'),
- 'user' => &$this->user,
- 'mode' => modSystemEvent::MODE_UPD,
- ));
- if (is_array($onUserFormRender)) $onUserFormRender = implode('',$onUserFormRender);
- $this->onUserFormRender = str_replace(array('"',"\n","\r"),array('\"','',''),$onUserFormRender);
- $placeholders['OnUserFormRender'] = $this->onUserFormRender;
- return $placeholders;
- }
- private function _parseCustomData(array $remoteData = array(),$path = '') {
- $usemb = function_exists('mb_strlen') && (boolean)$this->modx->getOption('use_multibyte',null,false);
- $encoding = $this->modx->getOption('modx_charset',null,'UTF-8');
- $fields = array();
- foreach ($remoteData as $key => $value) {
- $field = array(
- 'name' => $key,
- 'id' => (!empty($path) ? $path.'.' : '').$key,
- );
- if (is_array($value)) {
- $field['iconCls'] = 'icon-folder';
- $field['text'] = htmlentities($key,ENT_QUOTES,$encoding);
- $field['leaf'] = false;
- $field['children'] = $this->_parseCustomData($value,$key);
- } else {
- $v = $value;
- if ($usemb) {
- if (mb_strlen($v, $encoding) > 30) {
- $v = mb_substr($v,0,30,$encoding).'...';
- }
- }
- elseif (strlen($v) > 30) {
- $v = substr($v,0,30).'...';
- }
- $field['iconCls'] = 'icon-terminal';
- $field['text'] = htmlentities($key,ENT_QUOTES,$encoding).' - <i>'.htmlentities($v,ENT_QUOTES,$encoding).'</i>';
- $field['leaf'] = true;
- $field['value'] = $value;
- }
- $fields[] = $field;
- }
- return $fields;
- }
- /**
- * Return the pagetitle
- *
- * @return string
- */
- public function getPageTitle() {
- if($this->user == null) {
- return $this->modx->lexicon('user_err_nf');
- } else {
- return $this->modx->lexicon('user').': '.$this->user->get('username');
- }
- }
- /**
- * Return the location of the template file
- * @return string
- */
- public function getTemplateFile() {
- return 'security/user/update.tpl';
- }
- /**
- * Specify the language topics to load
- * @return array
- */
- public function getLanguageTopics() {
- return array('user','setting','access');
- }
- /**
- * Get the Help URL
- * @return string
- */
- public function getHelpUrl() {
- return 'Users';
- }
- }
|