Open Journal Systems  3.3.0
PKPNotificationSettingsForm.inc.php
1 <?php
20 import('lib.pkp.classes.form.Form');
21 
26  function __construct() {
27  parent::__construct('user/notificationSettingsForm.tpl');
28 
29  // Validation checks for this form
30  $this->addCheck(new FormValidatorPost($this));
31  $this->addCheck(new FormValidatorCSRF($this));
32  }
33 
37  function readInputData() {
38  $userVars = array();
39  foreach($this->getNotificationSettingsMap() as $notificationSetting) {
40  $userVars[] = $notificationSetting['settingName'];
41  $userVars[] = $notificationSetting['emailSettingName'];
42  }
43 
44  $this->readUserVars($userVars);
45  }
46 
51  protected function getNotificationSettingsMap() {
52  $result = array(
53  NOTIFICATION_TYPE_SUBMISSION_SUBMITTED => array('settingName' => 'notificationSubmissionSubmitted',
54  'emailSettingName' => 'emailNotificationSubmissionSubmitted',
55  'settingKey' => 'notification.type.submissionSubmitted'),
56  NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_REQUIRED => array('settingName' => 'notificationEditorAssignmentRequired',
57  'emailSettingName' => 'emailNotificationEditorAssignmentRequired',
58  'settingKey' => 'notification.type.editorAssignmentTask'),
59  NOTIFICATION_TYPE_METADATA_MODIFIED => array('settingName' => 'notificationMetadataModified',
60  'emailSettingName' => 'emailNotificationMetadataModified',
61  'settingKey' => 'notification.type.metadataModified'),
62  NOTIFICATION_TYPE_REVIEWER_COMMENT => array('settingName' => 'notificationReviewerComment',
63  'emailSettingName' => 'emailNotificationReviewerComment',
64  'settingKey' => 'notification.type.reviewerComment'),
65  NOTIFICATION_TYPE_NEW_QUERY => array('settingName' => 'notificationNewQuery',
66  'emailSettingName' => 'emailNotificationNewQuery',
67  'settingKey' => 'notification.type.queryAdded'),
68  NOTIFICATION_TYPE_QUERY_ACTIVITY => array('settingName' => 'notificationQueryActivity',
69  'emailSettingName' => 'emailNotificationQueryActivity',
70  'settingKey' => 'notification.type.queryActivity'),
71  NOTIFICATION_TYPE_NEW_ANNOUNCEMENT => array('settingName' => 'notificationNewAnnouncement',
72  'emailSettingName' => 'emailNotificationNewAnnouncement',
73  'settingKey' => 'notification.type.newAnnouncement'),
74  NOTIFICATION_TYPE_EDITORIAL_REPORT => array('settingName' => 'notificationEditorialReport',
75  'emailSettingName' => 'emailNotificationEditorialReport',
76  'settingKey' => 'notification.type.editorialReport')
77  );
78 
79  HookRegistry::call(strtolower_codesafe(get_class($this) . '::getNotificationSettingsMap'), array($this, &$result));
80 
81  return $result;
82  }
83 
90  $result = array(
91  // Changing the `categoryKey` for public notification types will disrupt
92  // the email notification opt-in/out feature during user registration
93  // @see RegistrationForm::execute()
94  array('categoryKey' => 'notification.type.public',
95  'settings' => array(
96  NOTIFICATION_TYPE_NEW_ANNOUNCEMENT,
97  )
98  ),
99  array('categoryKey' => 'notification.type.submissions',
100  'settings' => array(
101  NOTIFICATION_TYPE_SUBMISSION_SUBMITTED,
102  NOTIFICATION_TYPE_EDITOR_ASSIGNMENT_REQUIRED,
103  NOTIFICATION_TYPE_METADATA_MODIFIED,
104  NOTIFICATION_TYPE_NEW_QUERY,
105  NOTIFICATION_TYPE_QUERY_ACTIVITY,
106  )
107  ),
108  array('categoryKey' => 'notification.type.reviewing',
109  'settings' => array(
110  NOTIFICATION_TYPE_REVIEWER_COMMENT,
111  )
112  ),
113  array('categoryKey' => 'user.role.editors',
114  'settings' => array(
115  NOTIFICATION_TYPE_EDITORIAL_REPORT,
116  )
117  ),
118  );
119 
120  HookRegistry::call(strtolower_codesafe(get_class($this) . '::getNotificationSettingCategories'), array($this, &$result));
121 
122  return $result;
123  }
124 
128  function fetch($request, $template = null, $display = false) {
129  $context = $request->getContext();
130  $contextId = $context ? $context->getId() : CONTEXT_ID_NONE;
131  $userId = $request->getUser()->getId();
132  $notificationSubscriptionSettingsDao = DAORegistry::getDAO('NotificationSubscriptionSettingsDAO'); /* @var $notificationSubscriptionSettingsDao NotificationSubscriptionSettingsDAO */
133  $templateMgr = TemplateManager::getManager($request);
134  $templateMgr->assign(array(
135  'blockedNotifications' => $notificationSubscriptionSettingsDao->getNotificationSubscriptionSettings('blocked_notification', $userId, $contextId),
136  'emailSettings' => $notificationSubscriptionSettingsDao->getNotificationSubscriptionSettings('blocked_emailed_notification', $userId, $contextId),
137  'notificationSettingCategories' => $this->getNotificationSettingCategories(),
138  'notificationSettings' => $this->getNotificationSettingsMap(),
139  ));
140  return parent::fetch($request, $template, $display);
141  }
142 
146  function execute(...$functionParams) {
147  parent::execute(...$functionParams);
148 
149  $request = Application::get()->getRequest();
150  $user = $request->getUser();
151  $userId = $user->getId();
152  $context = $request->getContext();
153  $contextId = $context ? $context->getId() : CONTEXT_ID_NONE;
154 
155  $blockedNotifications = array();
156  $emailSettings = array();
157  foreach($this->getNotificationSettingsMap() as $settingId => $notificationSetting) {
158  // Get notifications that the user wants blocked
159  if(!$this->getData($notificationSetting['settingName'])) $blockedNotifications[] = $settingId;
160  // Get notifications that the user wants to be notified of by email
161  if($this->getData($notificationSetting['emailSettingName'])) $emailSettings[] = $settingId;
162  }
163 
164  $notificationSubscriptionSettingsDao = DAORegistry::getDAO('NotificationSubscriptionSettingsDAO'); /* @var $notificationSubscriptionSettingsDao NotificationSubscriptionSettingsDAO */
165  $notificationSubscriptionSettingsDao->updateNotificationSubscriptionSettings('blocked_notification', $blockedNotifications, $userId, $contextId);
166  $notificationSubscriptionSettingsDao->updateNotificationSubscriptionSettings('blocked_emailed_notification', $emailSettings, $userId, $contextId);
167 
168  return true;
169  }
170 }
171 
172 
PKPNotificationSettingsForm
Form to edit notification settings.
Definition: PKPNotificationSettingsForm.inc.php:22
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKPNotificationSettingsForm\getNotificationSettingCategories
getNotificationSettingCategories()
Definition: PKPNotificationSettingsForm.inc.php:89
PKPNotificationSettingsForm\fetch
fetch($request, $template=null, $display=false)
Definition: PKPNotificationSettingsForm.inc.php:128
Form\readUserVars
readUserVars($vars)
Definition: Form.inc.php:378
PKPNotificationSettingsForm\execute
execute(... $functionParams)
Definition: PKPNotificationSettingsForm.inc.php:146
Form\getData
getData($key)
Definition: Form.inc.php:220
FormValidatorPost
Form validation check to make sure the form is POSTed.
Definition: FormValidatorPost.inc.php:18
PKPNotificationSettingsForm\getNotificationSettingsMap
getNotificationSettingsMap()
Definition: PKPNotificationSettingsForm.inc.php:51
PKPNotificationSettingsForm\__construct
__construct()
Definition: PKPNotificationSettingsForm.inc.php:26
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
strtolower_codesafe
strtolower_codesafe($str)
Definition: functions.inc.php:280
Form\addCheck
addCheck($formValidator)
Definition: Form.inc.php:395
FormValidatorCSRF
Form validation check to make sure the CSRF token is correct.
Definition: FormValidatorCSRF.inc.php:18
Form
Class defining basic operations for handling HTML forms.
Definition: Form.inc.php:47
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
PKPNotificationSettingsForm\readInputData
readInputData()
Definition: PKPNotificationSettingsForm.inc.php:37