Open Monograph Press  3.3.0
UserApiHandler.inc.php
1 <?php
19 // import the base Handler
20 import('lib.pkp.classes.handler.PKPHandler');
21 
22 // import JSON class for API responses
23 import('lib.pkp.classes.core.JSONMessage');
24 
25 class UserApiHandler extends PKPHandler {
26 
27  //
28  // Implement template methods from PKPHandler
29  //
33  function authorize($request, &$args, $roleAssignments) {
34  import('lib.pkp.classes.security.authorization.PKPSiteAccessPolicy');
35  $this->addPolicy(new PKPSiteAccessPolicy(
36  $request,
37  array('updateUserMessageState', 'suggestUsername'),
38  SITE_ACCESS_ALL_ROLES
39  ));
40  return parent::authorize($request, $args, $roleAssignments);
41  }
42 
43 
44  //
45  // Public handler methods
46  //
54  function updateUserMessageState($args, $request) {
55  // Exit with a fatal error if request parameters are missing.
56  if (!(isset($args['setting-name'])) && isset($args['setting-value'])) {
57  fatalError('Required request parameter "setting-name" or "setting-value" missing!');
58  }
59 
60  // Retrieve the user from the session.
61  $user = $request->getUser();
62  assert(is_a($user, 'User'));
63 
64  // Validate the setting.
65  // FIXME: We don't have to retrieve the setting type (which is always bool
66  // for user messages) but only whether the setting name is valid and the
67  // value is boolean.
68  $settingName = $args['setting-name'];
69  $settingValue = $args['setting-value'];
70  $settingType = $this->_settingType($settingName);
71  switch($settingType) {
72  case 'bool':
73  if (!($settingValue === 'false' || $settingValue === 'true')) {
74  // Exit with a fatal error when the setting value is invalid.
75  fatalError('Invalid setting value! Must be "true" or "false".');
76  }
77  $settingValue = ($settingValue === 'true' ? true : false);
78  break;
79 
80  default:
81  // Exit with a fatal error when an unknown setting is found.
82  fatalError('Unknown setting!');
83  }
84 
85  // Persist the validated setting.
86  $userSettingsDao = DAORegistry::getDAO('UserSettingsDAO'); /* @var $userSettingsDao UserSettingsDAO */
87  $userSettingsDao->updateSetting($user->getId(), $settingName, $settingValue, $settingType);
88 
89  // Return a success message.
90  return new JSONMessage(true);
91  }
92 
93 
100  function suggestUsername($args, $request) {
101  $suggestion = Validation::suggestUsername(
102  $request->getUserVar('givenName'),
103  $request->getUserVar('familyName')
104  );
105 
106  return new JSONMessage(true, $suggestion);
107  }
108 
117  function _settingType($settingName) {
118  // Settings whitelist.
119  static $allowedSettings = array(
120  'citation-editor-hide-intro' => 'bool',
121  'citation-editor-hide-raw-editing-warning' => 'bool'
122  );
123 
124  // Identify the setting type.
125  if (isset($allowedSettings[$settingName])) {
126  return $allowedSettings[$settingName];
127  } else {
128  return null;
129  }
130  }
131 }
132 
133 
UserApiHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: UserApiHandler.inc.php:33
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
PKPHandler
Definition: PKPHandler.inc.php:17
UserApiHandler\suggestUsername
suggestUsername($args, $request)
Definition: UserApiHandler.inc.php:100
UserApiHandler
Class defining the headless AJAX API for backend user manipulation.
Definition: UserApiHandler.inc.php:25
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
UserApiHandler\updateUserMessageState
updateUserMessageState($args, $request)
Definition: UserApiHandler.inc.php:54
PKPHandler\addPolicy
addPolicy($authorizationPolicy, $addToTop=false)
Definition: PKPHandler.inc.php:157
fatalError
if(!function_exists('import')) fatalError($reason)
Definition: functions.inc.php:32
PKPSiteAccessPolicy
Class to that makes sure that a user is logged in.
Definition: PKPSiteAccessPolicy.inc.php:20
Validation\suggestUsername
static suggestUsername($givenName, $familyName=null)
Definition: Validation.inc.php:359
UserApiHandler\_settingType
_settingType($settingName)
Definition: UserApiHandler.inc.php:117