* @link https://TheTempusProject.com * @license https://opensource.org/licenses/MIT [MIT LICENSE] */ namespace TheTempusProject\Models; use TheTempusProject\Bedrock\Functions\Check; use TheTempusProject\Bedrock\Classes\Config; use TheTempusProject\Canary\Canary as Debug; use TheTempusProject\Bedrock\Classes\CustomException; use TheTempusProject\Classes\DatabaseModel; use TheTempusProject\TheTempusProject as App; use TheTempusProject\Plugins\Bugtracker as Plugin; class Bugtracker extends DatabaseModel { public $tableName = 'bugs'; public $databaseMatrix = [ [ 'userID', 'int', '11' ], [ 'time', 'int', '10' ], [ 'title', 'varchar', '128' ], [ 'status', 'varchar', '64' ], [ 'description', 'text', '' ], [ 'image', 'varchar', '256' ], [ 'repeatable', 'varchar', '5' ], [ 'url', 'varchar', '256' ], ]; public $plugin; /** * The model constructor. */ public function __construct() { parent::__construct(); $this->plugin = new Plugin; } /** * This function parses the bug reports description and * separates it into separate keys in the array. * * @param array $data - The data being parsed. * * @return array */ public function filter( $data, $params = [] ) { foreach ( $data as $instance ) { if ( !is_object( $instance ) ) { $instance = $data; $end = true; } $instance->submittedBy = self::$user->getUsername( $instance->userID ); $instance->repeatText = ( 'false' == $instance->repeatable ? 'no' : 'yes' ); $out[] = $instance; if ( !empty( $end ) ) { $out = $out[0]; break; } } return $out; } /** * Logs a Bug Report form. * * @param int $ID the user ID submitting the form * @param string $url the url * @param string $o_url the original url * @param int $repeat is repeatable? * @param string $description_ description of the event. * * @return null */ public function create( $ID, $url, $image, $repeat, $description, $title ) { if ( !$this->plugin->checkEnabled() ) { Debug::info( 'Bug Tracking is disabled in the config.' ); return false; } if ( !Check::dataTitle( $title ) ) { Debug::info( 'bugTracker: illegal title.' ); return false; } $fields = [ 'userID' => App::$activeUser->ID, 'time' => time(), 'title' => $title, 'status' => TRACKER_STATUS_NEW, 'description' => $description, 'image' => $image, 'repeatable' => $repeat, 'url' => $url, ]; if ( !self::$db->insert( $this->tableName, $fields ) ) { new CustomException( $this->tableName ); return false; } return self::$db->lastId(); } public function updateTracker( $ID, $url, $image, $repeat, $description, $title, $status ) { if ( !$this->plugin->checkEnabled() ) { Debug::info( 'Bug Tracking is disabled in the config.' ); return false; } if ( empty( self::$log ) ) { self::$log = new Log; } if ( !Check::id( $ID ) ) { Debug::info( 'bugTracker: illegal ID.' ); return false; } if ( !Check::dataTitle( $title ) ) { Debug::info( 'bugTracker: illegal title.' ); return false; } $fields = [ 'url' => $url, 'description' => $description, 'repeatable' => $repeat, 'title' => $title, 'status' => $status, ]; if ( !empty( $image ) ) { $fields['image'] = $image; } if ( !self::$db->update( $this->tableName, $ID, $fields ) ) { new CustomException( $this->tableName ); Debug::error( "Tracker Post: $ID not updated: $fields" ); return false; } self::$log->admin( "Updated Tracker Post: $ID" ); return true; } }