* @link https://TheTempusProject.com * @license https://opensource.org/licenses/MIT [MIT LICENSE] */ namespace TheTempusProject\Templates; use TheTempusProject\Houdini\Classes\Loader; use TheTempusProject\Houdini\Classes\Template; use TheTempusProject\Houdini\Classes\Views; use TheTempusProject\Houdini\Classes\Navigation; use TheTempusProject\Houdini\Classes\Components; use TheTempusProject\Bedrock\Classes\Config; use TheTempusProject\Bedrock\Functions\Input; use TheTempusProject\TheTempusProject as App; use Endroid\QrCode\Builder\Builder; use Endroid\QrCode\Encoding\Encoding; use Endroid\QrCode\ErrorCorrectionLevel; use Endroid\QrCode\Label\LabelAlignment; use Endroid\QrCode\Label\Font\OpenSans; use Endroid\QrCode\RoundBlockSizeMode; use Endroid\QrCode\Writer\PngWriter; use TheTempusProject\Hermes\Functions\Route as Routes; use TheTempusProject\Canary\Bin\Canary as Debug; class DefaultLoader extends Loader { private static $loaded = false; const TEMPLATE_NAME = 'Default Tempus Project Template'; const BOOTSTRAP_CDN = 'https://cdn.jsdelivr.net/npm/bootstrap@3.3.6/dist/'; const FONT_AWESOME_URL = 'https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/'; public function __construct() { if ( self::$loaded ) { return; } Components::set( 'DARK_MODE_SETTING', '' ); Components::set( 'TEMPLATE_URL', Template::parse( '{ROOT_URL}app/templates/default/' ) ); if ( VENDOR_AUTOLOADED === true ) { Components::set( 'FONT_AWESOME_URL', '/vendor/fortawesome/font-awesome/css/' ); Components::set( 'BOOTSTRAP_CDN', '/vendor/twbs/bootstrap/dist/' ); } else { Components::set( 'BOOTSTRAP_CDN', self::BOOTSTRAP_CDN ); Components::set( 'FONT_AWESOME_URL', self::FONT_AWESOME_URL ); } $this->addJs( '' ); Components::setIfNull( 'LOGO', Config::getValue( 'main/logo' ) ?? TP_DEFAULT_LOGO ); if ( ! empty( Config::getValue( 'share/enabled' ) ) ) { $currentUrl = Routes::getAddress() . Input::get( 'url' ); $folder = IMAGE_DIRECTORY . 'qr-codes' . DIRECTORY_SEPARATOR ; $filename = md5( $currentUrl ) . '.png'; if ( ! file_exists( $folder ) ) { Debug::Info( 'Creating Directory because it does not exist' ); mkdir( $folder, 0777, true ); } if ( ! empty( Config::getValue( 'share/qr' ) ) ) { if ( ! file_exists( $folder . $filename ) ) { Debug::Info( 'Creating qr-image because it does not exist' ); $builder = new Builder( writer: new PngWriter(), writerOptions: [], validateResult: false, data: Routes::getAddress() . Input::get( 'url' ), encoding: new Encoding('UTF-8'), errorCorrectionLevel: ErrorCorrectionLevel::High, size: 200, margin: 10, roundBlockSizeMode: RoundBlockSizeMode::Margin, logoPath: APP_ROOT_DIRECTORY . DIRECTORY_SEPARATOR . Config::getValue( 'main/logo' ), logoResizeToWidth: 30, logoPunchoutBackground: true, labelText: Config::getValue( 'main/name' ), labelFont: new OpenSans(14), labelAlignment: LabelAlignment::Center ); $result = $builder->build(); $result->saveToFile( $folder . $filename ); } Components::set( 'QR_CODE','QR Code' ); } else { Components::setIfNull( 'QR_CODE', '' ); } Components::setIfNull( 'SHARE_IMAGE', Views::simpleView( 'footer.share' ) ); } else { Components::setIfNull( 'SHARE_IMAGE', '' ); } if ( ! empty( Config::getValue( 'main/pwa' ) ) ) { Components::setIfNull( 'PWA', Views::simpleView( 'pwa') ); } else { Components::setIfNull( 'PWA', '' ); } Components::setIfNull( 'COPY', Views::simpleView( 'footer.copy') ); Components::setIfNull( 'SOCIAL', Views::simpleView( 'footer.social') ); Components::prepend( 'FOOTER_LEFT', Views::simpleView( 'footer.left', Navigation::getMenuLinks( App::CONTACT_FOOTER_MENU_NAME ) ) ); Components::prepend( 'FOOTER_CENTER', Views::simpleView( 'footer.center', Navigation::getMenuLinks( App::INFO_FOOTER_MENU_NAME ) ) ); Components::prepend( 'FOOTER_RIGHT', Views::simpleView( 'footer.right') ); Components::setIfNull( 'FOOT', Views::simpleView( 'footer.container') ); /** * Top-Nav */ if ( App::$isLoggedIn ) { if ( ! empty( App::$activePrefs['darkMode'] ) ) { Components::set( 'DARK_MODE_SETTING', 'true' ); $this->addCss( '' ); $this->addCss( '' ); } else { Components::set( 'DARK_MODE_SETTING', 'false' ); $this->addCss( '' ); $this->addCss( '' ); } Components::set( 'topNavRightDropdown', Template::parse( App::$topNavRightDropdown ) ); Components::set( 'STATUS', Views::simpleView( 'nav.statusLoggedIn' ) ); Components::set( 'USERNAME', \ucfirst( App::$activeUser->username ) ); Components::set( 'AVATAR', App::$activeUser->avatar ); } else { Components::set( 'STATUS', Views::simpleView( 'nav.statusLoggedOut' ) ); $this->addCss( '' ); $this->addCss( '' ); } Components::set( 'topNavRight', Template::parse( App::$topNavRight . '{STATUS}' ) ); $menu = Views::simpleView( 'nav.main', Navigation::getMenuLinks( App::MAIN_MENU_NAME ) ); $activeMenu = Navigation::activePageSelect( $menu, Input::get( 'url' ), false, true ); Components::set( 'topNavLeft', $activeMenu ); Components::set( 'colorSelect', Views::simpleView( 'forms.colorSelect' ) ); Components::set( 'iconSelect', Views::simpleView( 'forms.iconSelect' ) ); Navigation::setCrumbComponent( 'BREADCRUMB', Input::get( 'url' ) ); $this->buildComponents(); self::$loaded = true; } }