Fixed old ex project.

main
Robert 3 years ago
parent cc8e7529db
commit 0306ed3d68
  1. BIN
      public/assets/ex/fonts/JennaSue.ttf
  2. 21
      src/ex/cli_controllers/app/home_ctrl.php
  3. 50
      src/ex/controllers/app/home_ctrl.php
  4. 39
      src/ex/controllers/bills/notices_ctrl.php
  5. 14
      src/ex/controllers/cronjobs/daily_ctrl.php
  6. 57
      src/ex/inputs/app/home_in.php
  7. 37
      src/ex/logic/app/home_logic.php
  8. 80
      src/ex/models/app/home_model.php
  9. 57
      src/ex/outputs/app/home_out.php
  10. 43
      src/ex/outputs/bills/notices_out.php
  11. 15
      src/ex/routes/cli_routes.php
  12. 15
      src/ex/routes/routes.php
  13. 14
      src/ex/routes/test_routes.php
  14. 2
      src/ex/templates/main.php
  15. 23
      src/ex/test_controllers/app/first_ctrl.php
  16. 15
      src/ex/views/default/app/footer.php
  17. 12
      src/ex/views/default/app/home_index.php
  18. 19
      src/ex/views/default/app/name_demo.php
  19. 22
      src/ex/views/default/app/name_demo_post.php
  20. 124
      src/ex/views/default/bills/notice_of_late_payment_css.php
  21. 20
      src/ex/views/includes/bills/notice_of_late_payment_pdf.tpl

@ -0,0 +1,21 @@
<?php
declare(strict_types=1);
namespace prj\ex\cli_controllers\app;
class home_ctrl {
public function index() {
echo "Welcome to Index CLI...";
}
public function name_demo() {
echo "Name Demo CLI...";
}
public function test($id) {
echo "ID: $id";
}
}

@ -2,16 +2,14 @@
declare(strict_types=1); declare(strict_types=1);
namespace ex\controllers\app; namespace prj\ex\controllers\app;
class home_ctrl { class home_ctrl {
public $page_output;
// public function skip_default_error_handler() {}
public function index_cli() { echo "See: /ex/cronjobs/daily/index"; }
public function index() { public function index() {
$html = new \tts\html_document(); $html = new \tts\html_document();
$html->set_author("Robert Strutts, plus ME!");
$view = new \tts\view(); $view = new \tts\view();
$view->set('html', $html); $view->set('html', $html);
@ -22,29 +20,43 @@ class home_ctrl {
} }
public function name_demo() { public function name_demo() {
$input = \ex\inputs\app\home_in::name_demo(); $view = new \tts\view();
$view->set('html', new \tts\html_document());
$view->set_template('main');
$view->include("app/name_demo");
$view->render($this);
}
\tts\main\registry::set('db', \tts\main\registry::get('di')->get_service('db_mocker') ); // Grabs DB public function name_demo_post() {
$model = new \ex\models\app\home_model(\tts\main\registry::get('db')); \tts\main\registry::set('db', \tts\main\registry::get('di')->get_service('db_mocker') );
$model->init_name_demo_table(); // Create Table if NOT exists!
$model->populate(10); // INSERT 10 random rows of data
$model->save_new_user($input); // Save user from Users Request Data
$input['model'] = $model->get_users(); $input = \prj\ex\inputs\app\home_in::name_demo();
$output = \ex\outputs\app\home_out::name_demo($input); \prj\ex\logic\app\home_logic::name_demo($input);
//asd();
$html = new \tts\html_document(); $output = \prj\ex\outputs\app\home_out::name_demo($input);
$html->set_footer('<br/><br/><hr/>By BBV-Soft');
$view = new \tts\view(); $view = new \tts\view();
$view->set('html', $html); // set view's local variables $view->set('html', new \tts\html_document());
$view->set_template('main');
$view->set('output', $output); $view->set('output', $output);
$view->include("app/name_demo"); // Alias to add_view/set_view $view->set_template('main');
$view->include("app/name_demo_post");
$view->render($this); $view->render($this);
} }
public function test($id) {
\tts\common::real_time_output();
echo "bla $id";
echo PHP_EOL;
for ($i=0; $i<10;$i++){
echo $i;
echo str_pad('', 14960);
sleep(1);
}
}
public function error() { tts_broken_error(); } // Needed: To show Live Page for Broken Pages public function error() { tts_broken_error(); } // Needed: To show Live Page for Broken Pages
} }

@ -0,0 +1,39 @@
<?php
declare(strict_types=1);
namespace prj\ex\controllers\bills;
class notices_ctrl {
public $page_output;
public function late_payment() {
$view_as_pdf = true;
$output = \prj\ex\outputs\bills\notices_out::late_rent($view_as_pdf);
$html = new \tts\html_document();
$view = new \tts\view();
if (! $view_as_pdf) {
$view->set('html', $html);
$view->set_template('main');
}
$view->set('view_as_pdf', $view_as_pdf);
$view->set('template_assigns', $output);
$view->set('font_url', TTS_PROJECT_BASE_REF . 'assets/fonts/JennaSue.ttf');
if (! $view_as_pdf) {
$view->add_view('bills/notice_of_late_payment_css.php');
}
$view->add_view('bills/notice_of_late_payment_pdf.tpl');
$html_code = $view->fetch($this);
if (! $view_as_pdf) {
echo $html_code;
exit;
}
// Makes PDF output
\prj\ex\outputs\bills\notices_out::gen_pdf_for_late_payment($html_code);
}
}

@ -1,14 +0,0 @@
<?php
declare(strict_types=1);
namespace ex\controllers\cronjobs;
class daily_ctrl {
// public function skip_default_error_handler() {}
public function index_cli() {
echo "OKay!";
}
}

@ -2,31 +2,46 @@
declare(strict_types=1); declare(strict_types=1);
namespace ex\inputs\app; namespace prj\ex\inputs\app;
use \tts\INPUTS;
use \tts\FIELD_FILTER;
use \tts\HTML_FLAG;
use \tts\DB_FILTER;
use \tts\use_io as IO;
class home_in { class home_in {
/*
* Validation_rules: required, email, valid_email_domain,
* min, max, between, same, secure (password), alphanumeric
* number_range: X, X
* greater_than
* less_than
*/
public static function name_demo(): array { public static function name_demo(): array {
$safer_data = \tts\safer_io::sanitize([ \tts\safer_io::init_json(); // Staticly set JSON data if any
'first_name' =>
[ $required_post_string_field = new IO();
'input' => \tts\INPUTS::get, // Others: _post, _json (REQUIRED param) $required_post_string_field->input_type = INPUTS::post;
'skip_db' => false, // this is an Optional value (DEFAULT: false) $required_post_string_field->field_filter = FIELD_FILTER::raw_string;
'field' => \tts\FIELD_FILTER::raw, // Others: raw, (DEFAULT: string), email, url, float, int $required_post_string_field->escape_html = HTML_FLAG::escape;
'html' => \tts\HTML_FLAG::purify, // Others: strip, encode, purify, (DEFAULT: escape) $required_post_string_field->validation_rule = 'required|max: 75';
'rule' => 'required' // Others: email, valid_email_domain, $required_post_string_field->use_db_filter = DB_FILTER::OFF;
// min, max, between, same, secure (password), alphanumeric $required_post_string_field->skip_the_db = false;
],
'age' => $adult_post_int_age_field = new IO();
[ $adult_post_int_age_field->input_type = INPUTS::post;
'input' => \tts\INPUTS::get, $adult_post_int_age_field->field_filter = FIELD_FILTER::integer_number;
'field' => \tts\FIELD_FILTER::integer_number, $adult_post_int_age_field->validation_rule = 'greater_than: 18';
'rule' => 'greater_than: 18', //'number_range: 18, 24' $adult_post_int_age_field->validation_message = ['greater_than' => 'The %s must be an Adult over %d!'];
'message' => ['greater_than' => 'Must be an Adult!']
], return [
]); 'first_name' => $required_post_string_field,
'last_name' => $required_post_string_field,
return $safer_data; // Makes an Array of: fields, html, and errrors 'age' => $adult_post_int_age_field
];
} }
} }

@ -0,0 +1,37 @@
<?php
declare(strict_types=1);
namespace prj\ex\logic\app;
use \tts\safer_io as SafeIO;
class home_logic {
public static function name_demo(array & $input): void {
$model = new \prj\ex\models\app\home_model(\tts\main\registry::get('db'));
$submitted = true;
foreach(SafeIO::logic_sanitize($input) as $data) {
if (SafeIO::required_fields_were_NOT_all_submitted($data)) {
$submitted = false;
break;
}
}
$input['submitted'] = $submitted;
if ($submitted) {
$model->init_name_demo_table(); // Create Table if NOT exists!
$model->populate(10); // INSERT 10 random rows of data
$success = $model->save_new_user($input); // Save data from Request Data
$input['model'] = ($success===true) ?
$model->get_users(15) :
$model->get_users(0);
} else {
$input['model'] = $model->get_users(0);
}
}
}

@ -2,14 +2,34 @@
declare(strict_types=1); declare(strict_types=1);
namespace ex\models\app; namespace prj\ex\models\app;
class home_model { class home_model {
private $dbh; private $dbh;
private $name_demo_table = "test_names"; private $name_demo_table = "test_names";
private $db_helper;
public function __construct($dbh) { public function __construct($dbh) {
// \tts\exceptions\DB_Exception::$error_message = "Home Model Error";
$this->dbh = $dbh; $this->dbh = $dbh;
$this->db_helper = new \tts\database\help_save($this->dbh, $this->name_demo_table);
}
public function is_valid(array $data): bool {
return \tts\database\help_load::is_valid($data);
}
public function pre_save(): bool {
$missing = $this->db_helper->get_missing();
if (count($missing)) {
echo "Required fields not set " . implode(",", $missing) . "!";
return false;
}
if ($this->db_helper->dump_diff()) {
return false; // Opps forgot a field!
}
return true;
} }
public function init_name_demo_table(): void { public function init_name_demo_table(): void {
@ -19,7 +39,11 @@ class home_model {
`last_name` TEXT, `last_name` TEXT,
`age` INTEGER `age` INTEGER
)"; )";
try {
$this->dbh->query($create_table_sql); $this->dbh->query($create_table_sql);
} catch (\PDOException $e) {
echo \tts\exceptions\DB_Exception::customMessage($e, "Unable to make table!");
}
} }
public function populate($rows): void { public function populate($rows): void {
@ -27,45 +51,43 @@ class home_model {
$data = [ 'first_name' => \tts\arrays\mocking\rnd_names::get_first_names(), $data = [ 'first_name' => \tts\arrays\mocking\rnd_names::get_first_names(),
'last_name' => \tts\arrays\mocking\rnd_names::get_last_names(), 'last_name' => \tts\arrays\mocking\rnd_names::get_last_names(),
'age' => \tts\arrays\mocking\rnd_names::mock_age() ]; 'age' => \tts\arrays\mocking\rnd_names::mock_age() ];
try {
$dummy->add_dummy_data($this->name_demo_table, $rows, $data); $dummy->add_dummy_data($this->name_demo_table, $rows, $data);
} catch (\PDOException $e) {
echo \tts\exceptions\DB_Exception::customMessage($e, "Unable to populate table!");
}
} }
public function save_new_user(array $input): bool { public function get_member(string $member): ?string {
$db_helper = new \tts\database\help_save($this->dbh, $this->name_demo_table); return $this->db_helper->get_member($member);
}
$db_helper->set_member('last_name', "Manning"); // Needs this Missing field
$set = $db_helper->set_members_by_array($input); public function save_new_user(array $input): bool {
$set = $this->db_helper->set_members_by_generator($input);
if ($set === false) { if ($set === false) {
return false; // Found Validation issues in input return false; // Found Validation issues in input
} }
try {
$status = $db_helper->save($this); $status = $this->db_helper->save($this);
if ($status === $db_helper::successful_save) { } catch (\PDOException $e) {
return true; echo \tts\exceptions\DB_Exception::customMessage($e, "Unable to save changes!");
} }
return false; if ($status === $this->db_helper::successful_save) {
return true; // It saved
}
return false; // It did not save
} }
public function get_users(): array { public function get_users(int $number_of_users_to_get = 12): \Generator {
$sql = "SELECT * FROM {$this->name_demo_table} LIMIT 12"; if ($number_of_users_to_get === 0) {
return \tts\database\help_load::empty_generator();
}
try {
$sql = "SELECT * FROM {$this->name_demo_table} LIMIT {$number_of_users_to_get}";
$result = $this->dbh->query($sql); $result = $this->dbh->query($sql);
return $result->fetchAll(\PDO::FETCH_ASSOC); return \tts\database\help_load::pdo_fetch_lazy($result);
} catch (\PDOException $e) {
echo \tts\exceptions\DB_Exception::customMessage($e);
} }
/*
private function save(array $input) {
if ($input['errors']) {
return [];
} }
$insert_sql = "INSERT INTO `{$this->table}`"
. "(`first_name`, `last_name`, `age`)"
. " VALUES (:first_name, :last_name, :age)";
$r = $this->dbh->prepare($insert_sql);
$r->bindParam(':first_name', $input['fields']['first_name'], \PDO::PARAM_STR);
$r->bindValue(':last_name', "Manning", \PDO::PARAM_STR);
$r->bindParam(':age', $input['fields']['age'], \PDO::PARAM_INT);
$r->execute();
}
*/
} }

@ -2,41 +2,49 @@
declare(strict_types=1); declare(strict_types=1);
namespace ex\outputs\app; namespace prj\ex\outputs\app;
use \tts\safer_io as SafeIO;
class home_out { class home_out {
public static function name_demo(array $input): array { public static function name_demo(array & $input): array {
$ret['model'] = $input['model'];
unset($input['model']); // Free up some space
$age = $input['html']['age']; $submitted = $input['submitted'] ?? false;
$first_name = $input['html']['first_name']; if ($submitted) {
$html_output = [];
$errors = [];
foreach(SafeIO::html_escape_and_sanitize($input) as $html) {
$key = $html['name'] ?? "";
$html_output[$key] = $html['html'];
if ($first_name === "Chris") { if (\tts\common::get_count($html['errors'])) {
$more = "I think you will like this!"; $errors[$key] = $html['errors'][$key];
} else {
// Lets make a HyperLink as an Example for Chris
$more = "<a href=\"" . \tts\request::get_url(
"/app/home",
"name_demo", ['age'=>38,'first_name'=>"Chris"]
) . "\">See Chris</a>";
} }
}
$age = $html_output['age'] ?? 0;
$first_name = $html_output['first_name'] ?? "Unknown";
$last_name = $html_output['last_name'] ?? "Unknown";
if ($input['errors']) { $ret['main'] = (\tts\common::get_count($errors)) ? "" : "Hello, {$first_name} {$last_name}, you are {$age} years old!" . PHP_EOL;
$ret['main'] = $more; $ret['errors'] = $errors;
} else { } else {
$ret['main'] = "Hello {$first_name}, You are {$age} years old!" . PHP_EOL . $more; $ret['main'] = "Welcome";
$ret['errors'] = [];
} }
$ret['errors'] = $input['errors']; unset($input); // Free up some space
$ret['model'] = $input['model'];
return $ret; return $ret;
} }
public static function show_errors(array $errors): string { public static function show_errors(array $errors): string {
if ($errors) { if ($errors) {
$message = "Sorry, but we had the following errors: "; $message = "Please correct the following errors: ";
$i = 0; $i = 0;
foreach($errors as $error) { foreach($errors as $error) {
$i++; $i++;
@ -44,14 +52,17 @@ class home_out {
} }
return $message; return $message;
} }
return "Yeah, no errors were made!"; return ""; // No Errors to return here
} }
public static function show_user_details(array $input): void { public static function show_user_details(\Generator $input): void {
if (! count($input)) { if (! $input->current()) {
return; return; // No Data, so Bail here
} }
\tts\html::show_table(['ID', 'First Name', 'Last Name', 'Age'], $input); \tts\html::show_table_from_generator(
['ID', 'First Name', 'Last Name', 'Age'],
$input
);
} }
} }

@ -0,0 +1,43 @@
<?php
declare(strict_types=1);
namespace prj\ex\outputs\bills;
class notices_out {
public static function late_rent(bool $view_as_pdf): array {
$output['pdf'] = $view_as_pdf;
$output['entity'] = "ZXC99";
$output['full_name'] = "Robert Miller";
$output['address'] = "3030 Someplace Ave";
$output['address2'] = "Grand Rapids, MI 49503";
$output['past_due'] = "1139.00";
$output['paid'] = "200.00";
$output['todays_date'] = \tts\time_zones::convert_time_zone(array('format' => 'legal_date'));
$output['wrap'] = ($view_as_pdf) ? "" : 'class="non-pdf-paper-wrap"';
$output['apt'] = '208';
$output['signatures'] = [
['here' => 'Manager', 'name' => 'Mark Smith'],
['here' => 'Customer']
];
return $output;
}
public static function gen_pdf_for_late_payment(string $html_code): void {
$style_sheet = file_get_contents(\tts\site_helper::get_root() . \tts\site_helper::get_project() . 'views/default/bills/notice_of_late_payment_css.php');
require_once TTS_VENDOR . 'autoload.php';
$mpdf = new \Mpdf\Mpdf(['tempDir' => \tts\site_helper::get_root() . '/tmp/mpdf']); // chown www-data, chmod 775
$mpdf->AddFontDirectory(PROJECT_ASSETS_DIR . '/fonts');
$mpdf->fontdata['jennasue'] = ['R'=>"JennaSue.ttf"];
$mpdf->available_unifonts[] = 'jennasue';
$mpdf->AddFont('jennasue', 'R');
$mpdf->SetFont('jennasue');
$mpdf->WriteHTML($style_sheet,\Mpdf\HTMLParserMode::HEADER_CSS);
$mpdf->WriteHTML($html_code,\Mpdf\HTMLParserMode::HTML_BODY);
$mpdf->Output();
}
}

@ -0,0 +1,15 @@
<?php
declare(strict_types=1);
namespace prj\ex\routes;
use \tts\router as Router;
class cli_routes {
public static function get() {
Router::get('ex/example/{id}?', 'prj\ex\cli_controllers\app\home_ctrl@test');
//Router::route("ex/app/home/name_demo.html", "prj\ex\controllers\app\home_ctrl@name_demo");
}
}

@ -0,0 +1,15 @@
<?php
declare(strict_types=1);
namespace prj\ex\routes;
use \tts\router as Router;
class routes {
public static function get() {
Router::get('ex/example/{id}?', 'prj\ex\controllers\app\home_ctrl@test');
//Router::route("ex/app/home/name_demo.html", "prj\ex\controllers\app\home_ctrl@name_demo");
}
}

@ -0,0 +1,14 @@
<?php
declare(strict_types=1);
namespace prj\ex\routes;
use \tts\router as Router;
class test_routes {
public static function get() {
Router::get('ex/example/{id}?', 'prj\ex\test_controllers\app\first_ctrl@example');
}
}

@ -2,7 +2,7 @@
<html lang="en-US"> <html lang="en-US">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<base href="<?= PROJECT_ASSETS_BASE_REF; ?>/"/> <base href="<?= PROJECT_ASSETS_BASE_REF; ?>/">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="<?= $html->get_keywords(); ?>"> <meta name="keywords" content="<?= $html->get_keywords(); ?>">
<meta name="description" content="<?= $html->get_description(); ?>"> <meta name="description" content="<?= $html->get_description(); ?>">

@ -0,0 +1,23 @@
<?php
namespace prj\ex\test_controllers\app;
final class first_ctrl {
public function returns_true(): bool {
return true;
}
public function same(): bool {
return true;
}
public function not_same(): bool {
return false;
}
public function example($id) {
return $id;
}
}

@ -1,22 +1,25 @@
<?php <?php
declare(strict_types=1); declare(strict_types=1);
$AJAX_FOLDER = \tts\site_helper::get_project() . "/assets/ajax"; $AJAX_FOLDER = PROJECT_ASSETS_BASE_REF. "/ajax/";
const JS_CDN_FILES = [ const JS_CDN_FILES = [
"https://cdn.metroui.org.ua/v4/js/metro.min.js" => [], "https://cdn.metroui.org.ua/v4/js/metro.min.js" => [],
]; ];
const JS_TSR = [ "js/trouble_shooting_routes.js" =>[] ];
const JS_FILES = [ const JS_FILES = [
"js/testing.js" => [], "js/router_loader.js" => [],
"js/routes.js" => [],
]; ];
$JS = "tts_set_project(\"" . rtrim(\tts\site_helper::get_project(), '/') ."\");" . PHP_EOL; /* Set JS Error Handler */ $JS = "var ajax_folder = \"" . $AJAX_FOLDER . "\"" . PHP_EOL; /* assets AJAX foldername and path */
$JS .= "var ajax_folder = \"" . $AJAX_FOLDER . "\"" . PHP_EOL; /* assets AJAX foldername and path */
$JS .= "var debug = 1; /* Debug mode 1 = true */" . PHP_EOL; $JS .= "var debug = 1; /* Debug mode 1 = true */" . PHP_EOL;
$JS .= "function debug_print(msg) { if (debug === 1) console.log(msg); }" . PHP_EOL; $JS .= "function debug_print(msg) { if (debug === 1) console.log(msg); }" . PHP_EOL;
$JS .= \tts\assets::get_ajax_files(\tts\site_helper::get_root() . $AJAX_FOLDER . "/"); $JS .= \tts\assets::get_ajax_files(PROJECT_ASSETS_DIR . "/ajax/");
$html->add_to_javascript($JS); $html->add_to_javascript($JS);
$html->set_assets_from_array(JS_CDN_FILES, 'main_js', 'cdn'); $html->set_assets_from_array(JS_CDN_FILES, 'main_js', 'cdn');
//$html->set_assets_from_array(JS_FILES, 'main_js'); $html->set_assets_from_array(JS_TSR, 'js', 'assets');
$html->set_assets_from_array(JS_FILES, 'js', 'project');

@ -1,10 +1,16 @@
<h2>Welcome...to Example Codes</h2>
<?php <?php
declare(strict_types=1); declare(strict_types=1);
$route_name_demo = "app/home"; $route_name_demo = "app/home";
$method_name_demo = "name_demo"; $method_name_demo = "name_demo";
$route_late_rent = "bills/notices";
$method_late_rent = "late_payment";
?> ?>
<a href="<?= \tts\request::get_url($route_name_demo, $method_name_demo) ?>">View Name Demo</a> <h2>Welcome...to your Example Project</h2>
<a href="<?= \tts\request::get_url($route_name_demo, $method_name_demo) ?>">View Name Demo</a> <br/><br/>
<a href="<?= \tts\request::get_url($route_late_rent, $method_late_rent) ?>">View Late Payment Signing</a>

@ -1,16 +1,19 @@
<p>BLA BLA BLA okay...</p> <?php
<pre> declare(strict_types=1);
<?= $output['main'] ?> $route_name_demo = "app/home";
</pre> $method_name_demo_post = "name_demo_post";
?>
<?= \ex\outputs\app\home_out::show_errors($output['errors']) ?>
<br/><br/> <br/><br/>
<form> <form method="post" action="<?= \tts\request::get_url($route_name_demo, $method_name_demo_post) ?>">
<label for="fname">First Name: <input type="text" id="fname" name="first_name" size="15" /></label><br/> <label for="fname">First Name: <input type="text" id="fname" name="first_name" size="15" /></label><br/>
<label for="lname">Last Name: <input type="text" id="lname" name="last_name" size="15" /></label><br/>
<label for="age">Age: <input type="text" id="age" name="age" size="2" maxlength="2" /></label><br/> <label for="age">Age: <input type="text" id="age" name="age" size="2" maxlength="2" /></label><br/>
<input type="submit" /> <input type="submit" />
</form> </form>
<?= \ex\outputs\app\home_out::show_user_details($output['model']) ?> <br>
<hr>
<a href="<?= \tts\request::get_url("app/home", "index") ?>">Back to Main</a>

@ -0,0 +1,22 @@
<?php
declare(strict_types=1);
$route_name_demo = "app/home";
$method_name_demo = "name_demo";
?>
<a href="<?= \tts\request::get_url($route_name_demo, $method_name_demo) ?>">Back</a>
<p>BLA BLA BLA okay...</p>
<pre>
<?= $output['main'] ?>
</pre>
<?= \prj\ex\outputs\app\home_out::show_errors($output['errors']) ?>
<?= \prj\ex\outputs\app\home_out::show_user_details($output['model']) ?>
<br>
<hr>
<a href="<?= \tts\request::get_url($route_name_demo, $method_name_demo) ?>">Back</a>

@ -0,0 +1,124 @@
<?= ($view_as_pdf) ? '' : '<style type="text/css">'; ?>
.page {
width: 8.5in;
height: 11in;
margin: 0mm auto;
}
body {
font-family: FreeSans, sans-serif;
font-size: <?= ($view_as_pdf) ? '14px' : '16px'; ?>;
}
/* DivTable.com */
.divTable{
display: table;
}
.divTableRow {
display: table-row;
}
.divTableHeading {
display: table-header-group;
}
.divTableCell, .divTableHead {
display: table-cell;
}
.divTableHeading {
display: table-header-group;
font-weight: bold;
}
.divTableFoot {
display: table-footer-group;
font-weight: bold;
}
.divTableBody {
display: table-row-group;
}
/* End of DivTable */
.div-table-tr {
height: 35pt;
}
.table-tr {
height: 35pt;
}
.table-todays-date { font-weight: 500; }
.div-table-todays-date { font-weight: 500; }
.table-blank-td-space {
padding-left: 100px;
}
.div-table-blank-td-space {
padding-left: 100px;
}
.signers-table-fix {
font-size: 29pt;
height: 14pt;
line-height: 16px;
margin: 0;
}
.signers-div-table-fix {
font-size: 32pt;
height: 18pt;
line-height: 26px;
margin: 0;
}
.address {
max-width: 4in;
width: 3in;
margin-bottom: 2.5mm;
padding-bottom: 0.2mm;
border-bottom: 0.25mm solid #000000;
}
.late-notice {
font-size: 15pt;
text-transform: uppercase;
text-align: center;
}
.big-spaces {
padding-bottom: 0.75in;
}
.small-spaces {
padding-bottom: 0.45in;
}
.sign-here-line {
max-width: 3in;
width: 2.5in;
border-bottom: 0.25mm solid #000000;
}
.non-pdf-paper-wrap {
width: 80ch;
word-break: break-normal;
white-space: normal;
}
@font-face {
font-family: jennasue;
<?= (! $view_as_pdf) ? "src: url('".$font_url."');". PHP_EOL : PHP_EOL; ?>
}
.cursive {
font-family: jennasue;
font-style: normal;
font-variant: normal;
font-weight: 400;
}
.centered-text {
text-align:center;
}
<?= ($view_as_pdf) ? '' : '</style>';

@ -0,0 +1,20 @@
{% for sign in signatures %}
<table>
<tr class="table-tr">
<td class="table-todays-date"><u>{{ todays_date }}</u></td>
<td class="table-blank-td-space">&nbsp;</td>
<td class="sign-here-line cursive centered-text signers-table-fix">
{% unless sign.here == 'Tenant' %}
{{ sign.name }}
{% endunless %}
</td>
</tr>
<tr class="table-tr">
<td>Date</td>
<td class="table-blank-td-space">&nbsp;</td>
<td>{{ sign.here }}</td>
</tr>
</table>
<div class="small-spaces"></div>
{% endfor %}
Loading…
Cancel
Save