Files
RTG/src/Shell/MemberDocumentTransferShell.php
2026-06-19 20:08:01 +06:00

570 lines
23 KiB
PHP

<?php
namespace App\Shell;
use Cake\Filesystem\File;
use cake\Filesystem\Folder;
use PhpOffice\PhpSpreadsheet\IOFactory;
class MemberDocumentTransferShell extends AppShell
{
public function initialize()
{
$this->loadModel('Cmsusers');
$this->loadModel('Clients');
$this->loadModel('Letters');
$this->loadModel('LetterExtras');
}
public function main()
{
$this->out('Start');
if(defined('APP_ROOT_TRANSFER') && APP_ROOT_TRANSFER){
$this->resourcesForMember();
}else {
$this->getListOfFiles();
}
$this->out('Resource Transfer Completed');
$this->out('End');
}
private function GetDirectorySize($path)
{
$bytestotal = 0;
$path = realpath($path);
if ($path !== false && $path != '' && file_exists($path)) {
foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path, \FilesystemIterator::SKIP_DOTS)) as $object) {
$bytestotal += $object->getSize();
}
}
return $bytestotal;
}
private function resourcesForMember()
{
$cli_logData['action'] = "MOVE_MEMBER_DOCUMENT";
$total_file_size = 0;
// $spreadsheet = IOFactory::load(WWW_ROOT . 'active_member.xlsx');
// $active_members = $spreadsheet->getActiveSheet()->toArray();
// $active_members = array_slice($active_members, 1);
$active_members = $this->getMember();
$member_logs = array();
foreach ($active_members as $member) {
$file_size = 0;
if (empty($member)) {
continue;
}
$size = [
'agreement_signed_content' => 0,
'agreenment_contents' => 0,
'certificates_pdf' => 0,
'chat_attachment' => 0,
'client_popup_content' => 0,
'client_agreement_files' => 0,
'contact_photo' => 0,
'credit_analysis_pdf' => 0,
'credit_analysis_template' => 0,
'email_queue' => 0, 'media' => 0,
'member_education_templates' => 0,
'member_email_attachment' => 0,
'member_email_template_attachment' => 0,
'member_email_template_body' => 0,
'member_help_templates' => 0,
'html_content' => 0,
'html_history_code' => 0,
'html_history_code_history_data' => 0,
'pdfletters_epic_velocity' => 0,
'pdfletters_super_rtg' => 0,
'pdfletters_velocity' => 0,
'pdfletters_zip' => 0,
'velocity' => 0,
'velocity_ringcentral' => 0,
'velocity_letterstream' => 0,
'epicvelocity_attachment' => 0,
'epicvelocity_printpdf' => 0,
'epicvelocity_letters_account' => 0,
'epicvelocity_letters_attachment' => 0,
'epicvelocity_clients_docs' => 0,
'epicvelocity_letter' => 0,
'rtg_letters_dropbox' => 0,
'rtg_letters_google_drive' => 0,
'rtg_letters_letterstream' => 0,
'rtg_letters_ringcentral' => 0,
'rtg_letters_zapier' => 0];
$cmsuser = $this->Cmsusers->find()
->where(['email' => $member])
->first();
$member_id = $cmsuser->id;
//agreement_signed_content/<member-id>
$size['agreement_signed_content'] = $size['agreement_signed_content'] + $this->transferDirectory('agreement_signed_content/', $member_id);
$file_size = $file_size + $size['agreement_signed_content'];
//agreenment_contents/<member-id>
$size['agreenment_contents'] = $size['agreenment_contents'] + $this->transferDirectory('agreenment_contents/', $member_id);
$file_size = $file_size + $size['agreenment_contents'];
//certificates/pdf/<member-id>
$size['certificates_pdf'] = $size['certificates_pdf'] + $this->transferDirectory('certificates/pdf/', $member_id);
$file_size = $file_size + $size['certificates_pdf'];
//chat_attachment/<member-id>
$size['chat_attachment'] = $size['chat_attachment'] + $this->transferDirectory('chat_attachment/', $member_id);
$file_size = $file_size + $size['chat_attachment'];
// client_agreement_files/<member-id>/
$size['client_agreement_files'] = $size['client_agreement_files'] + $this->transferDirectory('client_agreement_files/', $member_id);
$file_size = $file_size + $size['client_agreement_files'];
// client_popup_content/<member-id>/
$size['client_popup_content'] = $size['client_popup_content'] + $this->transferDirectory('client_popup_content/', $member_id);
$file_size = $file_size + $size['client_popup_content'];
// credit_analysis_pdf/<member-id>
$size['credit_analysis_pdf'] = $size['credit_analysis_pdf'] + $this->transferDirectory('credit_analysis_pdf/', $member_id);
$file_size = $file_size + $size['credit_analysis_pdf'];
// credit_analysis_template/Member/<member-id>
$size['credit_analysis_template'] = $size['credit_analysis_template'] + $this->transferDirectory('credit_analysis_template/Member/', $member_id);
$file_size = $file_size + $size['credit_analysis_template'];
//email_queue/<member-id>
$size['email_queue'] = $size['email_queue'] + $this->transferDirectory('email_queue/', $member_id);
$file_size = $file_size + $size['email_queue'];
//media/companies/<member-id>
$size['media'] = $size['media'] + $this->transferDirectory('media/companies/', $member_id);
$file_size = $file_size + $size['media'];
//member_education_templates/<member-id>
$size['member_education_templates'] = $size['member_education_templates'] + $this->transferDirectory('member_education_templates/', $member_id);
$file_size = $file_size + $size['member_education_templates'];
//member_email_attachment/<member-id>
$size['member_email_attachment'] = $size['member_email_attachment'] + $this->transferDirectory('member_email_attachment/', $member_id);
$file_size = $file_size + $size['member_email_attachment'];
//member_email_template_attachment/<member-id>
$size['member_email_template_attachment'] = $size['member_email_template_attachment'] + $this->transferDirectory('member_email_template_attachment/', $member_id);
$file_size = $file_size + $size['member_email_template_attachment'];
//member_email_template_body/<member-id>
$size['member_email_template_body'] = $size['member_email_template_body'] + $this->transferDirectory('member_email_template_body/', $member_id);
$file_size = $file_size + $size['member_email_template_body'];
//member_help_templates/<member-id>
$size['member_help_templates'] = $size['member_help_templates'] + $this->transferDirectory('member_help_templates/', $member_id);
$file_size = $file_size + $size['member_help_templates'];
//html_content/<member-id>
$size['html_content'] = $size['html_content'] + $this->transferDirectory('html_content/', $member_id);
$file_size = $file_size + $size['html_content'];
//html_history_code/<member-id>
$size['html_history_code'] = $size['html_history_code'] + $this->transferDirectory('html_history_code/', $member_id);
$file_size = $file_size + $size['html_history_code'];
//html_history_code/history_data/<member-id>
$size['html_history_code_history_data'] = $size['html_history_code_history_data'] + $this->transferDirectory('html_history_code/history_data/', $member_id);
$file_size = $file_size + $size['html_history_code_history_data'];
//pdfletters/Epic Velocity/<member-id>
$size['pdfletters_epic_velocity'] = $size['pdfletters_epic_velocity'] + $this->transferDirectory('pdfletters/Epic Velocity/', $member_id);
$file_size = $file_size + $size['pdfletters_epic_velocity'];
//pdfletters/Super RTG/<member-id>
$size['pdfletters_super_rtg'] = $size['pdfletters_super_rtg'] + $this->transferDirectory('pdfletters/Super RTG/', $member_id);
$file_size = $file_size + $size['pdfletters_super_rtg'];
//pdfletters/Velocity/<member-id>
$size['pdfletters_velocity'] = $size['pdfletters_velocity'] + $this->transferDirectory('pdfletters/Velocity/', $member_id);
$file_size = $file_size + $size['pdfletters_super_rtg'];
//pdfletters/zip/<member-id>
$size['pdfletters_zip'] = $size['pdfletters_zip'] + $this->transferDirectory('pdfletters/zip/', $member_id);
$file_size = $file_size + $size['pdfletters_zip'];
//velocity/<member-id>
$size['velocity'] = $size['velocity'] + $this->transferDirectory('velocity/', $member_id);
$file_size = $file_size + $size['velocity'];
//velocity/ringcentral/<member-id>
$size['velocity_ringcentral'] = $size['velocity_ringcentral'] + $this->transferDirectory('velocity/ringcentral/', $member_id);
$file_size = $file_size + $size['velocity_ringcentral'];
//velocity/letterstream/<member-id>
$size['velocity_letterstream'] = $size['velocity_letterstream'] + $this->transferDirectory('velocity/letterstream/', $member_id);
$file_size = $file_size + $size['velocity_letterstream'];
// epicvelocity/letters/attachment/<member-id>/
$size['epicvelocity_attachment'] = $size['epicvelocity_attachment'] + $this->transferDirectory('epicvelocity/letters/attachment/', $member_id);
$file_size = $file_size + $size['epicvelocity_attachment'];
//epicvelocity/printpdf/<member-id>
$size['epicvelocity_printpdf'] = $size['epicvelocity_printpdf'] + $this->transferDirectory('epicvelocity/printpdf/', $member_id);
$file_size = $file_size + $size['epicvelocity_printpdf'];
// epicvelocity/letters/account/<member-id>
$size['epicvelocity_letters_account'] = $size['epicvelocity_letters_account'] + $this->transferDirectory('epicvelocity/letters/account/', $member_id);
$file_size = $file_size + $size['epicvelocity_letters_account'];
//epicvelocity/clients_docs/<html_file_path>
$letterExtras = $this->LetterExtras->find()->where(['cmsuser_id' => $member_id])->toArray();
if (!empty($letterExtras)) {
foreach ($letterExtras as $letterExtra) {
if (!empty($letterExtra->html_file_path)) {
$size['epicvelocity_clients_docs'] = $size['epicvelocity_clients_docs'] + $this->calculateDirectorySize(WWW_ROOT . "epicvelocity/clients_docs/" . $letterExtra->html_file_path);
$this->transferFile('epicvelocity/clients_docs/', $letterExtra->html_file_path);
$file_size = $file_size + $size['epicvelocity_clients_docs'];
}
}
}
//epicvelocity/letter/<zip_file>
$letters = $this->Letters->find()->where(['cmsuser_id' => $member_id])->toArray();
if (!empty($letters)) {
foreach ($letters as $letter) {
$size['epicvelocity_letter'] = $size['epicvelocity_letter'] + $this->calculateDirectorySize(WWW_ROOT . "epicvelocity/letters/" . $letter->zip_file);
$this->transferFile('epicvelocity/letter/', $letter->zip_file);
$file_size = $file_size + $size['epicvelocity_letter'];
}
}
//rtg_letters/dropbox/<member-id>
$size['rtg_letters_dropbox'] = $size['rtg_letters_dropbox'] + $this->transferDirectory('rtg_letters/dropbox/', $member_id);
$file_size = $file_size + $size['rtg_letters_dropbox'];
//rtg_letters/google_drive/<member-id>
$size['rtg_letters_google_drive'] = $size['rtg_letters_google_drive'] + $this->transferDirectory('rtg_letters/google_drive/', $member_id);
$file_size = $file_size + $size['rtg_letters_google_drive'];
//rtg_letters/letterstream/<member-id>
$size['rtg_letters_letterstream'] = $size['rtg_letters_letterstream'] + $this->transferDirectory('rtg_letters/letterstream/', $member_id);
$file_size = $file_size + $size['rtg_letters_letterstream'];
//rtg_letters/ringcentral/<member-id>
$size['rtg_letters_ringcentral'] = $size['rtg_letters_ringcentral'] + $this->transferDirectory('rtg_letters/ringcentral/', $member_id);
$file_size = $file_size + $size['rtg_letters_ringcentral'];
//rtg_letters/zapier/<member-id>
$size['rtg_letters_zapier'] = $size['rtg_letters_zapier'] + $this->transferDirectory('rtg_letters/zapier/', $member_id);
$file_size = $file_size + $size['rtg_letters_zapier'];
$clients = $this->Clients->find()
->where(['cmsuser_id' => $cmsuser->id])
->toArray();
if (!empty($clients)) {
foreach ($clients as $client) {
$client_id = $client->id;
$member_id = $client->cmsuser_id;
if (empty($client)) {
continue;
}
$client->status = 4; // status 4 -- is deleted from db
// $this->Clients->save($client);
// contact_photo/<client-id>
$size['contact_photo'] = $size['contact_photo'] + $this->transferDirectory('contact_photo/', $client_id);
$file_size = $file_size + $size['contact_photo'];
}
}
$total_file_size = $total_file_size + $file_size;
$member_logs[$cmsuser->email] = ['member' => $member_id, 'files' => $size];
}
$cli_logData['data'] = $member_logs;
$cli_logData['total_file_size'] = $total_file_size;
$this->cronjobLog($cli_logData);
$this->out('Total Moved File Size In Bytes: ' . $total_file_size);
}
private function calculateDirectorySize($path)
{
$size = 0;
if (is_file($path) || is_dir($path)) {
try {
if (is_file($path)) {
$size = filesize($path);
}
if (is_dir($path)) {
$size = $this->GetDirectorySize($path);
}
} catch (\Exception $ex) {
}
}
return $size;
}
private function copyFolderContents($sourceFolder, $destinationFolder)
{
$size = 0;
$folder = new Folder($sourceFolder);
[$subfolders, $files] = $folder->read(true, true);
if (!is_dir($destinationFolder)) {
mkdir($destinationFolder, 0755, true);
}
foreach ($files as $file) {
$filePath = $sourceFolder . DS . $file;
$destinationPath = $destinationFolder . DS . $file;
$fileObj = new File($filePath);
$size += $fileObj->size();
if (SERVER == 1) {
$this->serverCommand($filePath, $destinationPath);
} else {
$fileObj->copy($destinationPath);
}
}
foreach ($subfolders as $subfolderName) {
$size += $this->copyFolderContents(
$sourceFolder . DS . $subfolderName,
$destinationFolder . DS . $subfolderName
);
}
return $size;
}
private function transferDirectory($root_dir, $target_dir)
{
if (empty($root_dir) || empty($target_dir)) {
return 0;
}
$source_path = SOURCE_DIRECTORY . $root_dir . DS . $target_dir;
$destination = DESTINATION_DIRECTORY . DS . $root_dir . DS . $target_dir;
if (!is_dir($source_path)) {
return 0;
}
$this->saveFolderPath($root_dir . DS . $target_dir);
return $this->copyFolderContents($source_path, $destination);
}
public function transferFile($dir, $file_name)
{
$message = 'Source file not found.';
$source_path = SOURCE_DIRECTORY . $dir . DS . $file_name;
$destination = DESTINATION_DIRECTORY . DS . $dir;
$destination_path = $destination . DS . $file_name;
$folder = new Folder($destination, true, 0755);
$file = new File($source_path);
if ($file->exists()) {
if (SERVER == 1) {
$this->serverCommand($source_path, $destination_path);
} else {
if ($file->copy($destination_path)) {
$message = 'File transferred successfully.';
} else {
$message = 'Failed to copy the file.';
}
}
}
$this->saveFilePath($dir . DS . $file_name);
return $message;
}
private function getListOfFiles()
{
$cli_logData['action'] = "MOVE_ROOT_DOCUMENT";
$source_dir_path = SOURCE_DIRECTORY;
$destination_dir_path = DESTINATION_DIRECTORY;
$folder = new Folder($source_dir_path);
list($directories, $files) = $folder->read();
new Folder($destination_dir_path, true, 0755);
$file_list = [];
foreach ($files as $key => $file) {
$sourceFile = new File($source_dir_path . $file);
$destinationFilePath = $destination_dir_path . $file;
$sourceFile->copy($destinationFilePath);
$file_list[$file] = ['source' => $destination_dir_path . $file, 'message' => "Done"];
}
$directory_list = [];
foreach ($directories as $key => $directory) {
$transfer = $this->transferFixedFolder($source_dir_path . $directory, $directory);
$directory_list[$directory] = ['destination' => $destination_dir_path . $directory, 'response' => $transfer];
}
$cli_logData['data'] = $directory_list;
$this->cronjobLog($cli_logData);
$this->out('Transfer Completed.');
}
private function transferFixedFolder($dir, $transfer_dir)
{
$transfer = [];
// if (!$this->memberFolderList($transfer_dir)) {
if ($this->webRootFolders($transfer_dir)) {
$source_path = SOURCE_DIRECTORY . DS . $transfer_dir;
$destination = DESTINATION_DIRECTORY . DS . $transfer_dir;
if (!is_dir($source_path)) {
return 0;
}
return $this->copyFolderContents($source_path, $destination);
}
return $transfer;
}
private function memberFolderList($value)
{
$source_dir_name = $value . '/';
$member_folder = ['agreement_signed_content/', 'agreenment_contents/', 'certificates/pdf/', 'chat_attachment/', 'client_agreement_files/',
'agreenment_contents/', 'certificates/', 'chat_attachment/', 'client_agreement_files/', 'client_popup_content/', 'credit_analysis_pdf/',
'credit_analysis_template/Member/', 'email_queue/', 'credit_analysis_template/',
'media/companies/', 'member_education_templates/', 'member_email_attachment/', 'member_email_template_attachment/',
'member_email_template_body/', 'member_help_templates/', "html_content/", "html_history_code/", "html_history_code/history_data/",
"pdfletters/", "pdfletters/Epic Velocity/", "pdfletters/Super RTG/", "pdfletters/Velocity/", "pdfletters/zip/", "velocity/", "velocity/ringcentral/",
"velocity/letterstream/", "epicvelocity/", "epicvelocity/letters/attachment/", 'rtg_letters/dropbox/', 'rtg_letters/google_drive/', 'rtg_letters/', 'rtg_letters/letterstream/',
'rtg_letters/ringcentral/', 'rtg_letters/zapier/', 'contact_photo/', 'epicvelocity/letter/', 'epicvelocity/clients_docs/'];
return in_array($source_dir_name, $member_folder);
}
private function serverCommand($source, $destination)
{
$command = "rsync -avz $source $destination";
exec($command, $output, $return_var);
}
private function saveFolderPath($path){
$fileName = 'folder_paths.txt';
$filePath = WWW_ROOT . DS . $fileName;
file_put_contents($filePath, $path. PHP_EOL, FILE_APPEND);
}
private function saveFilePath($path){
$fileName = 'file_paths.txt';
$filePath = WWW_ROOT . DS . $fileName;
file_put_contents($filePath, $path. PHP_EOL, FILE_APPEND);
}
private function webRootFolders($value)
{
$source_dir_name = $value . '/';
$webroot_folder = [
'AdminAccountImage/',
'GuestForms/',
'REST-Client/',
'RTG/',
'Redis/',
'V1.0/',
'V2.0/',
'V3.0/',
'admin_lte/',
'admin_RTG/',
'api/',
'attach-documents/',
'bootstrap/',
'build/',
'cmsuser_logo/',
'credit_analysis_default/',
'compiles/',
'cronjob/',
'css/',
'datepicker/',
'dist/',
'dropbox/',
'fonts/',
'forum/',
'images/',
'invoice-logo/',
'js/',
'loading/',
'magnify/',
'mpdf60/',
'new_layout/',
'payment_vendor/',
'pie-semi-chart/',
'plugins/',
'project-media-files/',
'rtgv3/',
'tshirts/',
'zapier/',
'user-photo/'
];
return in_array($source_dir_name, $webroot_folder);
}
private function getMember()
{
$emails = [
'tmoment09@gmail.com',
'tagee52283@aol.com',
'ashantitreasures@gmail.com',
'consumerresourcesolutions@gmail.com',
'carlos.montes33@gmail.com',
'bdawson92073@gmail.com',
'davidmauime@gmail.com',
'foster23jordan@gmail.com',
'kashem2003@gmail.com',
'dmiddleton@sagecredit-business.com',
'christine.dunn22@gmail.com',
'credithackerjim@gmail.com',
'aphifer2@aol.com',
'kevindbaskerville1@gmail.com',
'abrafinancialgroup@gmail.com',
'Barbra.gray@yahoo.com',
'dan@danhollis.com',
'brijetjordan@yahoo.com',
'carmansmith5@gmail.com',
'johnniesmith99@gmail.com',
'karenforbes2020@gmail.com',
'roguewesley@gmail.com',
'customerservice@eanddcreditconsultant.com',
'sau.tagaloa@gmail.com',
'tony@tonyscreditrepair.com',
'cpsjerry@gmail.com',
'2123inna@gmail.com',
'ARICBOST@GMAIL.COM',
'info@upgradefinancialservices.com',
'Don_millions@yahoo.com',
'dinah@dbeverly.com',
'wvalerie@swbell.net',
'maurice@gattenterprises.com',
'karinaferrer@creditrepairreno.com',
'support@m2cacademy.com',
'jesse@coachjmiller.com',
];
return $emails;
}
}