/**
  * Vetos (denies) a login attempt, and forces the user to change his password.
  *
  * This handler is triggered by the 'user.login.veto' event.  It vetos (denies) a
  * login attempt if the users's account record is flagged to force the user to change
  * his password maintained by the Users module. If the user does not maintain a
  * password on his Users account (e.g., he registered with and logs in with a Google
  * Account or an OpenID, and never established a Users password), then this handler
  * will not trigger a change of password.
  *
  * @param GenericEvent $event The event that triggered this handler.
  *
  * @return void
  */
 public static function forcedPasswordChangeListener(GenericEvent $event)
 {
     $userObj = $event->getSubject();
     $userMustChangePassword = UserUtil::getVar('_Users_mustChangePassword', $userObj['uid'], false);
     if ($userMustChangePassword && $userObj['pass'] != UsersConstant::PWD_NO_USERS_AUTHENTICATION) {
         $event->stopPropagation();
         $event->setData(array('redirect_func' => array('modname' => self::$modname, 'type' => 'user', 'func' => 'changePassword', 'args' => array('login' => true), 'session' => array('var' => 'Users_Controller_User_changePassword', 'namespace' => 'Zikula_Users'))));
         LogUtil::registerError(__("Your log-in request was not completed. You must change your web site account's password first."));
     }
 }
Exemplo n.º 2
0
 /**
  * Event handler here.
  *
  * @param GenericEvent $event Event handler.
  *
  * @return void
  */
 public function handler(GenericEvent $event)
 {
     // check if this is for this handler
     if (!($event->getSubject() instanceof Users_Api_Admin && $event['modfunc'][1] == 'getlinks')) {
         return;
     }
     if (SecurityUtil::checkPermission('Users::', '::', ACCESS_ADMIN)) {
         $event->data[] = array('url' => ModUtil::url('Users', 'admin', 'somelink'), 'text' => __('Here is another link'));
     }
 }
Exemplo n.º 3
0
 /**
  * Vetos (denies) a login attempt, and forces the user to change his password.
  * This handler is triggered by the 'user.login.veto' event.  It vetos (denies) a
  * login attempt if the users's account record is flagged to force the user to change
  * his password maintained by the Users module. If the user does not maintain a
  * password on his Users account (e.g., he registered with and logs in with a Google
  * Account or an OpenID, and never established a Users password), then this handler
  * will not trigger a change of password.
  *
  * @param GenericEvent $event The event that triggered this handler.
  *
  * @return void
  *
  * @throws \RuntimeException Thrown if the user hasn't changed the account password
  */
 public function forcedPasswordChange(GenericEvent $event)
 {
     $userObj = $event->getSubject();
     $userMustChangePassword = UserUtil::getVar('_Users_mustChangePassword', $userObj['uid'], false);
     if ($userMustChangePassword && $userObj['pass'] != UsersConstant::PWD_NO_USERS_AUTHENTICATION) {
         $event->stopPropagation();
         $event->setData(array('redirect_func' => array('modname' => UsersConstant::MODNAME, 'type' => 'user', 'func' => 'changePassword', 'args' => array('login' => true), 'session' => array('var' => 'User_changePassword', 'namespace' => UsersConstant::SESSION_VAR_NAMESPACE))));
         $this->requestStack->getCurrentRequest()->getSession()->getFlashBag()->add('error', __("Your log-in request was not completed. You must change your web site account's password first."));
     }
 }
Exemplo n.º 4
0
 /**
  * Add 'anotherfunction' Event handler .
  *
  * @param GenericEvent $event Handler.
  *
  * @return void
  */
 public function anotherfunction(GenericEvent $event)
 {
     // check if this is for this handler
     $subject = $event->getSubject();
     if (!($event['method'] == 'anotherfunction' && $subject instanceof Users_Controller_Admin)) {
         return;
     }
     if (!SecurityUtil::checkPermission('Users::', '::', ACCESS_ADMIN)) {
         throw new \Zikula\Framework\Exception\ForbiddenException();
     }
     $view = Zikula_View_plugin::getModulePluginInstance($this->moduleName, $this->pluginName);
     $event->setData($view->fetch('anotherfunction.tpl'));
     $event->stopPropagation();
 }
Exemplo n.º 5
0
 /**
  * Respond to 'get.pending_content' events with registration requests pending approval.
  * When a 'get.pending_content' event is fired, the Users module will respond with the
  * number of registration requests that are pending administrator approval. The number
  * pending may not equal the total number of outstanding registration requests, depending
  * on how the 'moderation_order' module configuration variable is set, and whether e-mail
  * address verification is required.
  * If the 'moderation_order' variable is set to require approval after e-mail verification
  * (and e-mail verification is also required) then the number of pending registration
  * requests will equal the number of registration requested that have completed the
  * verification process but have not yet been approved. For other values of
  * 'moderation_order', the number should equal the number of registration requests that
  * have not yet been approved, without regard to their current e-mail verification state.
  * If moderation of registrations is not enabled, then the value will always be 0.
  * In accordance with the 'get_pending_content' conventions, the count of pending
  * registrations, along with information necessary to access the detailed list, is
  * assemped as a {@link Zikula_Provider_AggregateItem} and added to the event
  * subject's collection.
  *
  * @param GenericEvent $event The event that was fired, a 'get_pending_content' event.
  *
  * @return void
  */
 public static function pendingContent(GenericEvent $event)
 {
     if (SecurityUtil::checkPermission('ZikulaUsersModule::', '::', ACCESS_MODERATE)) {
         $approvalOrder = ModUtil::getVar(UsersConstant::MODNAME, 'moderation_order', UsersConstant::APPROVAL_ANY);
         if ($approvalOrder == UsersConstant::APPROVAL_AFTER) {
             $numPendingApproval = ModUtil::apiFunc(UsersConstant::MODNAME, 'registration', 'countAll', array('filter' => array('approved_by' => 0, 'isverified' => true)));
         } else {
             $numPendingApproval = ModUtil::apiFunc(UsersConstant::MODNAME, 'registration', 'countAll', array('filter' => array('approved_by' => 0)));
         }
         if (!empty($numPendingApproval)) {
             $collection = new Zikula_Collection_Container(UsersConstant::MODNAME);
             $collection->add(new Zikula_Provider_AggregateItem('registrations', __('Registrations pending approval'), $numPendingApproval, 'admin', 'viewRegistrations'));
             $event->getSubject()->add($collection);
         }
     }
 }
Exemplo n.º 6
0
 /**
  * Event handler here.
  *
  * @param GenericEvent $event Event object.
  *
  * @return void
  */
 public function handler(GenericEvent $event)
 {
     // subject must be an instance of Theme class.
     $theme = $event->getSubject();
     if (!$theme instanceof Zikula_View_Theme) {
         return;
     }
     // register output filter to add MultiHook environment if requried
     if (ModUtil::available('MultiHookModule')) {
         $modinfo = ModUtil::getInfoFromName('MultiHookModule');
         if (version_compare($modinfo['version'], '5.0', '>=') == 1) {
             $theme->load_filter('output', 'multihook');
             ModUtil::apiFunc('MultiHookModule', 'theme', 'preparetheme');
         }
     }
 }
Exemplo n.º 7
0
 /**
  * Event handler here.
  *
  * @param GenericEvent $event Event handler.
  *
  * @return void
  */
 public function handler(GenericEvent $event)
 {
     // check if this is for this handler
     $subject = $event->getSubject();
     if (!($event['method'] == 'extensions' && $subject instanceof \Users\Controller\AdminController)) {
         return;
     }
     if (!SecurityUtil::checkPermission('Users::', '::', ACCESS_ADMIN)) {
         throw new \Zikula\Framework\Exception\ForbiddenException();
     }
     // Zikula Modules and Themes versions
     $view = Zikula_View::getInstance('Users');
     $view->assign('mods', ModUtil::getModules());
     $view->assign('themes', ThemeUtil::getAllThemes());
     $event->setData($view->fetch('users_admin_extensions.tpl'));
     $event->stopPropagation();
 }
Exemplo n.º 8
0
 /**
  * Respond to zikula.link_collector events.
  *
  * Create a BC Layer for the zikula.link_collector event to gather Hook-related links.
  *
  * @param GenericEvent $event
  */
 public function processHookListeners(GenericEvent $event)
 {
     $event->setArgument('modname', $event->getSubject());
     $event->setArgument('modfunc', array(1 => 'getLinks'));
     $event->setArgument('api', true);
     $this->addHooksLink($event);
     $this->addServiceLink($event);
 }
Exemplo n.º 9
0
 /**
  * Listener for the `user.account.delete` event.
  *
  * Occurs after a user is deleted from the system.
  * All handlers are notified.
  * The full user record deleted is available as the subject.
  * This is a storage-level event, not a UI event. It should not be used for UI-level actions such as redirects.
  * The subject of the event is set to the user record that is being deleted.
  *
  * @param GenericEvent $event The event instance.
  */
 public function delete(GenericEvent $event)
 {
     ModUtil::initOOModule('ZikulaRoutesModule');
     $userRecord = $event->getSubject();
     $uid = $userRecord['uid'];
     $serviceManager = ServiceUtil::getManager();
     $entityManager = $serviceManager->get('doctrine.entitymanager');
     $repo = $entityManager->getRepository('Zikula\\RoutesModule\\Entity\\RouteEntity');
     // set creator to admin (2) for all routes created by this user
     $repo->updateCreator($uid, 2);
     // set last editor to admin (2) for all routes updated by this user
     $repo->updateLastEditor($uid, 2);
     $logger = $serviceManager->get('logger');
     $logger->notice('{app}: User {user} has been deleted, so we deleted corresponding {entities}, too.', array('app' => 'ZikulaRoutesModule', 'user' => UserUtil::getVar('uname'), 'entities' => 'routes'));
 }
Exemplo n.º 10
0
 /**
  * Listener which modifies the Theme Renderer.
  *
  * @param GenericEvent $event Event.
  *
  * @return void
  */
 public function initRenderer(GenericEvent $event)
 {
     $view = $event->getSubject();
     $view->debugging = true;
     $view->register_outputfilter(array($this, 'smartyViewoutputfilter'));
 }
Exemplo n.º 11
0
 /**
  * Configure Doctrine 1.x instance.
  *
  * Listens for 'doctrine.configure' events.
  * Subject is either Doctrine_Manager, Doctrine_Connection or Doctrine_Table.
  *
  * @param GenericEvent $event Event.
  *
  * @return void
  */
 public function configureDoctrine(GenericEvent $event)
 {
     $object = $event->getSubject();
     if ($object instanceof Doctrine_Manager) {
         // Cross-DBMS portability options
         // Modes are bitwised, so they can be combined using | and removed using ^.
         // See http://www.doctrine-project.org/documentation/manual/1_2/en/configuration#portability:portability-mode-attributes
         // Turn on all portability features (commented out as this is the default setting)
         $object->setAttribute('portability', Doctrine_Core::PORTABILITY_ALL);
         // Turn off identifier quoting, as it causes more problems than it solves
         // See http://www.doctrine-project.org/documentation/manual/1_2/en/configuration#identifier-quoting
         $object->setAttribute(Doctrine_Core::ATTR_QUOTE_IDENTIFIER, false);
         // What should be exported when exporting classes to the db
         // Modes are bitwised, so they can be combined using | and removed using ^.
         // See http://www.doctrine-project.org/documentation/manual/1_2/en/configuration#exporting
         $object->setAttribute(Doctrine_Core::ATTR_EXPORT, Doctrine_Core::EXPORT_ALL);
         // Validation attributes (default is VALIDATE_NONE)
         // Modes are bitwised, so they can be combined using | and removed using ^.
         // See http://www.doctrine-project.org/documentation/manual/1_2/en/configuration#naming-convention-attributes:validation-attributes
         // Turn on all validation functionality, at least while we are in development mode
         $object->setAttribute(Doctrine_Core::ATTR_VALIDATE, Doctrine_Core::VALIDATE_ALL);
         // naming convention of database related elements
         // affect importing schemas from the database to classes
         // as well as exporting classes into database tables.
         // Index names (default: [name]_idx)
         $object->setAttribute(Doctrine_Core::ATTR_IDXNAME_FORMAT, '%s');
         // Sequence names (default: [name]_seq)
         // $object->setAttribute(Doctrine_Core::ATTR_SEQNAME_FORMAT, '%s_sequence');
         // Database names
         // $object->setAttribute(Doctrine_Core::ATTR_DBNAME_FORMAT, 'myframework_%s');
         // Allow overriding of accessors
         $object->setAttribute(Doctrine_Core::ATTR_AUTO_ACCESSOR_OVERRIDE, true);
         // Enable auto loading of custom Doctrine_Table classes in addition to Doctrine_Record
         $object->setAttribute(Doctrine_Core::ATTR_AUTOLOAD_TABLE_CLASSES, true);
         // Set model loading strategy to conservative
         // see http://www.doctrine-project.org/documentation/manual/1_2/en/introduction-to-models#autoloading-models
         $object->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING, Doctrine_Core::MODEL_LOADING_CONSERVATIVE);
         //$object->setAttribute(Doctrine_Core::ATTR_MODEL_LOADING, Doctrine_Core::MODEL_LOADING_AGGRESSIVE);
         // enable dql hooks (used by Categorisable doctrine template)
         $object->setAttribute(Doctrine_Core::ATTR_USE_DQL_CALLBACKS, true);
         $object->registerHydrator(DoctrineUtil::HYDRATE_SINGLE_SCALAR_ARRAY, 'Zikula_Doctrine_Hydrator_SingleScalarArray');
         // tell doctrine our extended Doctrine_Query class (Doctrine_Query::create() returns a Zikula_Doctrine_Query instance)
         $object->setAttribute(Doctrine_Core::ATTR_QUERY_CLASS, 'Zikula_Doctrine_Query');
         return;
     }
     if ($object instanceof Doctrine_Connection) {
         // set connection options
         // fetch / hydration mode
         //            $object->setAttribute(Doctrine_Core::ATTR_FETCHMODE, Doctrine_Core::FETCH_ASSOC);
         //            $object->setAttribute(Doctrine_Core::ATTR_HYDRATE_OVERWRITE, Doctrine_Core::HYDRATE_RECORD);
         // default column options
         //            $object->setAttribute(Doctrine_Core::ATTR_DEFAULT_COLUMN_OPTIONS,
         //                                            array('type' => 'string',
         //                                                  'length' => 255,
         //                                                  'notnull' => true));
         // properties of default added primary key in models
         // %s is replaced with the table name
         //            $object->setAttribute(Doctrine_Core::ATTR_DEFAULT_IDENTIFIER_OPTIONS,
         //                                            array('name' => '%s_id',
         //                                                  'type' => 'string',
         //                                                  'length' => 16));
         return;
     } elseif ($object instanceof Doctrine_Table) {
         // set table options
         return;
     }
     //        throw new \Exception(get_class($object) . ' is not valid in configureDoctrine()');
 }
Exemplo n.º 12
0
 /**
  * Event listener for controller_api.method_not_found.
  *
  * @param GenericEvent $event Event.
  *
  * @return void
  */
 public function logModControllerAPINotFound(GenericEvent $event)
 {
     $this->_log[] = array('type' => Zikula_AbstractErrorHandler::EMERG, 'errstr' => 'Execute Controller API method failed: Method not found ' . get_class($event->getSubject()) . '->' . $event['method']);
 }
Exemplo n.º 13
0
 /**
  * Dynamically add menu links to administration for system services.
  *
  * Listens for 'module_dispatch.postexecute' events.
  *
  * @param GenericEvent $event The event handler.
  *
  * @return void
  */
 public function addServiceLink(GenericEvent $event)
 {
     // check if this is for this handler
     if (!($event['modfunc'][1] == 'getlinks' && $event['type'] == 'admin' && $event['api'] == true)) {
         return;
     }
     // notify EVENT here to gather any system service links
     $args = array('modname' => $event->getArg('modname'));
     $localevent = new GenericEvent($event->getSubject(), $args);
     $this->dispatcher->dispatch('module_dispatch.service_links', $localevent);
     $sublinks = $localevent->getData();
     if (!empty($sublinks)) {
         $event->data[] = array('url' => \ModUtil::url($event['modname'], 'admin', 'moduleservices'), 'text' => __('Services'), 'class' => 'z-icon-es-gears', 'links' => $sublinks);
     }
 }
Exemplo n.º 14
0
 public function registerRenderer(GenericEvent $event)
 {
     $event->getSubject()->append(new Renderer\FieldRow());
     $event->getSubject()->append(new Renderer\FieldLabel());
     $event->getSubject()->append(new Renderer\FieldErrors());
     $event->getSubject()->append(new Renderer\EmailWidget());
     $event->getSubject()->append(new Renderer\FieldWidget());
     $event->getSubject()->append(new Renderer\Attributes());
     $event->getSubject()->append(new Renderer\FieldEnctype());
     $event->getSubject()->append(new Renderer\FormWidget());
     $event->getSubject()->append(new Renderer\ContainerAttributes());
     $event->getSubject()->append(new Renderer\FieldRows());
     $event->getSubject()->append(new Renderer\FieldRest());
     $event->getSubject()->append(new Renderer\HiddenRow());
     $event->getSubject()->append(new Renderer\HiddenWidget());
     $event->getSubject()->append(new Renderer\CheckboxWidget());
     $event->getSubject()->append(new Renderer\ChoiceOptions());
     $event->getSubject()->append(new Renderer\ChoiceWidget());
     $event->getSubject()->append(new Renderer\DateWidget());
     $event->getSubject()->append(new Renderer\DatetimeWidget());
     $event->getSubject()->append(new Renderer\FormLabel());
     $event->getSubject()->append(new Renderer\IntegerWidget());
     $event->getSubject()->append(new Renderer\MoneyWidget());
     $event->getSubject()->append(new Renderer\NumberWidget());
     $event->getSubject()->append(new Renderer\PasswordWidget());
     $event->getSubject()->append(new Renderer\PercentWidget());
     $event->getSubject()->append(new Renderer\PrototypeRow());
     $event->getSubject()->append(new Renderer\RadioWidget());
     $event->getSubject()->append(new Renderer\RepeatedRow());
     $event->getSubject()->append(new Renderer\SearchWidget());
     $event->getSubject()->append(new Renderer\TextareaWidget());
     $event->getSubject()->append(new Renderer\TimeWidget());
     $event->getSubject()->append(new Renderer\UrlWidget());
     $event->getSubject()->append(new Renderer\FormErrors());
 }
Exemplo n.º 15
0
 public static function moduleservices(GenericEvent $event)
 {
     // check if this is for this handler
     $subject = $event->getSubject();
     if (!($event['method'] == 'moduleservices' && strrpos(get_class($subject), '_Controller_Admin'))) {
         return;
     }
     $moduleName = $subject->getName();
     if (!SecurityUtil::checkPermission($moduleName . '::', '::', ACCESS_ADMIN)) {
         throw new \Zikula\Framework\Exception\ForbiddenException();
     }
     $view = Zikula_View::getInstance('Extensions', false);
     $view->assign('currentmodule', $moduleName);
     // notify EVENT here to gather any system service links
     $localevent = new GenericEvent($subject, array('modname' => $moduleName));
     EventUtil::dispatch('module_dispatch.service_links', $localevent);
     $sublinks = $localevent->getData();
     $view->assign('sublinks', $sublinks);
     $event->setData($view->fetch('HookUi/moduleservices.tpl'));
     $event->stopPropagation();
 }