diff --git a/src/Model/Register.php b/src/Model/Register.php new file mode 100644 index 0000000000..e54db87a6b --- /dev/null +++ b/src/Model/Register.php @@ -0,0 +1,131 @@ + + */ +class Register +{ + /** + * Return the list of pending registrations + * + * @return array + */ + public static function getPending() + { + $stmt = DBA::p( + "SELECT `register`.*, `contact`.`name`, `user`.`email` + FROM `register` + INNER JOIN `contact` ON `register`.`uid` = `contact`.`uid` + INNER JOIN `user` ON `register`.`uid` = `user`.`uid`" + ); + + return DBA::toArray($stmt); + } + + /** + * Returns the pending registration count + * + * @return int + */ + public static function getPendingCount() + { + $register = DBA::fetchFirst( + "SELECT COUNT(*) AS `count` + FROM `register` + INNER JOIN `contact` ON `register`.`uid` = `contact`.`uid` AND `contact`.`self`" + ); + + return $register['count']; + } + + /** + * Returns the register record associated with the provided hash + * + * @param string $hash + * @return array + */ + public static function getByHash($hash) + { + return DBA::selectFirst('register', [], ['hash' => $hash]); + } + + /** + * Returns true if a register record exists with the provided hash + * + * @param string $hash + * @return boolean + */ + public static function existsByHash($hash) + { + return DBA::exists('register', ['hash' => $hash]); + } + + /** + * Creates a register record for an invitation and returns the auto-generated code for it + * + * @return string + */ + public static function createForInvitation() + { + $code = autoname(8) . srand(1000, 9999); + + $fields = [ + 'hash' => $code, + 'created' => DateTimeFormat::utcNow() + ]; + + DBA::insert('register', $fields); + + return $code; + } + + /** + * Creates a register record for approval and returns the success of the database insert + * Checks for the existence of the provided user id + * + * @param integer $uid The ID of the user needing approval + * @param string $language The registration language + * @param string $note An additional message from the user + * @return boolean + */ + public static function createForApproval($uid, $language, $note = '') + { + $hash = random_string(); + + if (!User::exists($uid)) { + return false; + } + + $fields = [ + 'hash' => $hash, + 'created' => DateTimeFormat::utcNow(), + 'uid' => $uid, + 'password' => '', // Obsolete, slated for deletion + 'language' => $language, + 'note' => $note + ]; + + return DBA::insert('register', $fields); + } + + /** + * Deletes a register record by the provided hash and returns the success of the database deletion + * + * @param string $hash + * @return boolean + */ + public static function deleteByHash($hash) + { + return DBA::delete('register', ['hash' => $hash]); + } +} diff --git a/src/Model/User.php b/src/Model/User.php index b61014b8a8..ddd6ce1ed6 100644 --- a/src/Model/User.php +++ b/src/Model/User.php @@ -31,6 +31,17 @@ require_once 'include/text.php'; */ class User { + /** + * Returns true if a user record exists with the provided id + * + * @param integer $uid + * @return boolean + */ + public static function exists($uid) + { + return DBA::exists('user', ['uid' => $uid]); + } + /** * @brief Returns the user id of a given profile url *