feat: Add comprehensive documentation suite and reorganize project structure

- Created complete documentation in docs/ directory
- Added PROJECT_OVERVIEW.md with feature highlights and getting started guide
- Added ARCHITECTURE.md with system design and technical details
- Added SECURITY.md with comprehensive security implementation guide
- Added DEVELOPMENT.md with development workflows and best practices
- Added DEPLOYMENT.md with production deployment instructions
- Added API.md with complete REST API documentation
- Added CONTRIBUTING.md with contribution guidelines
- Added CHANGELOG.md with version history and migration notes
- Reorganized all documentation files into docs/ directory for better organization
- Updated README.md with proper documentation links and quick navigation
- Enhanced project structure with professional documentation standards
This commit is contained in:
SamiAhmed7777
2025-10-21 00:39:45 -07:00
commit 0b7e2d0a5b
6080 changed files with 1332936 additions and 0 deletions

View File

@@ -0,0 +1,119 @@
<?php
/*******************************************************************************************************************
| Software Name : EasyStream
| Software Description : High End YouTube Clone Script with Videos, Shorts, Streams, Images, Audio, Documents, Blogs
| Software Author : (c) Sami Ahmed
|*******************************************************************************************************************
|
|*******************************************************************************************************************
| This source file is subject to the EasyStream Proprietary License Agreement.
|
| By using this software, you acknowledge having read this Agreement and agree to be bound thereby.
|*******************************************************************************************************************
| Copyright (c) 2025 Sami Ahmed. All rights reserved.
|*******************************************************************************************************************/
defined('_ISVALID') or header('Location: /error');
#[AllowDynamicProperties]
class VActivity
{
protected $db_track;
protected $db_table;
protected $where_f;
protected $where_v;
protected $where_vv;
protected $act;
protected $act_time;
protected $act_ip;
public function __construct($user_id, $user_id_to)
{
global $class_filter;
$this->db_track = 'db_trackactivity';
$this->db_table = 'db_useractivity';
$this->where_f = 'usr_id';
$this->where_v = (int) $user_id;
$this->where_vv = (int) $user_id_to;
$this->act = '';
$this->act_time = date("Y-m-d H:i:s");
$this->act_ip = $class_filter->clr_str($_SERVER[REM_ADDR]);
}
/* add activity to db */
public function addTo($act_type, $extra = '')
{
global $db, $class_filter, $class_database, $language;
$cfg = $class_database->getConfigurations('log_signin,log_signout,log_precovery,log_urecovery,log_pmessage,log_frinvite,log_subscribing,log_following,log_filecomment,log_upload,log_fav,log_delete,log_rating,log_responding');
$cfg['log_channelcomment'] = 1;
if ($cfg[$act_type] == 0) {return false;}
switch ($act_type) {
case "log_signin":
$this->act = 'sign in';
break;
case "log_signout":
$this->act = 'sign out';
break;
case "log_precovery":
$this->act = 'password recovery';
break;
case "log_urecovery":
$this->act = 'username recovery';
break;
case "log_pmessage":
$this->act = 'private message to ' . $extra;
break;
case "log_frinvite":
$this->act = 'friend invite to ' . $extra;
break;
case "log_subscribing":
$this->act = 'subscribes to ' . $extra;
break;
case "log_following":
$this->act = 'follows ' . $extra;
break;
case "log_filecomment":
$this->act = 'comments on ' . $extra;
break;
case "log_channelcomment":
$this->act = 'comments on ' . $extra;
break;
case "log_rating":
$this->act = $extra;
break;
case "log_upload":
$this->act = 'upload:' . $extra;
break;
case "log_fav":
$this->act = 'favorite:' . $extra;
break;
case "log_delete":
$this->act = 'delete:' . $extra;
break;
case "log_responding":
$this->act = 'response:' . $extra;
break;
}
$insert_array = array(
"usr_id" => $this->where_v,
"usr_id_to" => $this->where_vv,
"act_type" => $this->act,
"act_time" => $this->act_time,
"act_ip" => $this->act_ip,
);
$act_chk = $act_type == 'log_channelcomment' ? 'log_filecomment' : $act_type;
$do_logging = ($class_database->singleFieldValue($this->db_track, $act_chk, $this->where_f, $this->where_v) == 1) ? 1 : 0;
if ($do_logging == 1) {
$act_q = $db->execute(sprintf("SELECT `act_id` FROM `%s` WHERE `act_type`='%s' AND `usr_id`='%s' LIMIT 1;", $this->db_table, $this->act, intval($this->where_v)));
$act_check = $act_q->fields['act_id'];
$db_update = $act_check > 0 ? $db->execute(sprintf("UPDATE `db_useractivity` SET `act_time`='%s', `act_ip`='%s' WHERE `act_id`='%s' LIMIT 1;", date("Y-m-d H:i:s"), $this->act_ip, $act_check)) : $class_database->doInsert($this->db_table, $insert_array);
}
}
}