410 lines
8.9 KiB
PHP
410 lines
8.9 KiB
PHP
<?php
|
|
/**
|
|
* @package Joomla.Component.Builder
|
|
*
|
|
* @created 4th September, 2022
|
|
* @author Llewellyn van der Merwe <https://dev.vdm.io>
|
|
* @git Joomla Component Builder <https://git.vdm.dev/joomla/Component-Builder>
|
|
* @copyright Copyright (C) 2015 Vast Development Method. All rights reserved.
|
|
* @license GNU General Public License version 2 or later; see LICENSE.txt
|
|
*/
|
|
|
|
namespace VDM\Joomla\Componentbuilder\Compiler\Utilities;
|
|
|
|
|
|
use VDM\Joomla\Componentbuilder\Compiler\Builder\ContentOne as Content;
|
|
|
|
|
|
/**
|
|
* Compiler Utilities Counter
|
|
*
|
|
* @since 3.2.0
|
|
*/
|
|
class Counter
|
|
{
|
|
/**
|
|
* The folder counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
public int $folder = 0;
|
|
|
|
/**
|
|
* The file counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
public int $file = 0;
|
|
|
|
/**
|
|
* The page counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
public int $page = 0;
|
|
|
|
/**
|
|
* The line counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
public int $line = 0;
|
|
|
|
/**
|
|
* The field counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
public int $field = 0;
|
|
|
|
/**
|
|
* The access size
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
public int $accessSize = 0;
|
|
|
|
/**
|
|
* The seconds counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
protected int $seconds = 0;
|
|
|
|
/**
|
|
* The actual seconds counter
|
|
*
|
|
* @var float
|
|
* @since 3.2.0
|
|
*/
|
|
protected float $actualSeconds = 0;
|
|
|
|
/**
|
|
* The folder seconds counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
protected int $folderSeconds = 0;
|
|
|
|
/**
|
|
* The file seconds counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
protected int $fileSeconds = 0;
|
|
|
|
/**
|
|
* The line seconds counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
protected int $lineSeconds = 0;
|
|
|
|
/**
|
|
* The seconds debugging counter
|
|
*
|
|
* @var float
|
|
* @since 3.2.0
|
|
*/
|
|
protected float $secondsDebugging = 0;
|
|
|
|
/**
|
|
* The seconds planning counter
|
|
*
|
|
* @var float
|
|
* @since 3.2.0
|
|
*/
|
|
protected float $secondsPlanning = 0;
|
|
|
|
/**
|
|
* The seconds mapping counter
|
|
*
|
|
* @var float
|
|
* @since 3.2.0
|
|
*/
|
|
protected float $secondsMapping = 0;
|
|
|
|
/**
|
|
* The seconds office counter
|
|
*
|
|
* @var float
|
|
* @since 3.2.0
|
|
*/
|
|
protected float $secondsOffice = 0;
|
|
|
|
/**
|
|
* The total hours counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
protected int $totalHours = 0;
|
|
|
|
/**
|
|
* The debugging hours counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
protected int $debuggingHours = 0;
|
|
|
|
/**
|
|
* The planning hours counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
protected int $planningHours = 0;
|
|
|
|
/**
|
|
* The mapping hours counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
protected int $mappingHours = 0;
|
|
|
|
/**
|
|
* The office hours counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
protected int $officeHours = 0;
|
|
|
|
/**
|
|
* The actual Total Hours counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
protected int $actualTotalHours = 0;
|
|
|
|
/**
|
|
* The actual hours spent counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
protected int $actualHoursSpent = 0;
|
|
|
|
/**
|
|
* The actual days spent counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
protected int $actualDaysSpent = 0;
|
|
|
|
/**
|
|
* The total days counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
protected int $totalDays = 0;
|
|
|
|
/**
|
|
* The actual Total Days counter
|
|
*
|
|
* @var int
|
|
* @since 3.2.0
|
|
*/
|
|
protected int $actualTotalDays = 0;
|
|
|
|
/**
|
|
* The project week time counter
|
|
*
|
|
* @var float
|
|
* @since 3.2.0
|
|
*/
|
|
protected float $projectWeekTime = 0;
|
|
|
|
/**
|
|
* The project month time counter
|
|
*
|
|
* @var float
|
|
* @since 3.2.0
|
|
*/
|
|
protected float $projectMonthTime = 0;
|
|
|
|
/**
|
|
* The compiler start timer
|
|
*
|
|
* @var float
|
|
* @since 3.2.0
|
|
*/
|
|
protected float $start = 0;
|
|
|
|
/**
|
|
* The compiler end timer
|
|
*
|
|
* @var float
|
|
* @since 3.2.0
|
|
*/
|
|
protected float $end = 0;
|
|
|
|
/**
|
|
* The compiler timer
|
|
*
|
|
* @var float
|
|
* @since 3.2.0
|
|
*/
|
|
protected float $timer = 0;
|
|
|
|
/**
|
|
* The ContentOne Class.
|
|
*
|
|
* @var Content
|
|
* @since 3.2.0
|
|
*/
|
|
protected Content $content;
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @param Content $content The ContentOne Class.
|
|
*
|
|
* @since 3.2.0
|
|
*/
|
|
public function __construct(Content $content)
|
|
{
|
|
$this->content = $content;
|
|
}
|
|
|
|
/**
|
|
* Start the timer
|
|
*
|
|
* @return void
|
|
* @since 3.2.0
|
|
*/
|
|
public function start()
|
|
{
|
|
$this->start = microtime(true);
|
|
}
|
|
|
|
/**
|
|
* End the timer
|
|
*
|
|
* @return void
|
|
* @since 3.2.0
|
|
*/
|
|
public function end()
|
|
{
|
|
$this->end = microtime(true);
|
|
|
|
// calculate the lenght
|
|
$this->timer = $this->end - $this->start;
|
|
|
|
// compiler time
|
|
$this->content->set('COMPILER_TIMER_END', $this->end);
|
|
$this->content->set('COMPILER_TIMER', $this->timer);
|
|
}
|
|
|
|
/**
|
|
* Set all the time values
|
|
*
|
|
* @return void
|
|
* @since 3.2.0
|
|
*/
|
|
public function set()
|
|
{
|
|
// calculate all the values
|
|
$this->calculate();
|
|
|
|
// set some defaults
|
|
$this->content->set('LINE_COUNT', $this->line);
|
|
$this->content->set('FIELD_COUNT', $this->field);
|
|
$this->content->set('FILE_COUNT', $this->file);
|
|
$this->content->set('FOLDER_COUNT', $this->folder);
|
|
$this->content->set('PAGE_COUNT', $this->page);
|
|
$this->content->set('folders', $this->folderSeconds);
|
|
$this->content->set('foldersSeconds', $this->folderSeconds);
|
|
$this->content->set('files', $this->fileSeconds);
|
|
$this->content->set('filesSeconds', $this->fileSeconds);
|
|
$this->content->set('lines', $this->lineSeconds);
|
|
$this->content->set('linesSeconds', $this->lineSeconds);
|
|
$this->content->set('seconds', $this->actualSeconds);
|
|
$this->content->set('actualSeconds', $this->actualSeconds);
|
|
$this->content->set('totalHours', $this->totalHours);
|
|
$this->content->set('totalDays', $this->totalDays);
|
|
$this->content->set('debugging', $this->secondsDebugging);
|
|
$this->content->set('secondsDebugging', $this->secondsDebugging);
|
|
$this->content->set('planning', $this->secondsPlanning);
|
|
$this->content->set('secondsPlanning', $this->secondsPlanning);
|
|
$this->content->set('mapping', $this->secondsMapping);
|
|
$this->content->set('secondsMapping', $this->secondsMapping);
|
|
$this->content->set('office', $this->secondsOffice);
|
|
$this->content->set('secondsOffice', $this->secondsOffice);
|
|
$this->content->set('actualTotalHours', $this->actualTotalHours);
|
|
$this->content->set('actualTotalDays', $this->actualTotalDays);
|
|
$this->content->set('debuggingHours', $this->debuggingHours);
|
|
$this->content->set('planningHours', $this->planningHours);
|
|
$this->content->set('mappingHours', $this->mappingHours);
|
|
$this->content->set('officeHours', $this->officeHours);
|
|
$this->content->set('actualHoursSpent', $this->actualHoursSpent);
|
|
$this->content->set('actualDaysSpent', $this->actualDaysSpent);
|
|
$this->content->set('projectWeekTime', $this->projectWeekTime);
|
|
$this->content->set('projectMonthTime', $this->projectMonthTime);
|
|
|
|
// compiler time
|
|
$this->content->set('COMPILER_TIMER_START', $this->start);
|
|
}
|
|
|
|
/**
|
|
* Calculate all the time values
|
|
*
|
|
* @return void
|
|
* @since 3.2.0
|
|
*/
|
|
protected function calculate()
|
|
{
|
|
// what is the size in terms of an A4 book
|
|
$this->page = round($this->line / 56);
|
|
|
|
// setup the unrealistic numbers
|
|
$this->folderSeconds = $this->folder * 5;
|
|
$this->fileSeconds = $this->file * 5;
|
|
$this->lineSeconds = $this->line * 10;
|
|
$this->seconds = $this->folderSeconds + $this->fileSeconds
|
|
+ $this->lineSeconds;
|
|
$this->totalHours = round($this->seconds / 3600);
|
|
$this->totalDays = round($this->totalHours / 8);
|
|
|
|
// setup the more realistic numbers
|
|
$this->secondsDebugging = $this->seconds / 4;
|
|
$this->secondsPlanning = $this->seconds / 7;
|
|
$this->secondsMapping = $this->seconds / 10;
|
|
$this->secondsOffice = $this->seconds / 6;
|
|
$this->actualSeconds = $this->folderSeconds + $this->fileSeconds
|
|
+ $this->lineSeconds + $this->secondsDebugging
|
|
+ $this->secondsPlanning + $this->secondsMapping
|
|
+ $this->secondsOffice;
|
|
$this->actualTotalHours = round($this->actualSeconds / 3600);
|
|
$this->actualTotalDays = round($this->actualTotalHours / 8);
|
|
$this->debuggingHours = round($this->secondsDebugging / 3600);
|
|
$this->planningHours = round($this->secondsPlanning / 3600);
|
|
$this->mappingHours = round($this->secondsMapping / 3600);
|
|
$this->officeHours = round($this->secondsOffice / 3600);
|
|
|
|
// the actual time spent
|
|
$this->actualHoursSpent = $this->actualTotalHours - $this->totalHours;
|
|
$this->actualDaysSpent = $this->actualTotalDays - $this->totalDays;
|
|
|
|
// calculate the projects actual time frame of completion
|
|
$this->projectWeekTime = round($this->actualTotalDays / 5, 1);
|
|
$this->projectMonthTime = round($this->actualTotalDays / 24, 1);
|
|
}
|
|
}
|
|
|