Addition of files
This commit is contained in:
392
system/class.comments-users.php
Normal file
392
system/class.comments-users.php
Normal file
@@ -0,0 +1,392 @@
|
||||
<?php
|
||||
/*
|
||||
| Snicker The first native FlatFile Comment Plugin 4 Bludit
|
||||
| @file ./system/class.comments-users.php
|
||||
| @author SamBrishes <sam@pytes.net>
|
||||
| @version 0.1.2 [0.1.0] - Alpha
|
||||
|
|
||||
| @website https://github.com/pytesNET/snicker
|
||||
| @license X11 / MIT License
|
||||
| @copyright Copyright © 2019 SamBrishes, pytesNET <info@pytes.net>
|
||||
*/
|
||||
if(!defined("BLUDIT")){ die("Go directly to Jail. Do not pass Go. Do not collect 200 Cookies!"); }
|
||||
|
||||
class CommentsUsers extends dbJSON{
|
||||
/*
|
||||
| DATABASE FIELDS
|
||||
*/
|
||||
protected $dbFields = array(
|
||||
"username" => "", // Username
|
||||
"email" => "", // User eMail Address
|
||||
"hash" => "", // Hashed IP + User Agent
|
||||
"blocked" => false, // Blocked?
|
||||
"comments" => array() // Page UIDs => array(CommentUIDs)
|
||||
);
|
||||
|
||||
/*
|
||||
| CONSTRUCTOR
|
||||
| @since 0.1.0
|
||||
*/
|
||||
public function __construct(){
|
||||
parent::__construct(DB_SNICKER_USERS);
|
||||
if(!file_exists(DB_SNICKER_USERS)){
|
||||
$this->db = array();
|
||||
$this->save();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
| GET COMMENTS BY UNIQUE USER ID
|
||||
| @since 0.1.0
|
||||
|
|
||||
| @param string The unique user ID as string (or the user eMail address).
|
||||
| @param bool TRUE to just return the keys, FALSE to return it as Comment objects.
|
||||
|
|
||||
| @return multi The comment keys / objects as ARRAY, FALSE on failure.
|
||||
*/
|
||||
public function getComments($uuid, $keys = true){
|
||||
global $Snicker;
|
||||
|
||||
// Validate Data
|
||||
if(Valid::email($uuid) !== false){
|
||||
$uuid = md5(strtolower(Sanitize::email($uuid)));
|
||||
}
|
||||
if(!array_key_exists($uuid, $this->db)){
|
||||
return false;
|
||||
}
|
||||
|
||||
// Return Keys
|
||||
$data = $this->db[$uuid]["comments"];
|
||||
if($keys === true){
|
||||
return $data;
|
||||
}
|
||||
|
||||
// Return Objects
|
||||
foreach($data AS &$key){
|
||||
$key = $Snicker->getComment($key);
|
||||
}
|
||||
return $key;
|
||||
}
|
||||
|
||||
/*
|
||||
| EXISTS
|
||||
| @since 0.1.0
|
||||
*/
|
||||
public function exists($uid){
|
||||
return isset($this->db[$uid]);
|
||||
}
|
||||
|
||||
/*
|
||||
| GET USER BY UUID
|
||||
| @since 0.1.0
|
||||
|
|
||||
| @param string The unique user ID as string (or the user eMail address).
|
||||
|
|
||||
| @return multi The user database array on success, FALSE on failure.
|
||||
*/
|
||||
public function get($uuid){
|
||||
if(Valid::email($uuid) !== false){
|
||||
$uuid = md5(strtolower(Sanitize::email($uuid)));
|
||||
}
|
||||
if(!array_key_exists($uuid, $this->db)){
|
||||
return false;
|
||||
}
|
||||
$data = $this->db[$uuid];
|
||||
$data["uuid"] = $uuid;
|
||||
return $data;
|
||||
}
|
||||
|
||||
/*
|
||||
| GET CURRENT USER ID
|
||||
| @since 0.1.0
|
||||
|
|
||||
| @return multi The user UUID on success, FALSE on failure.
|
||||
*/
|
||||
public function getCurrent(){
|
||||
global $security;
|
||||
$hash = md5($security->getUserIp() . $_SERVER["HTTP_USER_AGENT"]);
|
||||
foreach($this->db AS $uuid => $fields){
|
||||
if($fields["hash"] === $hash){
|
||||
return $uuid;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
| GET USER
|
||||
| @since 0.1.0
|
||||
|
|
||||
| @param string Get the user by Comment Author STRING.
|
||||
|
|
||||
| @return multi The user data array on success, FALSE on failure.
|
||||
*/
|
||||
public function getByString($string){
|
||||
global $users;
|
||||
|
||||
// Check User Instance
|
||||
if(strpos($string, "bludit::") === 0){
|
||||
$username = substr($string, strlen("bludit::"));
|
||||
if($users->exists($username)){
|
||||
$user = $users->getUserDB($username);
|
||||
$user["username"] = $user["nickname"];
|
||||
return $user;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check Guest Instance
|
||||
if(strpos($string, "guest::") === 0){
|
||||
$uuid = substr($string, strlen("guest::"));
|
||||
if($this->exists($uuid)){
|
||||
return $this->db[$uuid];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Return as Anonymous
|
||||
return array(
|
||||
"username" => "Anonymous",
|
||||
"email" => "anonymous@" . $_SERVER["SERVER_NAME"]
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
| GET LIST
|
||||
| @since 0.1.0
|
||||
|
|
||||
| @param string The string to be searched or NULL.
|
||||
| @param int The current comment page number, starting with 1.
|
||||
| @param int The number of comments to be shown per page.
|
||||
|
|
||||
| @return array The respective user keys with an ARRAY or FALSE on failure.
|
||||
*/
|
||||
public function getList($search = null, $page = 1, $limit = -1){
|
||||
if($search !== null){
|
||||
$list = array();
|
||||
foreach($this->db AS $uuid => $fields){
|
||||
if(stripos($fields["username"], $search) === false){
|
||||
continue;
|
||||
}
|
||||
if(stripos($fields["email"], $search) === false){
|
||||
continue;
|
||||
}
|
||||
$list[$uuid] = $fields;
|
||||
}
|
||||
} else {
|
||||
$list = $this->db;
|
||||
}
|
||||
|
||||
// Limit
|
||||
if($limit == -1){
|
||||
return $list;
|
||||
}
|
||||
|
||||
// Offset
|
||||
$offset = $limit * ($page - 1);
|
||||
$count = min(($offset + $limit - 1), count($list));
|
||||
if($offset < 0 || $offset > $count){
|
||||
return false;
|
||||
}
|
||||
return array_slice($list, $offset, $limit, true);
|
||||
}
|
||||
|
||||
/*
|
||||
| MAIN USER HANDLER
|
||||
| @since 0.1.0
|
||||
|
|
||||
| @param string The username as STRING.
|
||||
| @param string The email address as STRING.
|
||||
|
|
||||
| @return multi The (new) UUID on success, FALSE on failure.
|
||||
*/
|
||||
public function user($username, $email){
|
||||
global $security;
|
||||
|
||||
// Validate Username
|
||||
$username = Sanitize::html(strip_tags(trim($username)));
|
||||
if(empty($username) || strlen($username) > 42){
|
||||
return false;
|
||||
}
|
||||
|
||||
// Validate eMail Address
|
||||
$email = strtolower(Sanitize::email($email));
|
||||
if(empty($email) || Valid::email($email) === false){
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check User
|
||||
$uuid = md5($email);
|
||||
if(array_key_exists($uuid, $this->db)){
|
||||
return $uuid;
|
||||
}
|
||||
|
||||
// Add User
|
||||
$this->db[$uuid] = array(
|
||||
"username" => $username,
|
||||
"email" => $email,
|
||||
"hash" => md5($security->getUserIp() . $_SERVER["HTTP_USER_AGENT"]),
|
||||
"blocked" => false,
|
||||
"comments" => array()
|
||||
);
|
||||
if(!$this->save()){
|
||||
return false;
|
||||
}
|
||||
return $uuid;
|
||||
}
|
||||
public function add($username, $email, $meta = array()){
|
||||
return $this->user($username, $email, $meta);
|
||||
}
|
||||
|
||||
/*
|
||||
| EDIT USER DATA
|
||||
| @since 0.1.0
|
||||
|
|
||||
| @param string The unique user ID as string (or the user eMail address).
|
||||
| @param multi The new username (or NULL to keep the existing one).
|
||||
| @param multi The new eMail address (or NULL to keep the existing one).
|
||||
| ATTENTION: The new eMail address CANNOT be used already!
|
||||
| ATTENTION: The new eMail address CHANGES the unique user id (UUID)!
|
||||
| @param multi TRUE to block the user, FALSE to unblock, null to keep the current.
|
||||
|
|
||||
| @return multi The (new) UUID on success, FALSE on failure.
|
||||
*/
|
||||
public function edit($uuid, $username = null, $email = null, $blocked = null){
|
||||
if(Valid::email($uuid) !== false){
|
||||
$uuid = md5(strtolower(Sanitize::email($uuid)));
|
||||
}
|
||||
if(!array_key_exists($uuid, $this->db)){
|
||||
return false;
|
||||
}
|
||||
$data = $this->db[$uuid];
|
||||
|
||||
// Change Username
|
||||
if($username !== null){
|
||||
$username = Sanitize::html(strip_tags(trim($username)));
|
||||
if(empty($username) || strlen($username) > 42){
|
||||
return false;
|
||||
}
|
||||
$data["username"] = $username;
|
||||
}
|
||||
|
||||
// Change eMail
|
||||
if($email !== null){
|
||||
$email = strtolower(Sanitize::email($uuid));
|
||||
if(Valid::email($email) === false){
|
||||
return false;
|
||||
}
|
||||
$data["email"] = $email;
|
||||
$newuuid = md5($email);
|
||||
}
|
||||
|
||||
// Change Blocked
|
||||
if(is_bool($blocked)){
|
||||
$data["blocked"] = $blocked;
|
||||
}
|
||||
|
||||
// Update UUID
|
||||
if(isset($newuuid) && $uuid !== $newuuid){
|
||||
unset($this->db[$uuid]);
|
||||
$uuid = $newuuid;
|
||||
}
|
||||
|
||||
// Store new Data
|
||||
$this->db[$uuid] = $data;
|
||||
if(!$this->save()){
|
||||
return false;
|
||||
}
|
||||
return $uuid;
|
||||
}
|
||||
|
||||
/*
|
||||
| ADD COMMENT ID TO USER
|
||||
| @since 0.1.0
|
||||
|
|
||||
| @param string The unique user ID as string (or the user eMail address).
|
||||
| @param string The unique comment ID as STRING.
|
||||
|
|
||||
| @return bool TRUE on success, FALSE on failure.
|
||||
*/
|
||||
public function addComment($uuid, $uid){
|
||||
if(Valid::email($uuid) !== false){
|
||||
$uuid = md5(strtolower(Sanitize::email($uuid)));
|
||||
}
|
||||
if(!array_key_exists($uuid, $this->db)){
|
||||
return false;
|
||||
}
|
||||
|
||||
// Add Comment UID
|
||||
$user = $this->db[$uuid];
|
||||
if(!isset($user["comments"]) || !is_array($user["comments"])){
|
||||
$user["comments"] = array();
|
||||
}
|
||||
if(!in_array($uid, $user["comments"])){
|
||||
$user["comments"][] = $uid;
|
||||
}
|
||||
|
||||
// Save & Return
|
||||
$this->db[$uuid] = $user;
|
||||
if(!$this->save()){
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
| DELETE COMMENT ID TO USER
|
||||
| @since 0.1.0
|
||||
|
|
||||
| @param string The unique user ID as string (or the user eMail address).
|
||||
| @param string The unique comment ID as STRING.
|
||||
|
|
||||
| @return bool TRUE on success, FALSE on failure.
|
||||
*/
|
||||
public function deleteComment($uuid, $uid){
|
||||
if(Valid::email($uuid) !== false){
|
||||
$uuid = md5(strtolower(Sanitize::email($uuid)));
|
||||
}
|
||||
if(!array_key_exists($uuid, $this->db)){
|
||||
return false;
|
||||
}
|
||||
|
||||
// Delete Comment UID
|
||||
$user = $this->db[$uuid];
|
||||
if(!isset($user["comments"])){
|
||||
$user["comments"] = array();
|
||||
}
|
||||
if(in_array($uid, $user["comments"])){
|
||||
unset($user["comments"][array_search($uid, $user["comments"])]);
|
||||
}
|
||||
|
||||
// Save & Return
|
||||
$this->db[$uuid] = $user;
|
||||
if(!$this->save()){
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
| DELETE USER
|
||||
| @since 0.1.0
|
||||
|
|
||||
| @param string The unique user ID as string (or the user eMail address).
|
||||
|
|
||||
| @return bool TRUE on success, FALSE on failure.
|
||||
*/
|
||||
public function delete($uuid){
|
||||
if(Valid::email($uuid) !== false){
|
||||
$uuid = md5(strtolower(Sanitize::email($uuid)));
|
||||
}
|
||||
if(!array_key_exists($uuid, $this->db)){
|
||||
return false;
|
||||
}
|
||||
|
||||
// Delete & Return
|
||||
unset($this->db[$uuid]);
|
||||
if(!$this->save()){
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user