Compare commits

...

47 commits
2.5.0 ... main

Author SHA1 Message Date
Emmanuel ROY cbcb0eb22f Update for SAND app with APP STATE (OPEN CLOSED MAINTAINED) 2022-03-21 16:03:31 +01:00
Emmanuel ROY 10bc015688 Merge pull Github 2021-12-12 15:42:05 +01:00
Emmanuel ROY 8277707a22 Update of README 2021-12-12 15:34:36 +01:00
Emmanuel ROY 6d4e4f20f7 update README and caracters casse strtoupper tests 2021-07-13 16:53:36 +02:00
Emmanuel ROY 5d8dd0f702 update :
- README.md
2021-07-13 09:56:05 +02:00
Emmanuel ROY 61af7f0fcb update :
- README.md
2021-07-13 09:55:04 +02:00
Emmanuel ROY d69e72165d update :
- documentation
2021-07-12 16:10:05 +02:00
Emmanuel ROY 666a13f719 update :
- readme
2021-07-12 15:52:00 +02:00
Emmanuel ROY 73a505ce7b update :
- documentation markdown du framework
2021-07-12 15:35:54 +02:00
Emmanuel ROY 448f312b2e update :
- modification de la classe modular, pour l'intégration dans des templates propre des modules laravel et symfony (ne fonctionne qu'avec la version 4.4 pour l'instant)
2021-07-12 12:04:12 +02:00
Emmanuel ROY df0aeb1b80 update :
- ajout de l'action twig avec la page d'acceuil sous twig
 - ajout du chargement de modules symfony et laravel, fonctionne partiellement, pas d'inclusion du head et du footer du template body
 - modification des commandes et des skel pour l'installation automatique des modules symfony et laravel
2021-07-12 11:14:36 +02:00
Emmanuel ROY e55358c819 update : ajout de l'extension twig permettant de recalibrer l'application à la fois avec le moteur de rendu twig et blade, ici l'index peut être soit twig soit blade 2021-07-09 11:52:48 +02:00
Emmanuel ROY f8bcc15874 somme date build 2021-06-25 11:47:35 +02:00
Emmanuel ROY 108e5d7641 update session start en cas non authentification 2021-06-22 11:57:45 +02:00
Emmanuel ROY d8075c803b Adding SOME USEFULL COMMAND 2021-06-18 17:44:11 +02:00
Emmanuel ROY 7a3cf99bea Adding build structure for SAND FrameWork on version 3.8.0 2021-06-18 17:16:09 +02:00
Emmanuel ROY b725e80591 update build 2021-06-18 16:28:16 +02:00
Emmanuel ROY 4dd174ebbf update bin console command 2021-06-18 16:11:48 +02:00
Emmanuel ROY 58f6adb7ba update for compatibility ie11 2021-06-16 11:35:03 +02:00
Emmanuel ROY 037e2b0812 update:
- component and bin.php
2021-06-09 10:01:58 +02:00
Emmanuel ROY ae43c2e6bb update:
- bin.php frontal command
2021-06-09 09:53:51 +02:00
Emmanuel ROY fe77b35dcc fix some build fonctionnality 2021-06-09 09:14:01 +02:00
Emmanuel ROY 67ffc42769 update:
- build fonctionnality
2021-06-04 18:00:19 +02:00
Emmanuel ROY 23878bfe8e update:
- 3.6 version
2021-06-04 11:45:04 +02:00
Emmanuel ROY d7ab71841e update:
- amélioration modèle objet du MVC
 - ajout des paramètres en $_GET provenant de l'url
 - ajout de deux pages pour tester tout çà
2021-05-25 16:33:58 +02:00
Emmanuel ROY 22df2ca781 update:
- ajout et modification des pages skel de spa
 - ajout de l'envionnement sur l'affichage du layout
 - update de la commande page:add
 - ajout de la config pour les commands
 - modification du nom pour le fichier des defines
 - modification des namesapce pour les composants de commandes
 - modification du bin, gitignore, composer.json
2021-05-19 17:34:14 +02:00
Emmanuel ROY d4ae501192 update: added Environment session Object 2021-05-11 13:46:34 +02:00
Emmanuel ROY 99e7c9544c update: new version of bin.php 2021-05-05 09:57:54 +02:00
Emmanuel ROY aed63829d0 update :
- fix url root directory return
 - adding arguments to command bin.php
2021-04-22 10:44:29 +02:00
Emmanuel ROY a09f93cddc update: ajout et rangement des tests unitaire et fonctionnels GHERKIN, amélioration et rangement des commandes, ajout d'une documentation dans les docs, ajout du dossier build, ajout de l'api de génération de doc pdfs 2021-04-19 16:23:22 +02:00
Emmanuel ROY c238bfdcb3 ajout de la methode permettant de générer la suite de fibonnacci dans les objets de session, peut être utile pour crypter une clé 2021-03-18 12:14:44 +01:00
Emmanuel ROY 5dc8af450a update 3.2.4 2021-03-02 10:43:43 +01:00
Emmanuel ROY 42fde64f60 update 3.2.3 2021-02-23 17:29:46 +01:00
Emmanuel ROY 0d3b2ae752 update 3.2.2 2021-02-23 16:41:07 +01:00
Emmanuel ROY c341a9b84b Update 3.2.0 2021-02-23 15:28:23 +01:00
Emmanuel ROY 5be76d38f6 big update : session authentification guard, some exemaples and docs 2021-02-17 13:39:05 +01:00
Emmanuel ROY eb54203916 update: docs of commands 2021-02-10 14:16:03 +01:00
Emmanuel ROY 128e34d292 update: help of commands 2021-02-10 13:56:18 +01:00
Emmanuel ROY fd48ba3ce9 update: docs 2021-02-10 11:18:10 +01:00
Emmanuel ROY 4b94f3f6ea update: gitlist intégration update 2021-02-10 09:28:33 +01:00
Emmanuel ROY ffce2a8ca9 update: gitlist intégration 2021-02-10 09:05:08 +01:00
Emmanuel ROY fd3a86d68c update: docs 2021-02-09 17:14:24 +01:00
Emmanuel ROY 4a65e80938 update: magic quote deprecated
fix: absolute url rewrite
2021-02-09 16:16:26 +01:00
Emmanuel ROY 2b9d7af69f update: correction quelques erreurs et mise en place du fil d'ariane 2021-02-09 14:16:16 +01:00
Emmanuel ROY 297de5a303 update: default bdd base 2021-02-03 15:56:45 +01:00
Emmanuel ROY 4872d12d28 update: php config files to skeleton files 2021-02-03 15:53:32 +01:00
Emmanuel ROY c136b3beaf update composer.json 2021-02-03 09:49:11 +01:00
564 changed files with 113979 additions and 2988 deletions

12
.gitignore vendored
View file

@ -1,4 +1,14 @@
composer.lock
vendor
/vendor
.idea
.php_cs.cache
application/config/app-parameters.php
application/config/bdd-parameters.php
application/config/cas-authentification-config.php
application/config/hybrid-authentification-config.php
application/config/soap-constantes.php
application/config/console-parameters.php
application/include/vues/cache/*

View file

@ -1,27 +1,47 @@
# Modular Symfony Application
# SAND-FRAMEWORK for Modular-Applications
---
---
Cette architecture MVC Objet est composée d'un layout Blade (Laravel)
Les urls d'accès sont de type www.domain.tld/page/varname1/varvalue1/varname2/varvalue2/ ...
Cette architecture MVC Objet est composée d'un moteur de template (Blade ou Twig)
Afin de créer une nouvelle page vous devez instancier trois fichiers contenant diverses variables, dont voici les commandes:
Les urls d'accès sont de type www.domain.tld/le_nom_de_mapage/varname1/varvalue1/varname2/varvalue2/ ...
Afin de créer une nouvelle page vous devez instancier trois fichiers contenant diverses variables, dont voici les adresses:
"application > include > controlleurs > mapage.php" contenant:
> les commandes permettant de gérer un formulaire
> un ou plusieurs accès à la base de données
> les variables instanciées dans $templateData permettent l'affichage dans la vue blade
---
"application > include > modeles > mapage.model" contenant
>les variables spécifiques à la page de l'application exemple:
`application > include > controlleurs > le_nom_de_mapage.php` contenant:
- les commandes permettant de gérer un formulaire
- un ou plusieurs accès à la base de données
- des variables instanciées dans le tableau `$templateData` permettant l'affichage dans la vue blade ou twig
---
`application > include > modeles > le_nom_de_mapage.model` contenant
les variables spécifiques à la page de l'application. soit par exemple:
```
name : le nom de mapage
description : ma description pour les moteur de recherche
params : paramètre(s) supplémentaire(s)
name : le_nom_de_mapage
page_title : le title du head de la page html rendue
description : ma description pour les moteurs de recherche
engine : none
authentification : no
ariane : {acceuil, test d'acceuil}
arianelink : {index, le_nom_de_mapage}
paramsN : paramètre(s) supplémentaire(s)
```
"application > include > vues > view > mapage.blade.php contenant
> le layout blade a instancier
avec en plus de cela :
`engine : blade` pour un layout blade ou `engine : twig` pour un layout twig
pour les modules symfony, c'est un peu plus compliqué il faut instancier ces trois précédents fichiers en faisant appel la class Modular,
ne pas oublier de référencer le module dans le dossier modules > setup > registre.model
et faire correspondre le nom du dossier avec le registre, ici l'exemple est syf43.
---
`application > include > vues > view > le_nom_de_mapage.blade.php` contenant le layout `blade` a instancier
`application > include > vues > view > le_nom_de_mapage.html.twig` contenant le layout `twig` a instancier
> Vous pouvez aussi tout à fait utiliser la commande:
>
> `php console/bin.php page:add`
Pour les modules, c'est un peu plus compliqué : il faut instancier ces trois précédents fichiers en faisant appel la class Modular,
ne pas oublier de référencer le module dans le dossier modules > setup > registre.model, ajouter le dossier contenant le code du module
et faire correspondre le nom du controlleur frontal du module avec le registre.

View file

@ -1,5 +1,12 @@
<?php
/**
* Package MVC\Classe
* @author Emmanuel ROY
* @license MIT-licence (open source)
* @version 3.5
*/
namespace MVC\Classe;
class Application
@ -9,6 +16,8 @@ class Application
public $browser;
public $route;
public $controlleur;
public function __construct()
{
@ -17,22 +26,42 @@ class Application
$this->url = new Url($this->http->method, $this->browser->isAppRequest());
$dispacher = new Dispacher();
$this->route = $dispacher->route;
switch(APP_STATE) {
case "CLOSED":
case "MAINTAINED":
$this->route = null;
break;
case "OPEN":
if(\MVC\Classe\Application::is_under_update()) {
$this->route = null;
break;
}
default:
$dispacher = new Dispacher();
$this->route = $dispacher->route;
}
}
public function launch()
{
//on declare la session lors du chargement du controlleur,
// ainsi on instancie la page précédente et le javascript et le css asynchrone
\MVC\Object\Session::createAndTestSession();
$controlleur = new Controlleur($this);
$this->controlleur = new Controlleur($this);
//si la page n'est un controlleur d'action alors on affiche l'écran
if (!$this->url->page['control']) {
print($controlleur->vue->ecran);
print($this->controlleur->vue->ecran);
//si on affiche l'écran alors on vide les alertes de la session
\MVC\Object\Alert::remove();
}
}
public static function is_under_update(){
$ajh = new \DateTime('NOW');
$maintenance_begin = new \DateTime(MAINTENANCE_DATE_DEBUT);
$maintenance_fin = new \DateTime(MAINTENANCE_DATE_FIN);
if($maintenance_begin < $ajh && $ajh < $maintenance_fin) {
return true;
}else{
return false;
}
}
}

View file

@ -0,0 +1,38 @@
<?php
namespace MVC\Classe;
class Asynchonous
{
private $_css;
private $_javascript;
public function __construct()
{
$this->_css = "";
$this->_javascript = "";
}
public function addCss($code)
{
$this->_css .= "\n";
$this->_css .= $code;
}
public function addJs($code)
{
$this->_javascript .= "\n";
$this->_javascript .= $code;
}
public function printCss()
{
echo $this->_css;
}
public function printJs()
{
echo $this->_javascript;
}
}

View file

@ -6,7 +6,7 @@ class Bdd
{
public $bdd;
public function __construct($bdd = 'bdd1')
public function __construct($bdd = 'default')
{
switch ($bdd) {
case 'bdd1':
@ -24,11 +24,13 @@ class Bdd
public function faireSQLRequete($sql)
{
$sql = \MVC\Classe\Caracter::avoid_sql_injection($sql);
$req = $this->bdd->query($sql);
// Print Pdo::ERRORs
if (!$req && (ENV == 'TEST' || ENV == 'DEV')) {
if (!$req && (ENV == 'TEST' || ENV == 'DEVEL')) {
echo "\nPDO::errorInfo():\n";
print_r($this->bdd->errorInfo());
print_r($sql);
}
return $req;
}
@ -55,17 +57,44 @@ class Bdd
*/
public function faireBindRequete($sql, array $params = null)
{
$req = $this->bdd->prepare($sql);
if ($params) {
foreach ($params as $value) {
$req->bindParam($value[0], Caracter::normalise_ChaineDeCaracteres($value[1]), $value[2]);
try{
$req = $this->bdd->prepare($sql);
// cas de tests des variables qui lance une exception
//if(!$Allow) throw new Exception("Le format de l'isbn ne correspond pas au format attendu");
if ($params) {
foreach ($params as $value) {
$value[1] = Caracter::normalise_ChaineDeCaracteres($value[1]);
if($value[2] !== 'VALUE') {
$req->bindParam(':'.$value[0], $value[1], $value[2]);
}else{
$req->bindValue(':'.$value[0], $value[1]);
}
}
}
$req->execute();
}
$req->execute();
// Print Pdo::ERRORs
if (!$req && (ENV == 'TEST' || ENV == 'DEV')) {
echo "\nPDO::errorInfo():\n";
print_r($this->bdd->errorInfo());
catch(PDOException $pdo_e){
if (ENV == 'TEST' || ENV == 'DEVEL')
{
// Print Pdo::ERRORs
//Faire quelque choses en cas d'erreur PDO
echo "\nPDOException():\n";
print_r($this->bdd->errorInfo());
print_r($pdo_e);
print_r($sql);
}
}
catch(Exception $e){
if (ENV == 'TEST' || ENV == 'DEVEL') {
//Pour les autres erreurs faire autre chose
echo "\nException():\n";
print_r($this->bdd->errorInfo());
print_r($e);
print_r($sql);
}
}
//$req->closeCursor();
return $req;

View file

@ -15,6 +15,104 @@ class Browser
//Logger::addLog('http.browser',$this->user);
}
public static function get()
{
// Make case insensitive.
$t = strtolower($_SERVER['HTTP_USER_AGENT']);
// If the string *starts* with the string, strpos returns 0 (i.e., FALSE). Do a ghetto hack and start with a space.
// "[strpos()] may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE."
// http://php.net/manual/en/function.strpos.php
$t = " " . $t;
// Humans / Regular Users
if (strpos($t, 'opera') || strpos($t, 'opr/')) {
return 'Opera';
} elseif (strpos($t, 'edge')) {
return 'Edge';
} elseif (strpos($t, 'chrome')) {
return 'Chrome';
} elseif (strpos($t, 'safari')) {
return 'Safari';
} elseif (strpos($t, 'firefox')) {
return 'Firefox';
} elseif (strpos($t, 'msie') || strpos($t, 'trident/7')) {
return 'Internet Explorer';
}
}
public static function get_firefox_version() {
// Make case insensitive.
$t = strtolower($_SERVER['HTTP_USER_AGENT']);
// If the string *starts* with the string, strpos returns 0 (i.e., FALSE). Do a ghetto hack and start with a space.
// "[strpos()] may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE."
// http://php.net/manual/en/function.strpos.php
$t = " " . $t;
// Firefox Users
if (strpos($t, 'firefox')) {
preg_match('/rv:(.*)\)/', $_SERVER['HTTP_USER_AGENT'], $matches, PREG_OFFSET_CAPTURE);
if(isset($matches[1])) {
return intval($matches[1][0]);
}else{
return 'no-version';
}
}
return 'not-firefox';
}
public static function get_ip() {
// IP si internet partagé
if (isset($_SERVER['HTTP_CLIENT_IP'])) {
return $_SERVER['HTTP_CLIENT_IP'];
}
// IP derrière un proxy
elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
return $_SERVER['HTTP_X_FORWARDED_FOR'];
}
// Sinon : IP normale
else {
return (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '');
}
}
public static function get_os() {
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$os_platform = "Inconnu";
$os_array = array(
'/windows nt 10/i' => 'Windows 10',
'/windows nt 6.3/i' => 'Windows 8.1',
'/windows nt 6.2/i' => 'Windows 8',
'/windows nt 6.1/i' => 'Windows 7',
'/windows nt 6.0/i' => 'Windows Vista',
'/windows nt 5.2/i' => 'Windows Server 2003/XP x64',
'/windows nt 5.1/i' => 'Windows XP',
'/windows xp/i' => 'Windows XP',
'/windows nt 5.0/i' => 'Windows 2000',
'/windows me/i' => 'Windows ME',
'/win98/i' => 'Windows 98',
'/win95/i' => 'Windows 95',
'/win16/i' => 'Windows 3.11',
'/macintosh|mac os x/i' => 'Mac OS X',
'/mac_powerpc/i' => 'Mac OS 9',
'/linux/i' => 'Linux',
'/ubuntu/i' => 'Ubuntu',
'/iphone/i' => 'iPhone',
'/ipod/i' => 'iPod',
'/ipad/i' => 'iPad',
'/android/i' => 'Android',
'/blackberry/i' => 'BlackBerry',
'/webos/i' => 'Mobile'
);
foreach ($os_array as $regex => $value) {
if (preg_match($regex, $user_agent)) {
$os_platform = $value;
}
}
return $os_platform;
}
protected function get_browser_name()
{
@ -112,10 +210,22 @@ class Browser
public function isAppRequest()
{
if (preg_match('#App#', $this->user)) {
return true;
} else {
return false;
switch(APP_STATE) {
case "CLOSED":
case "MAINTAINED":
return false;
break;
case "OPEN":
if(\MVC\Classe\Application::is_under_update()) {
return false;
break;
}
default:
if (preg_match('#App#', $this->user)) {
return true;
} else {
return false;
}
}
}
}

View file

@ -14,11 +14,11 @@ class Caracter
public static function fp_stripslashes($str)
{
if (get_magic_quotes_gpc() == 1) {
/*if (get_magic_quotes_gpc() == 1) {
return stripslashes($str);
} else {
} else {*/
return $str;
}
/*}*/
}
public static function normalise_ChaineDeCaracteresUpload($chaine)
@ -28,11 +28,11 @@ class Caracter
public static function fp_addslashes($str)
{
if (get_magic_quotes_gpc() == 1) {
/*if (get_magic_quotes_gpc() == 1) {
return $str;
} else {
} else {*/
return addslashes($str);
}
/*}*/
}
public static function remplacerAccents($chaine)
@ -74,4 +74,54 @@ class Caracter
$chaine = str_replace('"', '&#34;', $chaine);
return $chaine;
}
public static function avoid_sql_injection($chaine){
$chaine = preg_replace("/`;--/", "", $chaine);
$chaine = preg_replace("/';--/", "", $chaine);
$chaine = preg_replace('/";--/', "", $chaine);
$chaine = preg_replace("/;--/", "", $chaine);
return $chaine;
}
public static function avoid_guillemets($chaine)
{
$chaine = str_replace("'", "", $chaine);
$chaine = str_replace('"', '', $chaine);
return $chaine;
}
public static function mettreEnMajusculeAccents($chaine, $trueAccent = false)
{
if (!$trueAccent) {
$chaine = str_replace('é', 'E', $chaine);
$chaine = str_replace('è', 'E', $chaine);
$chaine = str_replace('ë', 'E', $chaine);
$chaine = str_replace('ê', 'E', $chaine);
$chaine = str_replace('ç', 'C', $chaine);
$chaine = str_replace('Ç', 'C', $chaine);
$chaine = str_replace('à', 'A', $chaine);
// $chaine = str_replace('','&aeacute;',$chaine);
$chaine = str_replace('â', 'A', $chaine);
$chaine = str_replace('ä', 'A', $chaine);
$chaine = str_replace('î', 'I', $chaine);
$chaine = str_replace('ï', 'I', $chaine);
$chaine = str_replace('ù', 'U', $chaine);
$chaine = str_replace('û', 'U', $chaine);
$chaine = str_replace('ü', 'U', $chaine);
} else {
$chaine = str_replace('é', 'É', $chaine);
$chaine = str_replace('è', 'È', $chaine);
$chaine = str_replace('ë', 'Ë', $chaine);
$chaine = str_replace('ê', 'Ê', $chaine);
$chaine = str_replace('ç', 'Ç', $chaine);
$chaine = str_replace('Ç', 'Ç', $chaine);
$chaine = str_replace('à', 'À', $chaine);
// $chaine = str_replace('','&aeacute;',$chaine);
$chaine = str_replace('â', 'Â', $chaine);
$chaine = str_replace('ä', 'Ä', $chaine);
$chaine = str_replace('î', 'Î', $chaine);
$chaine = str_replace('ï', 'Ï', $chaine);
$chaine = str_replace('ù', 'Ù', $chaine);
$chaine = str_replace('û', 'Û', $chaine);
$chaine = str_replace('ü', 'Ü', $chaine);
}
return $chaine;
}
}

View file

@ -1,5 +1,12 @@
<?php
/**
* Package MVC\Classe
* @author Emmanuel ROY
* @license MIT-licence (open source)
* @version 3.5
*/
namespace MVC\Classe;
class Controlleur
@ -22,6 +29,7 @@ class Controlleur
}
// no break
default:
//si c'est une route symfony alors on appelle le conduit associé
if ($application->route != null) {
$application->url->page['name'] = $application->route['_route'];
$conduit = explode('::', $application->route['controller']);
@ -32,14 +40,31 @@ class Controlleur
$class->initialize($application);
$this->vue = new VueVide();
$this->vue->ecran = $class->$method();
//si c'est une page de traitement PRG on appelle le fichier de controle de formulaire
} elseif ($application->url->page['control']) {
$url_params = $application->url->page['params'];
foreach($application->url->page['params'] as $key => $value){
$_GET[$key] = $value;
$url_params[$key] = $value;
}
require TRAITEMENT_PATH . DIRECTORY_SEPARATOR . $application->url->page['name'] . '.php';
//sinon c'est une page MVC normale
} else {
$this->modele = new Modele($application->url->page);
$this->vue = new Vue($this);
//on appelle le garde d'authentification
if(isset($this->modele->page['authentification']) && $this->modele->page['authentification'] == 'yes'){
//on declare la session lors du chargement du controlleur,
// ainsi on instancie la page précédente et le javascript et le css asynchrone
\MVC\Object\Session::createAndTestSession();
}else{
\MVC\Object\Session::sessionStart();
}
$this->vue = new Vue($this->modele->page);
}
}
return $this;
}
public function callHttpResponse($application)

View file

@ -7,17 +7,21 @@ class ControlleurAction
{
public static function inserer($action, $data = array())
{
//on extrait la classe d'appel de l'action
$action = explode('.', $action);
$class = ucfirst($action[0]) . "Action";
//echo $class;
//TODO: use try ... catch with \MVC\Classe\Logger to log error
if (is_file(ACTION_PATH . DIRECTORY_SEPARATOR . $class . ".php")) {
require_once ACTION_PATH . DIRECTORY_SEPARATOR . $class . ".php";
//On charge la classe Action de façon réflextive
$slot = new $class();
//si l'action passé en parametre est fournit avec une methode pointée on charge celle demandée sinon on charge celle par defaut
if (isset($action[1])) {
$method = $action[1];
//On appel la méthode de la classe action de manière reflextive
return $slot->$method(...$data);
} else {
return $slot->default($data);
return $slot->default(...$data);
}
} else {
/*HandleError*/

View file

@ -23,13 +23,8 @@ class HttpMethod
case 'POST':
break;
case 'PUT':
//$this->data['GET'] = ...
//POST DATA except enctype="multipart/form-data"
$this->data = json_decode(file_get_contents("php://input"), true);
// no break
case 'DELETE':
//$this->data['GET'] = ...
//POST DATA except enctype="multipart/form-data"
//on décode les données depuis l'input afin de les traiter
$this->data = json_decode(file_get_contents("php://input"), true);
break;
default:

View file

@ -3,42 +3,6 @@
namespace MVC\Classe;
/**
* Class Response
*
* example use:
* $data = array('a','b','c');
*
* Three Way to send a request
*
* $request = new Response('http://myurl','mymethod');
* $request->addContent($data);
* $request->send();
*
* OR
*
* $request = new Response('http://myurl');
* (
* $request->createContext('mymethod')
* $request->addContent($data);
* $request->send();
* ) OR (
* $request->get($data);
* $request->post($data);
* $request->put($data);
* $request->delete($data);
*
*
* OR
*
* $request = new Response();
* $request->setUrl('http://myurl')->get($data)
* $request->setUrl('http://myurl')->post($data)
* $request->setUrl('http://myurl')->put($data)
* $request->setUrl('http://myurl')->delete($data)
*
* @package MVC\Classe
*/
class HttpMethodRequete
{
protected $url;

View file

@ -6,6 +6,31 @@ namespace MVC\Classe\Implement;
class Action
{
public function render($view, $data)
{
return $this->renderBlade($view,$data);
}
public function renderJSON($json)
{
//header('Content-Type: application/json; charset=utf-8');
return json_encode($json, JSON_HEX_APOS);
}
public function renderTwig($view, $data)
{
$paths = new \SplPriorityQueue;
$paths->insert(VIEW_PATH . DIRECTORY_SEPARATOR . "system", 100);
$paths->insert(VIEW_PATH . DIRECTORY_SEPARATOR . "layout", 200);
$paths->insert(VIEW_PATH . DIRECTORY_SEPARATOR . "view", 300);
$renderer = new \Windwalker\Renderer\TwigRenderer($paths);
$view .= '.html';
return $renderer->render($view, $data);
}
public function renderBlade($view, $data)
{
$paths = new \SplPriorityQueue;

View file

@ -3,8 +3,6 @@
namespace MVC\Classe;
use Symfony\Component\Validator\Constraints\Date;
class Logger
{
public static function addLog($type = 'default', $what = "")
@ -28,14 +26,14 @@ class Logger
*/
public static function logCommandErrors(array $errors)
{
// log connection errors to the web service
// log connection errors
ob_start();
foreach ($errors as $key => $value) {
echo "\n\n$key : \n";
print_r($value);
}
$write_string = ob_get_clean();
file_put_contents(dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . "logs" . DIRECTORY_SEPARATOR . "errors_command.log", $write_string);
file_put_contents(OUTPUT_PATH . DIRECTORY_SEPARATOR . "logs" . DIRECTORY_SEPARATOR . "errors_command.log", $write_string);
return;
}

View file

@ -1,5 +1,12 @@
<?php
/**
* Package MVC\Classe
* @author Emmanuel ROY
* @license MIT-licence (open source)
* @version 3.5
*/
namespace MVC\Classe;
class Modele
@ -16,7 +23,7 @@ class Modele
//on recherche le pattern des tableau dans la valeur du paramètre
// dans le cas ou la déclaration se fait sur une seule ligne
if (preg_match("#{.*}#", $matches[2])) {
if (preg_match_all("#(?<capture>[0-9a-zA-ZÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ_+\-]*)#", $matches[2], $arrayMatches)) {
if (preg_match_all("#(?<capture>[0-9a-zA-ZÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ_+\- ']*)#", $matches[2], $arrayMatches)) {
$array = array();
foreach ($arrayMatches['capture'] as $val) {
if ($val != '') {
@ -30,11 +37,21 @@ class Modele
$this->page[$matches[1]] = $matches[2];
}
}
$this->page['url_params'] = $base_param['params'];
$this->page['all_params'] = $base_param['params'];
//export nom a nom les variable dans la superglobale $_GET
foreach($base_param['params'] as $key => $value){
$_GET[$key] = $value;
}
} else {
$this->page['name'] = $base_param['name'];
$this->page['description'] = $base_param['description'];
$this->page['params'] = $base_param['params'];
$this->page['all_params'] = $base_param['params'];
//export nom a nom les variable dans la superglobale $_GET
foreach($base_param['params'] as $key => $value){
$_GET[$key] = $value;
}
}
return $this;
}
}

View file

@ -19,6 +19,8 @@ class Modular
break;
case "symfony":
break;
case "laravel":
break;
case "wordpress":
if (isset($options[0])) {
switch ($options[0]) {
@ -92,35 +94,69 @@ class Modular
public function load($type = "symfony")
{
ob_start();
global $buffer_sand;
switch ($type) {
case "gitlist":
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
$level = ob_get_level();
require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . DIRECTORY_SEPARATOR . "index.php";
break;
case "symfony":
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
$level = ob_get_level();
$path = MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . DIRECTORY_SEPARATOR . "public" . DIRECTORY_SEPARATOR . "index.php";
return require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . DIRECTORY_SEPARATOR . "public" . DIRECTORY_SEPARATOR . "index.php";
break;
case "laravel":
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
$level = ob_get_level();
require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . DIRECTORY_SEPARATOR . "public" . DIRECTORY_SEPARATOR . "index.php";
break;
case "wordpress":
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
$level = ob_get_level();
require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . $this->subapp_dir . DIRECTORY_SEPARATOR . $this->subfile;
break;
case "prestashop":
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
$level = ob_get_level();
require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . $this->subapp_dir . DIRECTORY_SEPARATOR . "index.php";
break;
case "phplist":
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
$level = ob_get_level();
require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . $this->subapp_dir . DIRECTORY_SEPARATOR . "index.php";
break;
case "wanewsletter":
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
$level = ob_get_level();
require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . $this->subapp_dir . DIRECTORY_SEPARATOR . $this->subfile;
break;
case "phpmynewsletter":
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
$level = ob_get_level();
require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . $this->subapp_dir . DIRECTORY_SEPARATOR . $this->subfile;
break;
}
$data = ob_get_contents();
ob_end_clean();
return $data;
$buffer_sand = "";
if (ob_get_level() == $level) {
if (ob_get_level() > 1) {
$buffer_sand = ob_get_contents();
ob_end_clean();
} else {
$buffer_sand = "BUFFER CLOSURE BY FRAMEWORK !<br/>".$buffer_sand;
}
}else{
$final_level = ob_get_level();
$buffer_sand = "BUFFER LEVEL $level CLOSURE $final_level BY FRAMEWORK !<br/>".$buffer_sand;
}
return $buffer_sand;
}
public static function rappel($buffer)
{
global $buffer_sand;
$buffer_sand = $buffer;
// remplace toutes les pommes par des carottes
return $buffer;
}
}

View file

@ -0,0 +1,84 @@
<?php
namespace MVC\Classe;
/**
* Class MyActionTwigExtension
* with call {{ static_call("AppBundle\Entity\YourEntity", "GetSomething", ["var1", "var2"]) }}
* other {{ action("AppBundle\Entity\YourEntity", "GetSomething", ["var1", "var2"]) }}
*
* @package MVC\Classe
*/
class TwigControlleurAction extends \Twig\Extension\AbstractExtension
{
/**
* Returns a list of functions to add to the existing list.
*
* @return \Twig\TwigFunction[]
*/
public function getFunctions() {
return array(
new \Twig\TwigFunction("action", array($this, "inserer")),
new \Twig\TwigFunction("call", array($this, "getClassMethodStatic")),
new \Twig\TwigFunction("session", array($this, "afficheSession")),
new \Twig\TwigFunction("server", array($this, "afficheServer"))
);
}
public function afficheServer($key_var = ''){
if($key_var !== ""){
if(isset($_SERVER[$key_var])) {
return $_SERVER[$key_var];
}else{
return null;
}
}else {
return $_SERVER;
}
return null;
}
public function afficheSession($key_var = ''){
if($key_var !== ""){
if(isset($_SESSION[$key_var])) {
return $_SESSION[$key_var];
}else{
return null;
}
}else {
return $_SESSION;
}
return null;
}
public static function inserer($action, $data = array())
{
//on extrait la classe d'appel de l'action
$action = explode('.', $action);
$class = ucfirst($action[0]) . "Action";
//TODO: use try ... catch with \MVC\Classe\Logger to log error
if (is_file(ACTION_PATH . DIRECTORY_SEPARATOR . $class . ".php")) {
require_once ACTION_PATH . DIRECTORY_SEPARATOR . $class . ".php";
//On charge la classe Action de façon réflextive
$slot = new $class();
//si l'action passé en parametre est fournit avec une methode pointée on charge celle demandée sinon on charge celle par defaut
if (isset($action[1])) {
$method = $action[1];
//On appel la méthode de la classe action de manière reflextive
return $slot->$method(...$data);
} else {
return $slot->default(...$data);
}
} else {
/*HandleError*/
}
}
public static function getClassMethodStatic($class, $method, $args = array())
{
return $class::$method(...$args);
}
}

View file

@ -1,8 +1,13 @@
<?php
namespace MVC\Classe;
/**
* Package MVC\Classe
* @author Emmanuel ROY
* @license MIT-licence (open source)
* @version 3.5
*/
//require_once dirname(dirname(__FILE__)).DIRECTORY_SEPARATOR."config".DIRECTORY_SEPARATOR."define-constantes.php";
namespace MVC\Classe;
class Url
{
@ -37,32 +42,47 @@ class Url
}
}
//print_r($urlParts);
//Récupération du nom de la page
if (isset($urlParts[0])) {
//Récupération du nom de la page
($urlParts[0] == 'index' || $urlParts[0] == '') ? $page['name'] = 'index' : $page['name'] = $urlParts[0];
//il se peut que l'on ait des variable avec ? dans l'url
$urlQuery = explode('?', $urlParts[0]);
$urlQueryPageName = $urlQuery[0];
($urlQueryPageName == 'index' || $urlQueryPageName == '') ? $page['name'] = 'index' : $page['name'] = $urlQueryPageName;
unset($urlParts[0]);
} else {
$page['name'] = 'index';
}
//il se peut que l'on ait des variable avec ? dans l'url
$urlQuery = explode('?', $page['name']);
$page['name'] = $urlQuery[0];
$page['name'] = strtolower($page['name']);
//si c'est une page de controle de formulaire : on renomme la page
if ($page['name'] == 'control') {
$page['control'] = true;
($urlParts[1] == 'index' || $urlParts[1] == '') ? $page['name']='index' : $page['name']=$urlParts[1];
unset($urlParts[1]);
}
//Mise en place du statut de l'application
switch(APP_STATE){
case "CLOSED":
$page['name'] = "error-application-closed";
break;
case "MAINTAINED":
$page['name'] = "error-application-maintained";
break;
case "OPEN":
if(\MVC\Classe\Application::is_under_update()) {
$page['name'] = "error-application-maintained";
break;
}
default:
}
//vérification du nombre de parametres:
$numParts = count($urlParts);
//s'il n'existe pas autant de clé que de valeurs, ce peut ^etre un module symfony
//s'il n'existe pas autant de clé que de valeurs, ce peut ^etre un module symfony ou tout autre module
if ($numParts%2 != 0) {
//si un module symfony n'est pas reférencé avec le nom de la page, on renvoi un erreur
//si un module symfony n'est pas reférencé avec le nom de la page, on renvoi une erreur
if (!in_array($page['name'], $this->registre->getIndex())) {
$page['name'] = 'error';
$page['params'] = array();
@ -70,9 +90,10 @@ class Url
return;
} else {
foreach ($urlParts as $key => $value) {
$values[] = $value;
$keys[] = $key;
$values[] = $value;
//$keys[] = $key;
}
//$page['params'] = array_combine($keys, $values);
$page['params'] = $values;
}
@ -80,15 +101,6 @@ class Url
} elseif ($numParts != 0) {
// si c'est un module alors on charge un a un les parametres
if (in_array($page['name'], $this->registre->getIndex())) {
foreach ($urlParts as $key => $value) {
$values[] = $value;
$keys[] = $key;
}
$page['params'] = $values;
// sinon c'est une page normal du framework
} else {
$values = array();
$keys = array();
foreach ($urlParts as $key => $value) {
if ($key % 2 == 0) {
$values[] = $value;
@ -96,11 +108,29 @@ class Url
$keys[] = $value;
}
}
if ($page['control']) {
$page['params'] = array_combine($values, $keys);
} else {
$page['params'] = array_combine($keys, $values);
$page['params'] = array_combine($keys, $values);
// sinon c'est une page normal du framework
} else {
$values = array();
$keys = array();
if($page['control']){
foreach ($urlParts as $key => $value) {
if ($key % 2 == 1) {
$values[] = $value;
} else {
$keys[] = $value;
}
}
}else {
foreach ($urlParts as $key => $value) {
if ($key % 2 == 0) {
$values[] = $value;
} else {
$keys[] = $value;
}
}
}
$page['params'] = array_combine($keys, $values);
}
}
$page['name'] = lcfirst($page['name']);
@ -112,29 +142,60 @@ class Url
//recherche du fichier controlleur correpondant HTTP1.1 ou HTTP1.0
switch ($method) {
//cas des requètes HTTP1.1
case 'PUT':
case 'DELETE':
case 'GET':
case 'POST':
if ($appRequest) {
$page['name'] = ucfirst($page['name']);
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'HttpReponse.php';
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'RestReponse.php';
if (!file_exists($pageFile)) {
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'HttpReponse.php';
}
} else {
$page['name'] = lcfirst($page['name']);
$pageFile = CONTROLLERS_PATH . DIRECTORY_SEPARATOR . $page['name'] . '.php';
if (!file_exists($pageFile)) {
$page['name'] = ucfirst($page['name']);
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'HttpReponse.php';
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'RestReponse.php';
if (!file_exists($pageFile)) {
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'HttpReponse.php';
}
}
}
break;
case 'PUT':
case 'DELETE':
$page['name'] = ucfirst($page['name']);
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'RestReponse.php';
}
}
//Test sur l'existence de la page actuelle et renvoi sur le controlleur 404 d'erreur si besoin
if (!file_exists($pageFile)) {
if ($appRequest) {
$page['name'] = 'Error';
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'RestReponse.php';
if (!file_exists($pageFile)) {
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'HttpReponse.php';
}
} else {
$page['name'] = 'error';
$pageFile = CONTROLLERS_PATH . DIRECTORY_SEPARATOR . $page['name'] . '.php';
if (!file_exists($pageFile)) {
$page['name'] = ucfirst($page['name']);
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'RestReponse.php';
if (!file_exists($pageFile)) {
$pageFile = CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'HttpReponse.php';
if (!file_exists($pageFile)) {
//FrameWork : expose undefined controlleur error
// TODO: Send SANDerror
die("le controlleur 404 d'erreur n'existe pas : \n"
. CONTROLLERS_PATH . DIRECTORY_SEPARATOR . $page['name'] . '.php' . "\n"
. "ou l'un des controlleurs 404 (REST ou HTTP) n'existe pas : \n"
. CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'RestReponse.php \n'
. " ou \n"
. CONTROLLER_PATH . DIRECTORY_SEPARATOR . $page['name'] . 'HttpReponse.php');
}
}
}
}
}
$this->page = $page;
@ -155,15 +216,6 @@ class Url
}
}
public static function module_link_rewrite($page, $params = array())
{
$stringParams = '';
foreach ($params as $values) {
$stringParams .= "/" . $values;
}
return '/' . BASE_SERVER_DIRECTORY . $page . $stringParams;
}
private static function link_rewrite_slashParam($page, $params = array())
{
$stringParams = '';
@ -184,18 +236,112 @@ class Url
public static function absolute_link_rewrite($isControlPatern, $page, $params = array())
{
$url = $_SERVER['HTTP_HOST'];
if(isset($_SERVER['HTTP_HOST'])) {
$url = $_SERVER['HTTP_HOST'];
if (isset($_SERVER['REQUEST_SCHEME'])) {
$scheme = $_SERVER['REQUEST_SCHEME'];
} else {
$scheme = 'http';
}
$scheme_tab = explode("://",PATH_URL);
if( $scheme !== $scheme_tab[0]){
$scheme = $scheme_tab[0];
}
$url = $scheme . "://" . $url;
}else{
$url = PATH_URL;
}
if( substr($url , -1) == "/"){
$url = substr($url, 0, -1);
}
if ($isControlPatern) {
$uri = self::controlLink_rewrite($page, $params);
} else {
$uri = self::link_rewrite_slashParam($page, $params);
}
if (isset($_SERVER['REQUEST_SCHEME'])) {
$scheme = $_SERVER['REQUEST_SCHEME'];
} else {
$scheme = 'http';
return ( $url . $uri);
}
public static function getBaseDirectory(){
return '/' . BASE_SERVER_DIRECTORY;
}
public static function getRootDirectoryUrl(){
if(isset($_SERVER['HTTP_HOST'])) {
$url = $_SERVER['HTTP_HOST'];
if (isset($_SERVER['REQUEST_SCHEME'])) {
$scheme = $_SERVER['REQUEST_SCHEME'];
} else {
$scheme = 'http';
}
$scheme_tab = explode("://",PATH_URL);
if( $scheme !== $scheme_tab[0]){
$scheme = $scheme_tab[0];
}
$url = $scheme . "://" . $url;
}else{
$url = PATH_URL;
}
if( substr($url , -1) == "/"){
$url = substr($url, 0, -1);
}
if( substr($url . "/" . BASE_SERVER_DIRECTORY, -1) == "/"){
return substr($url . "/" . BASE_SERVER_DIRECTORY, 0, -1);
}else {
return $url . "/" . BASE_SERVER_DIRECTORY;
}
}
public static function getPageName(){
$url = parse_url($_SERVER['REQUEST_URI']);
$urlTrim = trim($url['path'], '/');
$urlParts = explode('/', $urlTrim);
//suppression des sous repertoires du BASE_SERVER_DIRECTORY
$basePath = explode( '/', BASE_SERVER_DIRECTORY);
foreach($basePath as $subDir) {
if ($urlParts[0] == $subDir) {
array_shift($urlParts);
}
}
return ($scheme . "://" . BASE_SERVER_DIRECTORY . $url . $uri);
//Récupération du nom de la page
if (isset($urlParts[0])) {
//il se peut que l'on ait des variable avec ? dans l'url
$urlQuery = explode('?', $urlParts[0]);
$urlQueryPageName = $urlQuery[0];
($urlQueryPageName == 'index' || $urlQueryPageName == '') ? $page['name'] = 'index' : $page['name'] = $urlQueryPageName;
unset($urlParts[0]);
} else {
$page['name'] = 'index';
}
$page['name'] = strtolower($page['name']);
//si c'est une page de controle de formulaire : on renomme la page
if ($page['name'] == 'control') {
$page['control'] = true;
($urlParts[1] == 'index' || $urlParts[1] == '') ? $page['name']='index' : $page['name']=$urlParts[1];
unset($urlParts[1]);
}
return $page;
}
/**
* Obtiens le fragment depuis une variable serveur,
* ce qui est selon moi possible avec une bonne configuration serveur
* sauf si le fragment est bloqué au niveau du navigateur (rétention d'informations)
*
* Selon QASTACK
* => https://qastack.fr/programming/2317508/get-fragment-value-after-hash-from-a-url-in-php
* ce n'est pas possible avec HTTP "standard" car cette valeur n'est jamais envoyée au serveur
* (par conséquent, elle ne sera pas disponible dans $_SERVER["REQUEST_URI"]ou similaire variables prédéfinies)
*/
public static function getFragment(){
$fragment = parse_url($_SERVER['REQUEST_URI'],PHP_URL_FRAGMENT);
return $fragment;
}
}

View file

@ -1,5 +1,12 @@
<?php
/**
* Package MVC\Classe
* @author Emmanuel ROY
* @license MIT-licence (open source)
* @version 3.5
*/
namespace MVC\Classe;
class Vue
@ -7,47 +14,70 @@ class Vue
public $ecran;
public $block_body;
public function __construct($application)
public function __construct($page_params)
{
$templateData = array();
extract($application->modele->page);
//$templateData = array();
$url_params = array();
$templateData = $page_params;
extract($page_params);
//de base on ajoute les parametres du .model et ceux provenant de l'url
foreach ($page_params['all_params'] as $key => $value) {
//$templateData[$key] = $value;
$_GET[$key] = $value;
$url_params[$key] = $value;
}
if(!isset($engine)){$engine = 'blade';}
$flag_exist = false;
switch ($engine){
case 'twig':
if (file_exists(VIEW_PATH.DIRECTORY_SEPARATOR."view".DIRECTORY_SEPARATOR.$name.".html.twig")) {
$flag_exist = true;
}
break;
case 'blade':
default:
if (file_exists(VIEW_PATH.DIRECTORY_SEPARATOR."view".DIRECTORY_SEPARATOR.$name.".blade.php")) {
$flag_exist = true;
}
}
ob_start();
if (file_exists(VIEW_PATH.DIRECTORY_SEPARATOR."view".DIRECTORY_SEPARATOR.$name.".blade.php")) {
if($flag_exist){
//l'inclusion du controlleur doit renvoyer le tableau $templateData
require CONTROLLER_PATH . DIRECTORY_SEPARATOR . $name . '.php';
//TEMPLATING BLADE
//WINWALKER TEMPLATING ENGINE
$paths = new \SplPriorityQueue;
$paths->insert(VIEW_PATH . DIRECTORY_SEPARATOR . "system", 100);
$paths->insert(VIEW_PATH . DIRECTORY_SEPARATOR . "layout", 200);
$paths->insert(VIEW_PATH . DIRECTORY_SEPARATOR . "view", 300);
if(!isset($engine)){$engine = 'blade';}
switch ($engine){
case 'twig':
$renderer = new \Windwalker\Renderer\TwigRenderer($paths);
$renderer->addExtension(new \MVC\Classe\TwigControlleurAction);
$name .= '.html';
break;
case 'blade':
default:
$renderer = new \Windwalker\Renderer\BladeRenderer($paths, array('cache_path' => VIEW_PATH . DIRECTORY_SEPARATOR . "cache"));
$renderer = new \Windwalker\Renderer\BladeRenderer($paths, array('cache_path' => VIEW_PATH . DIRECTORY_SEPARATOR . "cache"));
}
//de base on ajoute les parametres du .model et ceux provenant de l'url
foreach ($application->modele->page as $key => $value) {
foreach ($page_params as $key => $value) {
$templateData[$key] = $value;
}
//WINWALKER TEMPLATING ENGINE RENDER
echo $renderer->render($name, $templateData);
} else {
include CONTROLLER_PATH . DIRECTORY_SEPARATOR . $name . '.php';
}
$this->ecran = ob_get_clean();
return $this;
}
}

View file

@ -1,13 +0,0 @@
<?php
// De base laisser vide,
// sauf si l'application est hebergé sur de multiples sous-repertoire en ajoutant le slash_final
// par exemple : "my-app/"
// ou : "my-app/dev/
define("BASE_SERVER_DIRECTORY", "");
// Optionnel! il n'est nécessaire que si vous l'utilisez dans les fichiers de traitement
define('PATH_URL', $_SERVER['REQUEST_SCHEME'] . "://www.domain.org");
define('ENV', "TEST");

View file

@ -0,0 +1,23 @@
<?php
// De base laisser vide,
// sauf si l'application est hebergé sur de multiples sous-repertoire en ajoutant le slash_final
// par exemple : "my-app/"
// ou : "my-app/dev/
define("BASE_SERVER_DIRECTORY", "");
// Optionnel! il n'est nécessaire que si vous l'utilisez dans les fichiers de traitement ou dans une commande console
define('PATH_URL', $_SERVER['REQUEST_SCHEME'] . "://localhost.localdomain");
//Possible values are DEV DEVEL PROD PREPROD TEST
//only PROD send email to right user
define('ENV', "DEV");
//Possible values are OPEN CLOSED MAINTAINED
define('APP_STATE', "OPEN");
define('MAINTENANCE_DATE_DEBUT', '2021-07-30 12:00');
define('MAINTENANCE_DATE_FIN', '2021-07-30 14:00');
define('MAINTENANCE_MESSAGE', "Mise à jour de la base de données");

View file

@ -11,4 +11,4 @@ define('PASS_BDD1', "pass1");
define('DSN_BDD2', "mysql:host=localhost;dbname=db2");
define('USER_BDD2', "user2");
define('PASS_BDD2', "pass2");
define('PASS_BDD2', "pass2");

View file

@ -24,7 +24,7 @@ $phpcas_path = '../../source/';
///////////////////////////////////////
// Full Hostname of your CAS Server
$cas_host = 'cas.domain.fr';
$cas_host = 'cas.localdomain';
// Context of the CAS Server
$cas_context = 'cas';
// Port of your CAS server. Normally for a https server it's 443
@ -54,49 +54,7 @@ $db_user = 'phpcasuser';
$db_password = 'mysupersecretpass';
$db_table = 'phpcastabel';
$driver_options = '';
*/
///////////////////////////////////////////
// End Configuration -- Don't edit below //
///////////////////////////////////////////
// Generating the URLS for the local cas example services for proxy testing
if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') {
$curbase = 'https://' . $_SERVER['SERVER_NAME'];
} else {
$curbase = 'http://' . $_SERVER['SERVER_NAME'];
}
if ($_SERVER['SERVER_PORT'] != 80 && $_SERVER['SERVER_PORT'] != 443) {
$curbase .= ':' . $_SERVER['SERVER_PORT'];
}
$curdir = dirname($_SERVER['REQUEST_URI']) . "/";
// CAS client nodes for rebroadcasting pgtIou/pgtId and logoutRequest
$rebroadcast_node_1 = 'http://cas-client-1.example.com';
$rebroadcast_node_2 = 'http://cas-client-2.example.com';
// access to a single service
$serviceUrl = $curbase . $curdir . 'example_service.php';
// access to a second service
$serviceUrl2 = $curbase . $curdir . 'example_service_that_proxies.php';
$pgtBase = preg_quote(preg_replace('/^http:/', 'https:', $curbase . $curdir), '/');
$pgtUrlRegexp = '/^' . $pgtBase . '.*$/';
$cas_url = 'https://' . $cas_host;
if ($cas_port != '443') {
$cas_url = $cas_url . ':' . $cas_port;
}
$cas_url = $cas_url . $cas_context;
// Set the session-name to be unique to the current script so that the client script
// doesn't share its session with a proxied script.
// This is just useful when running the example code, but not normally.
session_name(
'session_for-'
. preg_replace('/[^a-z0-9-]/i', '_', basename($_SERVER['SCRIPT_NAME']))
);
// Set an UTF-8 encoding header for internation characters (User attributes)
header('Content-Type: text/html; charset=utf-8');
?>
*/
///////////////////////////////////////////

View file

@ -0,0 +1,3 @@
<?php
define("LINE_FEED", "\n");

View file

@ -13,5 +13,5 @@ define("CONTROLLER_PATH", APPLICATION_PATH . DIRECTORY_SEPARATOR . "include" . D
define("TRAITEMENT_PATH", APPLICATION_PATH . DIRECTORY_SEPARATOR . "traitements");
define("PUBLIC_PATH", dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . "public");
define("CONSOLE_PATH", dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . "console");
define("OUTPUT_PATH", dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . "output");
define("DATA_PATH", dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . "data");

View file

@ -0,0 +1,6 @@
<?php
define('LDAP_USER','cn=name, ou=group, dc=domain, dc=tld');
define('LDAP_PASSWORD','password');
define('LDAP_URL',"ldap://ldap.domain.tld");
define('LDAP_PORT',"389");

View file

@ -0,0 +1,6 @@
<?php
define('LDAP_USER','cn=name, ou=group, dc=domain, dc=tld');
define('LDAP_PASSWORD','password');
define('LDAP_URL',"ldap://ldap.domain.tld");
define('LDAP_PORT',"389");

View file

@ -1,51 +1,86 @@
<?php
use MVC\Classe\Dumper;
use MVC\Classe\HttpMethodRequete;
use MVC\Classe\Implement\Action;
use MVC\Classe\Url;
use MVC\Classe\Response;
class DefaultAction extends Action
class DefaultAction extends \MVC\Classe\Implement\Action
{
public function default($data)
public function default()
{
/**your action algorythm**/
if (isset($data[0])) {
$var1 = $data[0];
if (isset($data1)) {
$var1 = $data1;
} else {
$var1 = 1;
}
if (isset($data[1])) {
$var2 = $data[1];
if (isset($data2)) {
$var2 = $data2;
} else {
$var2 = 2;
}
if (isset($data[2])) {
$var3 = $data[2];
if (isset($data3)) {
$var3 = $data3;
} else {
$var3 = 3;
}
return $this->render('action', array('var1' => $var1, 'var2' => $var2, 'var3' => $var3));
}
public function variableSlug($data)
public function defaultBlade($data1,$data2,$data3)
{
/**your action algorythm**/
if (isset($data[0])) {
$var1 = $data[0];
if (isset($data1)) {
$var1 = $data1;
} else {
$var1 = 1;
}
if (isset($data[1])) {
$var2 = $data[1];
if (isset($data2)) {
$var2 = $data2;
} else {
$var2 = 2;
}
if (isset($data[2])) {
$var3 = $data[2];
if (isset($data3)) {
$var3 = $data3;
} else {
$var3 = 3;
}
return $this->render('action', array('var1' => $var1, 'var2' => $var2, 'var3' => $var3),'blade');
}
public function defaultTwig($data1,$data2,$data3)
{
/**your action algorythm**/
if (isset($data1)) {
$var1 = $data1;
} else {
$var1 = 1;
}
if (isset($data2)) {
$var2 = $data2;
} else {
$var2 = 2;
}
if (isset($data3)) {
$var3 = $data3;
} else {
$var3 = 3;
}
return $this->render('action', array('var1' => $var1, 'var2' => $var2, 'var3' => $var3),'twig');
}
public function variableSlug($data1,$data2,$data3)
{
/**your action algorythm**/
if (isset($data1)) {
$var1 = $data1;
} else {
$var1 = 1;
}
if (isset($data2)) {
$var2 = $data2;
} else {
$var2 = 2;
}
if (isset($data3)) {
$var3 = $data3;
} else {
$var3 = 3;
}
@ -58,10 +93,10 @@ class DefaultAction extends Action
$data = array('myval' => 25);
//Dumper::dump($data);
\MVC\Classe\Logger::addLog('action', 'http11 make request');
$request = new HttpMethodRequete();
$request->setUrl(Url::absolute_link_rewrite(false, 'accueil', ['var10'=>'val10']))->get($data);
$request->setUrl(Url::absolute_link_rewrite(false, 'accueil', ['var10'=>'val10']))->post($data);
$request->setUrl(Url::absolute_link_rewrite(false, 'accueil', ['var10'=>'val10']))->put($data);
$request->setUrl(Url::absolute_link_rewrite(false, 'accueil', ['var10'=>'val10']))->delete($data);
$request = new \MVC\Classe\HttpMethodRequete();
$request->setUrl(\MVC\Classe\Url::absolute_link_rewrite(false, 'accueil', ['var10'=>'val10']))->get($data);
$request->setUrl(\MVC\Classe\Url::absolute_link_rewrite(false, 'accueil', ['var10'=>'val10']))->post($data);
$request->setUrl(\MVC\Classe\Url::absolute_link_rewrite(false, 'accueil', ['var10'=>'val10']))->put($data);
$request->setUrl(\MVC\Classe\Url::absolute_link_rewrite(false, 'accueil', ['var10'=>'val10']))->delete($data);
}
}

View file

@ -5,7 +5,7 @@ use MVC\Classe\Response;
class MenudocsAction extends Action
{
public function default($data)
public function default()
{

View file

@ -8,6 +8,35 @@ class DocConduit extends Conduit
// Route('/docs')
public function index()
{
\MVC\Object\Session::createAndTestSession();
$files = array();
if ($handle = opendir(DATA_PATH . '/docs')) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
$files[] = $entry;
}
}
closedir($handle);
}
asort($files);
$this->templateData['page_title'] = 'Sommaire de la documentation du Framework';
$this->templateData['description'] = 'Sommaire, Documentation, SAND, Framework';
$this->templateData['files'] = $files;
return $this->render('docs', $this->templateData);
}
// Route('/docs/file/{file}')
public function readfile()
{
\MVC\Object\Session::createAndTestSession();
$files = array();
@ -26,24 +55,21 @@ class DocConduit extends Conduit
asort($files);
$this->templateData['page_title'] = 'Foo';
$this->templateData['description'] = 'DocConduit';
$this->templateData['files'] = $files;
return $this->render('docs', $this->templateData);
}
// Route('/docs/file/{file}')
public function readfile()
{
$key_file = array_search($this->file,$files);
$markdown = file_get_contents(DATA_PATH . '/docs/' . $this->file);
$my_html = MarkdownExtra::defaultTransform($markdown);
$this->templateData['page_title'] = 'Foo';
$this->templateData['description'] = 'DocConduit';
$this->templateData['page_title'] = 'Documentation du Framework';
$this->templateData['description'] = 'Documentation, SAND, Framework';
$this->templateData['data'] = $my_html;
if(isset($files[$key_file - 1])) {
$this->templateData['previous'] = $files[$key_file - 1];
}
if(isset($files[$key_file + 1])) {
$this->templateData['next'] = $files[$key_file + 1];
}
return $this->render('docs', $this->templateData);

View file

@ -8,6 +8,7 @@ class FooConduit extends Conduit
// Route('/foo')
public function index()
{
\MVC\Object\Session::createAndTestSession();
echo "blob of foo";
return $this->render('foo', array('page_title' => 'Foo', 'description' => 'FooConduit'));
}
@ -15,6 +16,7 @@ class FooConduit extends Conduit
// Route('/foo/{id}')
public function load()
{
\MVC\Object\Session::createAndTestSession();
echo "load of foo";
return $this->render('foo', array('page_title' => 'Foo', 'description' => 'FooConduit', 'id' => $this->id));
}

View file

@ -8,6 +8,7 @@ class IndexConduit extends Conduit
// Route('/')
public function homepage()
{
\MVC\Object\Session::createAndTestSession();
echo "IndexControlleur";
return $this->render('index', array("templating_a"=>'blade',"templating_b"=>'twig',"templating_c"=>'edge'));
}

View file

@ -0,0 +1,5 @@
<?php
/**
* Controlleur permettant d'afficher la page d'erreur lors d'une fermeture de l'application
*/

View file

@ -0,0 +1,5 @@
<?php
/**
* Controlleur permettant d'afficher la page d'erreur lors d'une maintenance de l'application
*/

View file

@ -1 +1,6 @@
<?php
/**
* Controlleur permettant d'afficher la page d'erreur 404 page inexistante
*/

View file

@ -0,0 +1,5 @@
<?php
/**
* Controlleur permettant d'afficher le recevoir un feedback
*/

View file

@ -0,0 +1,6 @@
<?php
\MVC\Classe\Dumper::dump($_GET);
\MVC\Classe\Dumper::dump($url_params);
\MVC\Classe\Dumper::dump($templateData);
\MVC\Classe\Dumper::dump($GLOBALS);

View file

@ -8,5 +8,7 @@ use MVC\Classe\Logger;
\MVC\Classe\ControlleurAction::inserer('default.makeHttp11', []);
$templateData = array("templating_a"=>'blade',"templating_b"=>'twig',"templating_c"=>'edge');
$templateData["templating_a"] ='blade';
$templateData["templating_b"] ='twig';
$templateData["templating_c"] ='edge';
Logger::addLog('ok', 'Hello world');

View file

@ -0,0 +1,7 @@
<?php
use MVC\Classe\Logger;
$templateData = array("templating_a"=>'blade',"templating_b"=>'twig',"templating_c"=>'edge');
Logger::addLog('ok', 'Hello world');

View file

@ -0,0 +1,7 @@
<?php
use MVC\Classe\Logger;
$templateData = array("templating_a"=>'blade',"templating_b"=>'twig',"templating_c"=>'edge');
Logger::addLog('ok', 'Hello world');

View file

@ -1,6 +1,10 @@
name : admin
page_title : Administration de l'application
description : Administration de l'application
engine : blade
params : params
engine : blade
authentification : yes
ariane : {acceuil}
arianelink : {index}

View file

@ -1,5 +1,10 @@
name : beers
page_title : module_title
description : module_description
params : module_params
engine : blade
authentification : yes
ariane : {acceuil}
arianelink : {index}

View file

@ -1,5 +1,9 @@
name : cgu
page_title: Conditions Générale d'Utilisation de l'application
description : abracadabla
engine : blade
params : params
authentification : yes
ariane : {acceuil}
arianelink : {index}

View file

@ -1,5 +1,10 @@
name : donate
page_title : Be a sponsor
description : Page permettant de devenir un sponsor du framework SAND
params : module_params
engine : blade
authentification : yes
ariane : {acceuil}
arianelink : {index}

View file

@ -1,5 +1,10 @@
name : error-access-denied
page_title : Page 403 (Accès restreint) de l'application
description : Page 403 (Accès restreint) de l'application
params : module_params
engine : blade
authentification : no
ariane : {acceuil}
arianelink : {index}

View file

@ -0,0 +1,6 @@
name : error-application-closed
page_title : Page de fermeture de l'application
description : UFC - Page de fermeture de l'application
engine : blade
authentification : no

View file

@ -0,0 +1,6 @@
name : error-application-maintained
page_title : Page de maintenance de l'application
description : UFC - Page de maintenance de l'application
engine : blade
authentification : no

View file

@ -1,4 +1,9 @@
name : error
page_title: Page 404 (Page Non Trouvé) de l'application
description : Page 404 (Page Non Trouvé) de l'application
params : params
engine : blade
authentification : no
ariane : {acceuil}
arianelink : {index}

View file

@ -0,0 +1,8 @@
name : feedback
page_title : Page de retour d'expérience utilisateur de l'application
description : UFC - Page de retour d'expérience utilisateur de l'application
engine : blade
authentification : no
ariane : {acceuil, retour d'expérience utilisateur}
arianelink : {index, feedback}

View file

@ -1,5 +1,10 @@
name : gitlist
page_title : module_title
description : module_description
params : module_params
page_title : Dépot Git
description : Le dépot de travail du framework
engine : blade
authentification : yes
ariane : {acceuil, dépot git du framework}
arianelink : {index, gitlist}

View file

@ -1,6 +1,10 @@
name : index
page_title : Accueil de l'application
description : zatou stra bracadabla
engine : blade
params : params
engine : twig
authentification : yes
ariane : {acceuil}
arianelink : {index}

View file

@ -1,5 +1,9 @@
name : policy
page_title: Politique de Confidentialité de l'application
description : abracadabla
engine : blade
params : params
authentification : yes
ariane : {acceuil}
arianelink : {index}

View file

@ -0,0 +1,8 @@
name : react
page_title : module_title
description : module_description
engine : blade
authentification : yes
ariane : {acceuil, react}
arianelink : {index, react}

View file

@ -0,0 +1,8 @@
name : vuejs
page_title : module_title
description : module_description
engine : blade
authentification : yes
ariane : {acceuil, vuejs}
arianelink : {index, vuejs}

View file

@ -8,11 +8,13 @@
style="background: rgba(0, 0, 0, 0.59);">
<div class="container">
<ul class="top-menu">
{{\MVC\Object\Environment::getTextEnvironment()}}
<li @if($name == 'docs_route' || $name == 'docs_name_route') class="actual" @endif ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'docs', []) }}">Documentation</a></li>
<li @if($name == 'depots') class="actual" @endif ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'gitlist/SAND-FrameWork', []) }}">Dépot</a></li>
<li @if($name == 'donate') class="actual" @endif ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Donate', []) }}">Donate</a></li>
<li @if($name == 'cgu') class="actual" @endif ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'CGU', []) }}"> CGU Terms</a></li>
<li @if($name == 'policy') class="actual" @endif ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Policy', []) }}">Policy</a></li>
<li @if($name == 'feedback') class="actual" @endif ><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Feedback', []) }}">Feedback</a></li>
</ul>
</div>
</div>
@ -51,13 +53,36 @@
</header>
<!-- end: Header -->
<!-- Subbar -->
<div id="sub-bar" class="fullwidth">
@if(isset($authentification) && $authentification == 'yes')
<div id="subbar" class="fullwidth">
<div class="container">
<span style="float:left;">Vous êtes connecté en tant que {{$_SESSION['user_login']}}</span>
<span style="float:right;"><a href="{{ \MVC\Classe\Url::link_rewrite( false, 'Logout', []) }}">Se Deconnecter</a></span>
</div>
</div>
@endif
<!-- end: Subbar -->
<!-- Breadcrumbs -->
@if (isset($ariane))
<div id="breadcrumbs" class="fullwidth">
<div class="container">
<nav aria-label="breadcrumb">
<ol class="breadcrumb-sand">
@foreach($ariane as $value)
@if($value == end($ariane))
<li class="breadcrumb-item active" aria-current="page">{{$value}}</li>
@else
<li class="breadcrumb-item"><a href="{{\MVC\Classe\Url::link_rewrite(false,$arianelink[array_search($value,$ariane)])}}">{{$value}}</a></li>
@endif
@endforeach
</ol>
</nav>
</div>
</div>
@endif
<!-- end: BreadCrumbs -->
<section id="page-content">
<div class="container">

View file

@ -0,0 +1,140 @@
{% extends "system.html.twig" %}
{% block body %}
<!-- Body Inner -->
<div class="body-inner">
<!-- Topbar -->
<div id="topbar" class="d-none d-xl-block d-lg-block topbar-transparent topbar-fullwidth dark"
style="background: rgba(0, 0, 0, 0.59);">
<div class="container">
<ul class="top-menu">
{{call('\\MVC\\Object\\Environment','getTextEnvironment',[]) | raw}}
<li {% if name == 'docs_route' or name == 'docs_name_route' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[ false, 'docs', []]) }}">Documentation</a></li>
<li {% if name == 'depots' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[ false, 'gitlist/SAND-FrameWork', []]) }}">Dépot</a></li>
<li {% if name == 'donate' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[ false, 'Donate', []]) }}">Donate</a></li>
<li {% if name == 'cgu' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[ false, 'CGU', []]) }}"> CGU Terms</a></li>
<li {% if name == 'policy' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[ false, 'Policy', []]) }}">Policy</a></li>
</ul>
</div>
</div>
<!-- end: Topbar -->
<!-- Header -->
<header id="header" class="dark" data-transparent="true" data-fullwidth="true"
style="background: rgba(0, 0, 0, 0.59);">
<div class="header-inner">
<div class="container">
<!--Navigation Resposnive Trigger-->
<div id="mainMenu-trigger">
<a class="lines-button x"><span class="lines"></span></a>
</div>
<!--end: Navigation Resposnive Trigger-->
<!--Navigation-->
<div id="mainMenu">
<div class="container">
<!--Logo-->
<div id="logo">
<a href="#">
SAND Framework
</a>
</div>
<!--end: logo-->
<nav>
<ul>
<li {% if name == 'index' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[false, 'Index', []]) }}">Index</a></li>
<li {% if name == 'admin' %} class="actual" {% endif %} ><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[false, 'Admin', []]) }}">Admin</a></li>
</ul>
</nav>
</div>
</div>
<!--end: Navigation-->
</div>
</div>
</header>
<!-- end: Header -->
<!-- Subbar -->
<div id="subbar" class="fullwidth">
<div class="container">
<span style="float:left;">Vous êtes connecté en tant que {{session('user_login')}}</span>
<span style="float:right;"><a href="{{ call("\\MVC\\Classe\\Url","link_rewrite",[ false, 'Logout', []]) }}">Se Deconnecter</a></span>
</div>
</div>
<!-- end: Subbar -->
<!-- Breadcrumbs -->
{%if ariane is defined %}
<div id="breadcrumbs" class="fullwidth">
<div class="container">
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
{% for value in ariane %}
{% if value == ariane|last %}
<li class="breadcrumb-item active" aria-current="page">{{value}}</li>
{% else %}
<li class="breadcrumb-item"><a href="{{call("\\MVC\\Classe\\Url","link_rewrite",[false,arianelink[value.index],[] ])}}">{{value}}</a></li>
{% endif %}
{% endfor %}
</ol>
</nav>
</div>
</div>
{% endif %}
<section id="page-content">
<div class="container">
<!--Alerts-->
{% if not session('alerts') == null %}
{% for alert in session('alerts') %}
<div class="alert alert-{{alert.type}} alert-dismissible fade show" role="alert">
<strong>{{alert.title}}</strong> {{alert.message}}.
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
{% endfor %}
{% endif %}
<!--end: Alerts-->
{% block content %}{% endblock %}
</div>
</section>
<!-- Footer -->
<footer id="footer">
<div class="footer-content">
<div class="container">
<div class="row">
<div class="col-lg-3">
<div class="widget">
<div class="widget-title"></div>
<p class="mb-5">
<img src="{{ call("\\MVC\\Classe\\Url","asset_rewrite",['assets/img/1007698-ffeb3b.svg']) }}" width="150">
</p>
</div>
</div>
<div class="col-lg-9">
<p>
SAND FrameWork is an CC-licensed or MIT-licenced open source project and completely free to use.
</p>
<p>
However, the amount of effort needed to maintain and develop new features for the project is not
sustainable without proper financial backing.
You can support its ongoing development by being a backer or a sponsor on
<a href="https://www.patreon.com/">Patreon campaign</a>
(recurring, with perks for different tiers), and get your company logo here.
</p>
<p>
Also, you can make a <a href="https://www.paypal.me/">one time donation via PayPal</a>.
</p>
</div>
</div>
</div>
<div class="copyright-content">
<div class="container">
<div class="copyright-text text-center">&copy; 2020-2021 Built with SAND Framework - Responsive SAND Template.</div>
</div>
</div>
</div>
</footer>
<!-- end: Footer -->
</div>
<!-- end: Body Inner -->
{% endblock %}

View file

@ -1,3 +1,4 @@
<!DOCTYPE html>
<html>
<head>
@ -29,6 +30,10 @@
@section('top-css')
<link rel="stylesheet" href="{{ \MVC\Classe\Url::asset_rewrite('assets/bootstrap-5.0.0-beta1-dist/css/bootstrap.min.css')}}">
<link rel="stylesheet" href="{{ \MVC\Classe\Url::asset_rewrite('assets/css/custom.css')}}">
@if(\MVC\Classe\Browser::get() == 'Internet Explorer')
<link rel="stylesheet" href="{{\MVC\Classe\Url::asset_rewrite('assets/html5-simple-date-input-polyfill-master/html5-simple-date-input-polyfill.css')}}">
<!--<link rel="stylesheet" href="{{\MVC\Classe\Url::asset_rewrite('assets/hyperform-0.12.0/css/hyperform.css')}}">-->
@endif
@show
</head>
@ -36,6 +41,15 @@
<body>
@section('top-javascript')
@if(\MVC\Classe\Browser::get() == 'Internet Explorer')
<!-- Polyfill.io will load polyfills your browser needs -->
<script src="https://polyfill.io/v3/polyfill.min.js?features=default%2CNumber.parseInt%2CNumber.parseFloat%2CArray.prototype.find%2CArray.prototype.includes"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/7.12.1/polyfill.min.js" integrity="sha512-uzOpZ74myvXTYZ+mXUsPhDF+/iL/n32GDxdryI2SJronkEyKC8FBFRLiBQ7l7U/PTYebDbgTtbqTa6/vGtU23A==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js"></script>
<script src="{{\MVC\Classe\Url::asset_rewrite('assets/html5-simple-date-input-polyfill-master/html5-simple-date-input-polyfill.js')}}"></script>
<script src="{{\MVC\Classe\Url::asset_rewrite('assets/hyperform-0.12.0/dist/hyperform.js')}}"></script>
<script>hyperform(window);</script>
@endif
@show
@yield('body')
@ -43,6 +57,35 @@
@section('bottom-javascript')
<script src="{{ \MVC\Classe\Url::asset_rewrite('assets/bootstrap-5.0.0-beta1-dist/js/bootstrap.min.js')}}"></script>
<script src="{{ \MVC\Classe\Url::asset_rewrite('assets/js/custom.js')}}"></script>
@if(\MVC\Classe\Browser::get() !== 'Internet Explorer')
<script>
/*
SCRIPT JS permettant de ne valider qu'une seule fois un formulaire
ATTENTION tous les formulaires sont affecté
Lors d'une validation bootstrap personnalisé veuillez utilisé
la class do-resubmit sur le formulaire afin de permettre
l'activation supplémentaire du bouton.
*/
window.onload = function() {
let PreventAllforms = document.querySelectorAll("form");
Array.prototype.slice.call(PreventAllforms)
.forEach(function (PreventForm) {
PreventForm.onsubmit = submitted.bind(PreventForm);
});
}
function submitted(event) {
if (event.target.classList.contains('do-resubmit')) {
event.submitter.disabled = false;
}else{
event.submitter.disabled = true;
}
}
</script>
@endif
@show
</body>

View file

@ -0,0 +1,72 @@
<!DOCTYPE html>
<html>
<head>
{% block head %}
<title>{{page_title}}</title>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="author" content="" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="description" lang="fr" content="{{description}}"/>
<link rel="apple-touch-icon" sizes="57x57" href="/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
{% block topCss %}
<link rel="stylesheet" href="{{ call("\\MVC\\Classe\\Url","asset_rewrite",['assets/bootstrap-5.0.0-beta1-dist/css/bootstrap.min.css'])}}">
<link rel="stylesheet" href="{{ call("\\MVC\\Classe\\Url","asset_rewrite",['assets/css/custom.css'])}}">
{% endblock %}
{% endblock %}
</head>
<body>
{% block topJavascript %}{% endblock %}
{% block body %}{% endblock %}
{% block bottomJavascript %}
<script src="{{ call("\\MVC\\Classe\\Url","asset_rewrite",['assets/bootstrap-5.0.0-beta1-dist/js/bootstrap.min.js'])}}"></script>
<script src="{{ call("\\MVC\\Classe\\Url","asset_rewrite",['assets/js/custom.js'])}}"></script>
{#
SCRIPT JS permettant de ne valider qu'une seule fois un formulaire
ATTENTION tous les formulaires sont affecté
Lors d'une validation bootstrap personnalisé veuillez utilisé
la class do-resubmit sur le formulaire afin de permettre
l'activation supplémentaire du bouton.
#}
<script>
window.onload = function() {
let PreventAllforms = document.querySelectorAll("form");
Array.prototype.slice.call(PreventAllforms)
.forEach(function (PreventForm) {
PreventForm.onsubmit = submitted.bind(PreventForm);
});
}
function submitted(event) {
if (event.target.classList.contains('do-resubmit')) {
event.submitter.disabled = false;
}else{
event.submitter.disabled = true;
}
}
</script>
{% endblock %}
</body>
</html>

View file

@ -0,0 +1 @@
{{var1}}::{{var2}}::{{var3}}

View file

@ -6,14 +6,22 @@
@section('content')
@if (isset($files))
<h1>Sommaire:</h1>
@foreach( $files as $file)
<a href="{{ \MVC\Classe\Url::link_rewrite( false, 'docs', ['file'=>$file]) }}">{{ $file }}</a> <br/>
@endforeach
@endif
@if (isset($data))
<div style="display:block;position:relative;width:450px;margin:auto;">
@if (isset($previous))<a href="{{ \MVC\Classe\Url::link_rewrite( false, 'docs', ['file'=>$previous]) }}" class="btn btn-outline-info"> &laquo; Précedent</a>@endif
<a href="{{ \MVC\Classe\Url::link_rewrite( false, 'docs', []) }}" class="btn btn-info">Sommaire</a>
@if (isset($next))<a href="{{ \MVC\Classe\Url::link_rewrite( false, 'docs', ['file'=>$next]) }}" class="btn btn-outline-info">Suivant &raquo; </a>@endif
</div>
{{$data}}
<div style="display:block;position:relative;width:450px;margin:auto;">
@if (isset($previous))<a href="{{ \MVC\Classe\Url::link_rewrite( false, 'docs', ['file'=>$previous]) }}" class="btn btn-outline-info"> &laquo; Précedent</a>@endif
<a href="{{ \MVC\Classe\Url::link_rewrite( false, 'docs', []) }}" class="btn btn-info">Sommaire</a>
@if (isset($next))<a href="{{ \MVC\Classe\Url::link_rewrite( false, 'docs', ['file'=>$next]) }}" class="btn btn-outline-info">Suivant &raquo; </a>@endif
</div>
@endif
@endsection

View file

@ -0,0 +1,165 @@
{{-- Vue Blade de la page d'erreur lors d'une fermeture de l'application--}}
@extends('body-nomenu')
@section('content')
<div id="access-denied">
<div class="container">
<h1>:) Oops!</h1>
<h2>Temporairement fermée</h2>
<h3>L'application est de retour bientôt!</h3>
<p>
Désolé pour cette gêne mais il se trouve que l'application est fermée à ce moment !
<br/>
Le service
<br/>
<a href="mailto:application@localhost.fr">application@localhost.fr</a>
</p>
<br /><br />
<br /><br />
<div id="gears">
<svg version="1.1" id="svg-animation-example" class="svg-line-drawing rtl-magazine-animation" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="720" height="310" viewBox="0 0 720 310" xml:space="preserve" aria-hidden="true" >
<defs>
<clipPath id="mask-page">
<path class="stroke-alt stroke-width linecap" d="m240,275 l240,0 0,-217 -240,0z" />
</clipPath>
</defs>
<!-- content page -->
<g clip-path="url(#mask-page)">
<g class="ani-move-page is-animated">
<!-- section one -->
<path class="stroke stroke-width linecap" d="m0,275 m254,-203 l212,0 0,112 -212,0z" fill="none" />
<path class="stroke-alt stroke-width linecap" d="m0,275 m272,-172 a13 13 180 0 1 26,0 a13 13 180 0 1 -26,0" fill="none" />
<path class="stroke stroke-width linecap" d="m0,275 m254,-203 m22,112 l34,-44 a9 9 180 0 1 13,-1 l15,16 38,-48 a5 5 180 0 1 8.4,0 l60,77" fill="none" />
<path class="stroke stroke-width linecap" d="m0,275 m254,-67 l212,0 m-212,10 l54,0 m25,0 l54,0 m25,0 l54,0 m-212,10 l54,0 m25,0 l54,0 m25,0 l54,0" fill="none" />
<!-- button section one -->
<path class="stroke stroke-width linecap" d="m350,250 a10 10 180 0 1 20,0 a10 10 180 0 1 -20,0 m6.8,-1.7 l3.2,3.2 3.2,-3.2" fill="none" />
<path class="stroke stroke-width linecap" d="m318,290 l0,430" fill="none" />
<path class="stroke stroke-width linecap" d="m333,306 l54,0 m-54,10 l54,0 m-54,10 l133,0 m-133,10 l133,0" fill="none" />
<path class="stroke stroke-width linecap" d="m333,356 l133,0 0,78 -133,0 0,-78 m0,90 l54,0 m-54,10 l54,0 m-54,20 133,0 0,78 -133,0 0,-78 m0,90 l54,0 m-54,10 l54,0 m-54,20 133,0 0,78 -133,0 0,-78 m0,90 l54,0 m-54,10 l54,0 m-54,20" fill="none" />
<!-- section two -->
<path class="stroke stroke-width linecap" d="m0,680 m0,275 m254,-203 l212,0 0,112 -212,0z" fill="none" />
<path class="stroke-alt stroke-width linecap" d="m0,680 m0,275 m272,-172 a13 13 180 0 1 26,0 a13 13 180 0 1 -26,0" fill="none" />
<path class="stroke stroke-width linecap" d="m0,680 m0,275 m254,-203 m22,112 l34,-44 a9 9 180 0 1 13,-1 l15,16 38,-48 a5 5 180 0 1 8.4,0 l60,77" fill="none" />
<path class="stroke stroke-width linecap" d="m0,680 m0,275 m254,-67 l212,0 m-212,10 l54,0 m25,0 l54,0 m25,0 l54,0 m-212,10 l54,0 m25,0 l54,0 m25,0 l54,0" fill="none" />
<!-- button section two -->
<path class="stroke stroke-width linecap" d="m0,680 m350,250 a10 10 180 0 1 20,0 a10 10 180 0 1 -20,0 m6.8,-1.7 l3.2,3.2 3.2,-3.2" fill="none" />
</g>
<g class="ani-move-menu is-animated">
<g>
<path class="stroke stroke-width linecap" d="m254,306 l54,0 m-54,10 l54,0 m-54,10 l54,0 m-54,10 l54,0" fill="none" />
</g>
</g>
</g>
<!-- fade button -->
<g class="ani-fade-button is-animated" opacity="0" >
<path class="stroke-background stroke-overlay linecap" d="m350,250 a10 10 180 0 1 20,0 a10 10 180 0 1 -20,0 m6.8,-1.7 l3.2,3.2 3.2,-3.2" fill="none" />
<path class="stroke-alt stroke-width linecap" d="m350,250 a10 10 180 0 1 20,0 a10 10 180 0 1 -20,0 m6.8,-1.7 l3.2,3.2 3.2,-3.2" fill="none" />
</g>
<!-- baseline -->
<path class="stroke stroke-width linecap" d="m0,275 l240,0 0,-230 a5 5 90 0 1 5,-5 l230,0 a5 5 90 0 1 5,5 l0,230 240,0" fill="none" />
<path class="stroke stroke-width linecap" d="m0,275 m240,-217 l240,0" fill="none" />
<path class="stroke stroke-width linecap" d="m0,275 m240,-226 m10,0 a4 4 180 0 1 8,0 a4 4 180 0 1 -8,0 m14,0 a4 4 180 0 1 8,0 a4 4 180 0 1 -8,0 m14,0 a4 4 180 0 1 8,0 a4 4 180 0 1 -8,0" fill="none" />
<defs>
<style>
.svg-line-drawing {
width: 100%;
}
.svg-line-drawing .stroke-background {
stroke: #eddd3e;
}
.svg-line-drawing .stroke {
stroke: #12353C;
}
.svg-line-drawing .stroke-alt {
stroke: #ffffff;
}
.svg-line-drawing .stroke-width {
stroke-width: 2;
}
.svg-line-drawing .stroke-overlay {
stroke-width: 3;
}
.svg-line-drawing .linecap {
stroke-linecap: round;
stroke-linejoin: round;
}
.rtl-magazine-animation .ani-fade-button,
.rtl-magazine-animation .ani-move-page,
.rtl-magazine-animation .ani-move-menu {
-webkit-animation-duration: 5500ms;
animation-duration: 5500ms;
-webkit-animation-timing-function: ease;
animation-timing-function: ease;
-webkit-animation-delay: 100ms;
animation-delay: 100ms;
-webkit-animation-iteration-count: infinite;
animation-iteration-count: infinite;
}
.rtl-magazine-animation .ani-fade-button {
-webkit-animation-name: fade-button;
animation-name: fade-button;
}
.rtl-magazine-animation .ani-move-page {
-webkit-animation-name: move-page;
animation-name: move-page;
}
.rtl-magazine-animation .ani-move-menu {
-webkit-animation-name: move-menu;
animation-name: move-menu;
}
@-webkit-keyframes fade-button {
0%, 12%, 100% { opacity: 0; }
9%, 11% { opacity: 1; }
}
@keyframes fade-button {
0%, 12%, 100% { opacity: 0; }
9%, 11% { opacity: 1; }
}
@-webkit-keyframes move-page {
0%, 14%, 100% { -webkit-transform: translateY(0px); -webkit-animation-timing-function: ease-in; }
28% { -webkit-transform: translateY(-220px); -webkit-animation-timing-function: linear; }
80%, 99.9999% { -webkit-transform: translateY(-680px); -webkit-animation-timing-function: linear; }
}
@keyframes move-page {
0%, 14%, 100% { transform: translateY(0px); animation-timing-function: ease-in; }
28% { transform: translateY(-220px); animation-timing-function: linear; }
80%, 99.9999% { transform: translateY(-680px); animation-timing-function: linear; }
}
@-webkit-keyframes move-menu {
0%, 14%, 100% { -webkit-transform: translateY(0px); -webkit-animation-timing-function: ease-in; }
28%, 68.6957% { -webkit-transform: translateY(-220px); -webkit-animation-timing-function: linear; }
80% { -webkit-transform: translateY(-320px); -webkit-animation-timing-function: linear; }
99.9999% { -webkit-transform: translateY(-680px); -webkit-animation-timing-function: linear; }
}
@keyframes move-menu {
0%, 14%, 100% { transform: translateY(0px); animation-timing-function: ease-in; }
28%, 68.6957% { transform: translateY(-220px); animation-timing-function: linear; }
80% { transform: translateY(-320px); animation-timing-function: linear; }
99.9999% { transform: translateY(-680px); animation-timing-function: linear; }
}
</style>
</defs>
</svg>
</div>
</div>
</div>
@endsection

View file

@ -0,0 +1,612 @@
{{-- Vue Blade de la page d'erreur lors d'une maintenance de l'application--}}
@extends('body-nomenu')
@section('top-css')
@parent
<style>
.crane__list,
.skyscrappers__list,
.tree__container {
position: absolute;
width: 100%;
bottom: 0;
}
.advice {
display: flex;
height: 50vh;
width: 100vw;
flex-flow: column nowrap;
justify-content: center;
align-items: center;
}
.advice__title {
font-size: 3rem;
text-align: center;
}
.advice__description {
margin-top: 1rem;
font-size: 2rem;
text-align: center;
}
.advice__description span:first-child {
margin-right: -0.7rem;
}
.advice__description span:last-child {
margin-left: -0.7rem;
}
.city-stuff {
display: flex;
position: absolute;
justify-content: center;
width: 100%;
height: 100%;
bottom: 0;
overflow: hidden;
box-shadow: inset 0 -60px 0 -30px #969696;
left: 0px;
}
.skyscrappers__list {
width: 100%;
height: 86.6666666667px;
left: 0;
}
.skyscrappers__list .skyscrapper__item {
position: absolute;
height: inherit;
bottom: 15%;
width: 43.3333333333px;
background: linear-gradient(115deg, #969696 73%, #7d7d7d 73%, #7d7d7d 100%);
}
.skyscrappers__list .skyscrapper__item::after {
content: "";
position: absolute;
width: 80%;
height: 80%;
left: 10%;
bottom: 10%;
background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAFElEQVQImWP4////fwYYIJKDEwAAfPsP8eFXG40AAAAASUVORK5CYII=") space;
}
.skyscrappers__list .skyscrapper__item:last-child:not(:only-child) {
background: #969696;
}
.skyscrappers__list .skyscrapper-1 {
width: 121.3333333333px;
height: 138.6666666667px;
right: 25%;
bottom: 0;
z-index: 10;
transform: rotate(180deg);
}
@media screen and (max-width: 450px) {
.skyscrappers__list .skyscrapper-1 {
display: none;
}
}
.skyscrappers__list .skyscrapper-2 {
width: 60.6666666667px;
height: 69.3333333333px;
right: 35%;
bottom: 0;
z-index: 10;
transform: rotate(180deg);
bottom: 10%;
}
@media screen and (max-width: 900px) {
.skyscrappers__list .skyscrapper-2 {
display: none;
}
}
@media screen and (max-width: 450px) {
.skyscrappers__list .skyscrapper-1 {
display: none;
}
}
.skyscrappers__list .skyscrapper-3 {
width: 40.4444444444px;
height: 46.2222222222px;
right: 45%;
bottom: 0;
z-index: 10;
transform: rotate(180deg);
height: 115.5555555556px;
}
@media screen and (max-width: 900px) {
.skyscrappers__list .skyscrapper-3 {
display: none;
}
}
@media screen and (max-width: 450px) {
.skyscrappers__list .skyscrapper-1 {
display: none;
}
}
.skyscrappers__list .skyscrapper-4 {
width: 30.3333333333px;
height: 34.6666666667px;
right: 55%;
bottom: 0;
z-index: 10;
transform: rotate(180deg);
height: 86.6666666667px;
}
.skyscrappers__list .skyscrapper-4::after {
width: 20%;
height: 60%;
left: 25%;
}
@media screen and (max-width: 450px) {
.skyscrappers__list .skyscrapper-1 {
display: none;
}
}
.skyscrappers__list .skyscrapper-5 {
width: 24.2666666667px;
height: 27.7333333333px;
right: 65%;
bottom: 0;
z-index: 10;
transform: rotate(180deg);
width: 7%;
right: 67%;
height: 50%;
z-index: 11;
}
.skyscrappers__list .skyscrapper-5::after {
height: 0;
}
@media screen and (max-width: 450px) {
.skyscrappers__list .skyscrapper-1 {
display: none;
}
}
.crane-cabin, .crane-arm, .crane-picker {
transform-origin: 80% center;
-webkit-animation: crane__movement 12s infinite alternate;
animation: crane__movement 12s infinite alternate;
}
.crane__list {
width: 260px;
height: 173.3333333333px;
z-index: 0;
perspective: 600px;
}
.crane__list .crane__item {
position: absolute;
border: solid 1px #969696;
border-radius: 2px;
}
.crane__list .crane-cable {
width: 1px;
height: 1px;
border: none;
outline: 1px solid transparent;
background: #969696;
z-index: 0;
}
.crane__list .crane-cable-1 {
width: 60%;
top: 0;
left: 11%;
transform-origin: right 0;
-webkit-animation: cable-1__movement 12s infinite alternate;
animation: cable-1__movement 12s infinite alternate;
}
.crane__list .crane-cable-2 {
width: 19%;
top: 0;
right: 8%;
transform-origin: top left;
-webkit-animation: cable-2__movement 12s infinite alternate;
animation: cable-2__movement 12s infinite alternate;
}
.crane__list .crane-cable-3 {
height: 30%;
top: 22%;
left: 9%;
transform-origin: right center;
-webkit-animation: cable-3__movement 12s ease-in-out infinite alternate;
animation: cable-3__movement 12s ease-in-out infinite alternate;
}
.crane__list .crane-cable-3::after {
content: "";
display: block;
position: absolute;
height: 0.2em;
width: 9000%;
bottom: 0;
left: -4500%;
background: #c9c9c9;
border: 1px solid #969696;
}
.crane__list .crane-stand {
width: 5%;
height: 100%;
right: 25%;
z-index: 1;
background: linear-gradient(to top, #969696, #e3e3e3);
}
.crane__list .crane-weight {
width: 8%;
height: 20%;
right: 4%;
top: 12%;
z-index: 2;
background: #d6d6d6;
transform-origin: 0 center;
-webkit-animation: crane-weight__movement 12s infinite alternate;
animation: crane-weight__movement 12s infinite alternate;
}
.crane__list .crane-cabin {
width: 12%;
height: 9%;
right: 24%;
top: 20%;
z-index: 2;
background: #d6d6d6;
}
.crane__list .crane-cabin::after {
content: "";
display: block;
position: absolute;
width: 100%;
height: 10%;
top: 60%;
left: 0;
background: white;
}
.crane__list .crane-arm {
width: 100%;
height: 7%;
top: 15%;
border-top-left-radius: 10px;
z-index: 3;
background: #d6d6d6;
}
.crane-1 {
left: 20%;
z-index: 10;
}
.crane-2 {
left: 30%;
z-index: 10;
bottom: -1rem;
z-index: -1;
transform: scale(0.75) scaleX(-1);
}
@media screen and (max-width: 900px) {
.crane-2 {
display: none;
}
}
.crane-2 .crane-cable-3 {
-webkit-animation-delay: 3s;
animation-delay: 3s;
}
.crane-3 {
left: 40%;
z-index: 10;
bottom: -0.5rem;
transform: scale(0.8);
}
@media screen and (max-width: 900px) {
.crane-3 {
z-index: -1;
transform: scale(0.75) scaleX(-1);
}
}
@media screen and (max-width: 900px) {
.crane-3 {
display: none;
}
}
.crane-3 .crane-cable-3 {
-webkit-animation-delay: 4.5s;
animation-delay: 4.5s;
}
.tree__container {
width: 100%;
height: 62.6666666667px;
left: 0;
margin-bottom: 4px;
}
.tree__item {
display: flex;
flex-flow: column nowrap;
position: absolute;
justify-content: flex-end;
align-items: center;
left: 60%;
}
.tree__trunk {
order: 2;
display: block;
position: absolute;
width: 4px;
height: 8px;
margin-top: 8px;
border-radius: 2px;
background: #57473d;
}
.tree__leaves {
order: 1;
position: relative;
border-top: 0 solid transparent;
border-right: 4px solid transparent;
border-bottom: 32px solid #969696;
border-left: 4px solid transparent;
}
.tree__leaves::after {
content: "";
position: absolute;
height: 100%;
left: -4px;
border-top: 0;
border-right: 0;
border-bottom: 32px solid #7d7d7d;
border-left: 4px solid transparent;
}
.tree-1 {
left: 66%;
}
@media screen and (max-width: 768px) {
.tree-1 {
display: none;
}
}
.tree-2 {
left: 67%;
}
@media screen and (max-width: 768px) {
.tree-2 {
display: none;
}
}
.tree-4 {
left: 57%;
}
.tree-5 {
left: 58%;
}
.tree-7 {
left: 51%;
}
@media screen and (max-width: 450px) {
.tree-7 {
display: none;
}
}
.tree-8 {
left: 52%;
}
@media screen and (max-width: 450px) {
.tree-8 {
display: none;
}
}
@-webkit-keyframes cable-1__movement {
0%, 20% {
transform: rotateY(0) rotateZ(-10deg);
}
70%, 100% {
transform: rotateY(45deg) rotateZ(-10deg);
}
}
@keyframes cable-1__movement {
0%, 20% {
transform: rotateY(0) rotateZ(-10deg);
}
70%, 100% {
transform: rotateY(45deg) rotateZ(-10deg);
}
}
@-webkit-keyframes cable-2__movement {
0%, 20% {
transform: rotateY(0) rotateZ(29deg);
}
70%, 100% {
transform: rotateY(15deg) rotateZ(29deg);
}
}
@keyframes cable-2__movement {
0%, 20% {
transform: rotateY(0) rotateZ(29deg);
}
70%, 100% {
transform: rotateY(15deg) rotateZ(29deg);
}
}
@-webkit-keyframes cable-3__movement {
0% {
transform: translate(0, 0);
}
20% {
transform: translate(2500%, -18%);
}
60% {
transform: translate(11000%, -25%);
}
70% {
height: 30%;
transform: translate(9100%, -25%);
}
90%, 100% {
height: 80%;
transform: translate(9100%, -15%);
}
}
@keyframes cable-3__movement {
0% {
transform: translate(0, 0);
}
20% {
transform: translate(2500%, -18%);
}
60% {
transform: translate(11000%, -25%);
}
70% {
height: 30%;
transform: translate(9100%, -25%);
}
90%, 100% {
height: 80%;
transform: translate(9100%, -15%);
}
}
@-webkit-keyframes crane__movement {
0%, 20% {
transform: rotateY(0);
}
70%, 100% {
transform: rotateY(45deg);
}
}
@keyframes crane__movement {
0%, 20% {
transform: rotateY(0);
}
70%, 100% {
transform: rotateY(45deg);
}
}
@-webkit-keyframes crane-weight__movement {
0%, 20% {
transform: rotateY(0) translateX(0);
}
70%, 100% {
transform: rotateY(45deg) translateX(-50%);
}
}
@keyframes crane-weight__movement {
0%, 20% {
transform: rotateY(0) translateX(0);
}
70%, 100% {
transform: rotateY(45deg) translateX(-50%);
}
}
</style>
@endsection
@section('content')
<div id="access-denied" style="overflow: hidden;">
<div class="container">
<h1>:) Oops!</h1>
<br /><br />
<h2>Temporairement fermée pour maintenance</h2>
@if(\MVC\Classe\Application::is_under_update())
<pre>{{MAINTENANCE_MESSAGE}}</pre>
@endif
<br /><br />
<h3>L'application est de retour bientôt!</h3>
<p>
Désolé pour cette gêne mais il se trouve que l'application est en maintenance à ce moment !
<br/>
Le service
<br/>
<a href="mailto:application@localhost.fr">application@localhost.fr</a>
</p>
<br /><br />
<br /><br />
<br /><br />
<br /><br />
<br /><br />
<br /><br />
<div id="gears">
<section class="city-stuff">
<ul class="skyscrappers__list">
<li class="skyscrapper__item skyscrapper-1"></li>
<li class="skyscrapper__item skyscrapper-2"></li>
<li class="skyscrapper__item skyscrapper-3"></li>
<li class="skyscrapper__item skyscrapper-4"></li>
<li class="skyscrapper__item skyscrapper-5"></li>
</ul>
<ul class="tree__container">
<li class="tree__list">
<ul class="tree__item tree-1">
<li class="tree__trunk"></li>
<li class="tree__leaves"></li>
</ul>
<ul class="tree__item tree-2">
<li class="tree__trunk"></li>
<li class="tree__leaves"></li>
</ul>
<ul class="tree__item tree-3">
<li class="tree__trunk"></li>
<li class="tree__leaves"></li>
</ul>
<ul class="tree__item tree-4">
<li class="tree__trunk"></li>
<li class="tree__leaves"></li>
</ul>
<ul class="tree__item tree-5">
<li class="tree__trunk"></li>
<li class="tree__leaves"></li>
</ul>
<ul class="tree__item tree-6">
<li class="tree__trunk"></li>
<li class="tree__leaves"></li>
</ul>
<ul class="tree__item tree-7">
<li class="tree__trunk"></li>
<li class="tree__leaves"></li>
</ul>
<ul class="tree__item tree-8">
<li class="tree__trunk"></li>
<li class="tree__leaves"></li>
</ul>
</li>
</ul>
<ul class="crane__list crane-1">
<li class="crane__item crane-cable crane-cable-1"></li>
<li class="crane__item crane-cable crane-cable-2"></li>
<li class="crane__item crane-cable crane-cable-3"></li>
<li class="crane__item crane-stand"></li>
<li class="crane__item crane-weight"></li>
<li class="crane__item crane-cabin"></li>
<li class="crane__item crane-arm"></li>
</ul>
<ul class="crane__list crane-2">
<li class="crane__item crane-cable crane-cable-1"></li>
<li class="crane__item crane-cable crane-cable-2"></li>
<li class="crane__item crane-cable crane-cable-3"></li>
<li class="crane__item crane-stand"></li>
<li class="crane__item crane-weight"></li>
<li class="crane__item crane-cabin"></li>
<li class="crane__item crane-arm"></li>
</ul>
<ul class="crane__list crane-3">
<li class="crane__item crane-cable crane-cable-1"></li>
<li class="crane__item crane-cable crane-cable-2"></li>
<li class="crane__item crane-cable crane-cable-3"></li>
<li class="crane__item crane-stand"></li>
<li class="crane__item crane-weight"></li>
<li class="crane__item crane-cabin"></li>
<li class="crane__item crane-arm"></li>
</ul>
</section>
</div>
</div>
</div>
@endsection

View file

@ -39,6 +39,7 @@
@section('bottom-javascript')
@parent
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.3up.dk/in-view@0.6.1"></script>
<script type="text/javascript">
var formatThousandsNoRounding = function(n, dp){

View file

@ -0,0 +1,51 @@
@extends('body')
@section('content')
<div class="flex-center-container">
De 1 à 10, combien d'étoiles donneriez-vous pour le framework SAND?
<br/><br/><br/>
<div class="form-field box">
<form method="POST" action="{{\MVC\Classe\Url::link_rewrite(true,"send-feedback")}}">
<select name="glsr-custom-options" id="glsr-custom-options" class="star-rating" data-options='{"clearable":false, "tooltip":true}'>
<option value="">Select a rating</option>
<option value="10">10</option>
<option value="9">9</option>
<option value="8" selected>8</option>
<option value="7">7</option>
<option value="6">6</option>
<option value="5">5</option>
<option value="4">4</option>
<option value="3">3</option>
<option value="2">2</option>
<option value="1">1</option>
</select>
<br/>
<input type="submit" class="btn btn-outline-primary" value="Noter">
</form>
</div>
</div>
<center>
<br/><br/>
<br/><br/>
<br/><br/>
Un bug, une question ? envoyez-moi un courriel !
</center>
@endsection
@section('top-css')
@parent
<link rel="stylesheet" href="{{\MVC\Classe\Url::asset_rewrite('assets/star-rating.js-master/dist/star-rating.css')}}">
@endsection
@section('top-javascript')
@parent
<script src="{{\MVC\Classe\Url::asset_rewrite('assets/star-rating.js-master/dist/star-rating.js')}}"></script>
@endsection
@section('bottom-javascript')
@parent
<script>
var stars = new StarRating('.star-rating');
</script>
@endsection

View file

@ -1 +1,11 @@
{{$app->load('gitlist')}}
@extends('body')
@section('sidebar')
@parent
<p>This is appended to the master sidebar.</p>
@endsection
@section('content')
{{$app->load('gitlist')}}
@endsection

View file

@ -14,7 +14,7 @@
{{$templating_a}}::{{$templating_b}}::{{$templating_c}}
{{\MVC\Classe\ControlleurAction::inserer('default',[])}}
{{\MVC\Classe\ControlleurAction::inserer('default.default',[4,5,6])}}
{{\MVC\Classe\ControlleurAction::inserer('default.defaultBlade',[4,5,6])}}
{{\MVC\Classe\ControlleurAction::inserer('default.variableSlug',['var1','var2','var3'])}}
@endsection

View file

@ -1 +1,10 @@
INDEX
{% extends "body.html.twig" %}
{% block content %}
<h1>Accueil de l'url</h1>
<h2> {{server('SERVER_NAME')}}</h2>
<br /><br /><br />
<hr/>
{{templating_a}}::{{templating_b}}::{{templating_c}}
{{ action('default.defaultTwig',[4,5,6]) }}
{% endblock %}

View file

@ -0,0 +1,69 @@
@extends('body')
@section('top-javascript')
@parent
<script src="https://unpkg.com/react@^16/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@16.13.0/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/babel-standalone@6.26.0/babel.js"></script>
@endsection
@section('content')
<h1>%PAGE% - REACT.js Controlleur</h1>
<br/><br/><br/>
<div id="root"></div>
@endsection
@section('bottom-javascript')
@parent
<script type="text/babel">
class App extends React.Component {
state = {
data: [],
}
// Code is invoked after the component is mounted/inserted into the DOM tree.
componentDidMount() {
const url =
'https://ghibliapi.herokuapp.com/films'
fetch(url)
.then((result) => result.json())
.then((result) => {
this.setState({
data: result,
})
})
}
render() {
const {data} = this.state
const result = data.map(obj => {
return (
<a href="#" key="{obj.id}">
<div>
<div>
<h2>
{obj.title}
</h2>
</div>
</div>
<div>
<p>
{obj.description.slice(0, 300) + "..." }
</p>
</div>
<div>
<span>Year : {obj.release_date }</span>
<span>Director : {obj.director }</span>
<span>Producer : {obj.producer }</span>
</div>
</a>);
})
return <div>{result}</div>
}
}
ReactDOM.render(<App />, document.getElementById('root'))
</script>
@endsection

View file

@ -0,0 +1,82 @@
@extends('body')
@section('top-javascript')
@parent
<script src="https://unpkg.com/vue@2.6.12/dist/vue.js"></script>
<script src="https://unpkg.com/axios@0.21.1/dist/axios.min.js"></script>
@endsection
@section('content')
<h1>%PAGE% - VUE.js Controlleur</h1>
<br/><br/><br/>
<div id="app">
<div>
<input v-model="searchText" placeholder="Search...">
</div>
<div v-if="is_loading">
<div class="lds-ellipsis"><div></div><div></div><div></div><div></div></div>
</div>
<div v-if="items" >
<a href="#" v-for="item in itemsSearched" :key="item.id">
<div>
<div>
<h2>
@{{ item.title }}
</h2>
</div>
</div>
<div>
<p>
@{{ item.description.slice(0, 300) + "..." }}
</p>
</div>
<div>
<span>Year : @{{ item.release_date }}</span>
<span>Director : @{{ item.director }}</span>
<span>Producer : @{{ item.producer }}</span>
</div>
</a>
</div>
</div>
@endsection
@section('bottom-javascript')
@parent
<script>
const vue = new Vue({
el: '#app',
data: {
items: [],
searchText: '',
is_loading: true,
},
mounted() {
axios
.get('https://ghibliapi.herokuapp.com/films')
.then(response => {
this.items = response.data;
this.is_loading = false
})
.catch(error => console.log(error))
},
computed : {
itemsSearched : function(){
var self = this;
if( this.searchText == ''){
return this.items;
}
return this.items.filter(function(item){
// https://www.reddit.com/r/vuejs/comments/62kfae/how_do_i_create_very_simple_instant_search_filter/
// Must be of string type
return item.title.toLowerCase().indexOf(self.searchText) >= 0 ||
item.producer.toLowerCase().indexOf(self.searchText) >= 0 ||
item.director.toLowerCase().indexOf(self.searchText) >= 0 ||
item.release_date.toString().indexOf(self.searchText) >= 0;
});
}
}
});
</script>
@endsection

View file

@ -0,0 +1 @@
!/vendor

View file

@ -0,0 +1,2 @@
*
!.gitignore

View file

@ -0,0 +1,2 @@
*
!.gitignore

View file

@ -1,104 +0,0 @@
<?php
/* branch_menu.twig */
class __TwigTemplate_aca6c30a6759b6d7591ed76011bd578eac07d37d878fbf1ab9a2f5ca25959db7 extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
$this->parent = false;
$this->blocks = array(
);
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
echo "<div class=\"btn-group pull-left space-right\" id=\"branchList\">
<button class=\"btn dropdown-toggle\" data-toggle=\"dropdown\">browsing: <strong>";
// line 2
echo twig_escape_filter($this->env, ($context["branch"] ?? null), "html", null, true);
echo "</strong> <span class=\"caret\"></span></button>
<div class=\"dropdown-menu\">
<div class=\"search\">
<input class=\"search\" placeholder=\"Filter branch/tags\" autofocus>
</div>
<ul class=\"unstyled list\">
<li class=\"dropdown-header\">Branches</li>
";
// line 10
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable(($context["branches"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["item"]) {
// line 11
echo " <li><a href=\"";
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("branch", array("repo" => ($context["repo"] ?? null), "branch" => $context["item"])), "html", null, true);
echo "\"><span class=\"item\">";
echo twig_escape_filter($this->env, $context["item"], "html", null, true);
echo "</span></a></li>
";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['_key'], $context['item'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 13
echo " ";
if (($context["tags"] ?? null)) {
// line 14
echo " <li class=\"dropdown-header\">Tags</li>
";
// line 15
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable(($context["tags"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["item"]) {
// line 16
echo " <li><a href=\"";
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("branch", array("repo" => ($context["repo"] ?? null), "branch" => $context["item"])), "html", null, true);
echo "\"><span class=\"item\">";
echo twig_escape_filter($this->env, $context["item"], "html", null, true);
echo "</span></a></li>
";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['_key'], $context['item'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 18
echo " ";
}
// line 19
echo " </ul>
</div>
</div>";
}
public function getTemplateName()
{
return "branch_menu.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 72 => 19, 69 => 18, 58 => 16, 54 => 15, 51 => 14, 48 => 13, 37 => 11, 33 => 10, 22 => 2, 19 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "branch_menu.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/branch_menu.twig");
}
}

View file

@ -1,91 +0,0 @@
<?php
/* menu.twig */
class __TwigTemplate_2fe34b06c775d908ab4007c2c25def8a967bdb86f49ba151a84f63931ebecda5 extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
$this->parent = false;
$this->blocks = array(
);
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
echo "<ul class=\"nav nav-tabs\">
<li";
// line 2
if ((($context["page"] ?? null) == "files")) {
echo " class=\"active\"";
}
echo "><a href=\"";
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("branch", array("repo" => ($context["repo"] ?? null), "branch" => ($context["branch"] ?? null))), "html", null, true);
echo "\">Files</a></li>
<li";
// line 3
if (twig_in_filter(($context["page"] ?? null), array(0 => "commits", 1 => "searchcommits"))) {
echo " class=\"active\"";
}
echo "><a href=\"";
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("commits", array("repo" => ($context["repo"] ?? null), "commitishPath" => ($context["branch"] ?? null))), "html", null, true);
echo "\">Commits</a></li>
<li";
// line 4
if ((($context["page"] ?? null) == "stats")) {
echo " class=\"active\"";
}
echo "><a href=\"";
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("stats", array("repo" => ($context["repo"] ?? null), "branch" => ($context["branch"] ?? null))), "html", null, true);
echo "\">Stats</a></li>
\t<li";
// line 5
if ((($context["page"] ?? null) == "network")) {
echo " class=\"active\"";
}
echo "><a href=\"";
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("network", array("repo" => ($context["repo"] ?? null), "commitishPath" => ($context["branch"] ?? null))), "html", null, true);
echo "\">Network</a></li>
\t<li";
// line 6
if ((($context["page"] ?? null) == "treegraph")) {
echo " class=\"active\"";
}
echo "><a href=\"";
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("treegraph", array("repo" => ($context["repo"] ?? null), "branch" => ($context["branch"] ?? null))), "html", null, true);
echo "\">Graph</a></li>
</ul>
";
}
public function getTemplateName()
{
return "menu.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 54 => 6, 46 => 5, 38 => 4, 30 => 3, 22 => 2, 19 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "menu.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/menu.twig");
}
}

View file

@ -1,77 +0,0 @@
<?php
/* navigation.twig */
class __TwigTemplate_05e446c547012b9f6069f85f145a56a22f33f74d75b6173f0b2c877cbd34abf8 extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
$this->parent = false;
$this->blocks = array(
);
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
echo "<div class=\"navbar navbar-scroll-top\">
<div class=\"navbar-inner\">
<div class=\"container\">
<a class=\"btn btn-navbar\" data-toggle=\"collapse\" data-target=\".nav-collapse\">
<span class=\"icon-bar\"></span>
<span class=\"icon-bar\"></span>
<span class=\"icon-bar\"></span>
</a>
<a class=\"brand\" href=\"";
// line 9
echo $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("homepage");
echo "\">";
echo twig_escape_filter($this->env, ($context["title"] ?? null), "html", null, true);
echo "</a>
<div class=\"nav-collapse\">
<ul class=\"nav pull-right\">
<li><a href=\"http://gitlist.org/\">About</a></li>
<li><a href=\"";
// line 13
echo $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("homepage");
echo "refresh\">Refresh</a></li>
<li><a href=\"https://github.com/klaussilveira/gitlist/issues/new\">Report bug</a></li>
<li><a href=\"https://github.com/klaussilveira/gitlist/wiki\">Help</a></li>
</ul>
</div>
</div>
</div>
</div>
";
}
public function getTemplateName()
{
return "navigation.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 38 => 13, 29 => 9, 19 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "navigation.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/navigation.twig");
}
}

View file

@ -1,128 +0,0 @@
<?php
/* index.twig */
class __TwigTemplate_299ca00d560c697557917a19fc0dc6a45add83cfb23d301ffbe4ebc754b60460 extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
// line 1
$this->parent = $this->loadTemplate("layout.twig", "index.twig", 1);
$this->blocks = array(
'title' => array($this, 'block_title'),
'body' => array($this, 'block_body'),
);
}
protected function doGetParent(array $context)
{
return "layout.twig";
}
protected function doDisplay(array $context, array $blocks = array())
{
$this->parent->display($context, array_merge($this->blocks, $blocks));
}
// line 2
public function block_title($context, array $blocks = array())
{
echo "GitList";
}
// line 4
public function block_body($context, array $blocks = array())
{
// line 5
$this->loadTemplate("navigation.twig", "index.twig", 5)->display($context);
// line 6
echo "
<div class=\"container\" id=\"repositories\">
<div class=\"search\">
<input class=\"search\" placeholder=\"search\" autofocus>
</div>
<div class=\"list\">
";
// line 13
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable(($context["repositories"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["repository"]) {
// line 14
echo " <div class=\"repository\">
<div class=\"repository-header\">
<i class=\"icon-folder-open icon-spaced\"></i> <a href=\"";
// line 16
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("repository", array("repo" => $this->getAttribute($context["repository"], "name", array()))), "html", null, true);
echo "\"><span class=\"name\">";
echo twig_escape_filter($this->env, $this->getAttribute($context["repository"], "name", array()), "html", null, true);
echo "</span></a>
<a href=\"";
// line 17
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("rss", array("repo" => $this->getAttribute($context["repository"], "name", array()), "branch" => "master")), "html", null, true);
echo "\"><i class=\"rss pull-right\"></i></a>
</div>
<div class=\"repository-body\">
";
// line 20
if ($this->getAttribute($context["repository"], "description", array())) {
// line 21
echo " <p>";
echo twig_escape_filter($this->env, $this->getAttribute($context["repository"], "description", array()), "html", null, true);
echo "</p>
";
} else {
// line 23
echo " <p>There is no repository description file. Please, create one to remove this message.</p>
";
}
// line 25
echo " </div>
</div>
";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['_key'], $context['repository'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 28
echo " </div>
<hr />
";
// line 32
$this->loadTemplate("footer.twig", "index.twig", 32)->display($context);
// line 33
echo "</div>
";
}
public function getTemplateName()
{
return "index.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 97 => 33, 95 => 32, 89 => 28, 81 => 25, 77 => 23, 71 => 21, 69 => 20, 63 => 17, 57 => 16, 53 => 14, 49 => 13, 40 => 6, 38 => 5, 35 => 4, 29 => 2, 11 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "index.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/index.twig");
}
}

View file

@ -1,157 +0,0 @@
<?php
/* stats.twig */
class __TwigTemplate_98543b80a47af36b1586e69a451be3632a35de4ef0b1e97de8a7933e9a7137a2 extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
// line 1
$this->parent = $this->loadTemplate("layout_page.twig", "stats.twig", 1);
$this->blocks = array(
'title' => array($this, 'block_title'),
'content' => array($this, 'block_content'),
);
}
protected function doGetParent(array $context)
{
return "layout_page.twig";
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 3
$context["page"] = "stats";
// line 1
$this->parent->display($context, array_merge($this->blocks, $blocks));
}
// line 5
public function block_title($context, array $blocks = array())
{
echo "GitList";
}
// line 7
public function block_content($context, array $blocks = array())
{
// line 8
echo " ";
$this->loadTemplate("breadcrumb.twig", "stats.twig", 8)->display(array_merge($context, array("breadcrumbs" => array(0 => array("dir" => "Statistics", "path" => "")))));
// line 9
echo "
<table class=\"table table-striped table-bordered\">
<thead>
<tr>
<th width=\"30%\">File extensions (";
// line 13
echo twig_escape_filter($this->env, twig_length_filter($this->env, $this->getAttribute(($context["stats"] ?? null), "extensions", array())), "html", null, true);
echo ")</th>
<th width=\"40%\">Authors (";
// line 14
echo twig_escape_filter($this->env, twig_length_filter($this->env, ($context["authors"] ?? null)), "html", null, true);
echo ")</th>
<th width=\"30%\">Other</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<ul>
";
// line 22
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable($this->getAttribute(($context["stats"] ?? null), "extensions", array()));
foreach ($context['_seq'] as $context["ext"] => $context["amount"]) {
// line 23
echo " <li><strong>";
echo twig_escape_filter($this->env, $context["ext"], "html", null, true);
echo "</strong>: ";
echo twig_escape_filter($this->env, $context["amount"], "html", null, true);
echo " files</li>
";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['ext'], $context['amount'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 25
echo " </ul>
</td>
<td>
<ul>
";
// line 29
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable(($context["authors"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["author"]) {
// line 30
echo " <li><strong><a href=\"mailto:";
echo twig_escape_filter($this->env, $this->getAttribute($context["author"], "email", array()), "html", null, true);
echo "\">";
echo twig_escape_filter($this->env, $this->getAttribute($context["author"], "name", array()), "html", null, true);
echo "</a></strong>: ";
echo twig_escape_filter($this->env, $this->getAttribute($context["author"], "commits", array()), "html", null, true);
echo " commits</li>
";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['_key'], $context['author'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 32
echo " </ul>
</td>
<td>
<p>
<strong>Total files:</strong> ";
// line 36
echo twig_escape_filter($this->env, $this->getAttribute(($context["stats"] ?? null), "files", array()), "html", null, true);
echo "
</p>
<p>
<strong>Total bytes:</strong> ";
// line 40
echo twig_escape_filter($this->env, $this->getAttribute(($context["stats"] ?? null), "size", array()), "html", null, true);
echo " bytes (";
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFilter('format_size')->getCallable(), array($this->getAttribute(($context["stats"] ?? null), "size", array()))), "html", null, true);
echo ")
</p>
</td>
</tr>
</tbody>
</table>
<hr />
";
}
public function getTemplateName()
{
return "stats.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 116 => 40, 109 => 36, 103 => 32, 90 => 30, 86 => 29, 80 => 25, 69 => 23, 65 => 22, 54 => 14, 50 => 13, 44 => 9, 41 => 8, 38 => 7, 32 => 5, 28 => 1, 26 => 3, 11 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "stats.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/stats.twig");
}
}

View file

@ -1,106 +0,0 @@
<?php
/* rss.twig */
class __TwigTemplate_be4459a381a3a1331de1ea737c9f1263db58cab8b3ee9a8dbf74d5375cfe781f extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
$this->parent = false;
$this->blocks = array(
);
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
echo "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>
<rss version=\"2.0\">
<channel>
<title>Latest commits in ";
// line 4
echo twig_escape_filter($this->env, ($context["repo"] ?? null), "html", null, true);
echo ":";
echo twig_escape_filter($this->env, ($context["branch"] ?? null), "html", null, true);
echo "</title>
<description>RSS provided by GitList</description>
<link>";
// line 6
echo $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getUrl("homepage");
echo "</link>
";
// line 8
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable(($context["commits"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["commit"]) {
// line 9
echo " <item>
<title>";
// line 10
echo twig_escape_filter($this->env, $this->getAttribute($context["commit"], "message", array()), "html", null, true);
echo "</title>
<description>";
// line 11
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute($context["commit"], "author", array()), "name", array()), "html", null, true);
echo " authored ";
echo twig_escape_filter($this->env, $this->getAttribute($context["commit"], "shortHash", array()), "html", null, true);
echo " in ";
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFilter('format_date')->getCallable(), array($this->getAttribute($context["commit"], "date", array()))), "html", null, true);
echo "</description>
<link>";
// line 12
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getUrl("commit", array("repo" => ($context["repo"] ?? null), "commit" => $this->getAttribute($context["commit"], "hash", array()))), "html", null, true);
echo "</link>
<pubDate>";
// line 13
echo twig_escape_filter($this->env, twig_date_format_filter($this->env, $this->getAttribute($context["commit"], "date", array()), "r"), "html", null, true);
echo "</pubDate>
<author>";
// line 14
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute($context["commit"], "author", array()), "email", array()), "html", null, true);
echo " (";
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute($context["commit"], "author", array()), "name", array()), "html", null, true);
echo ")</author>
</item>
";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['_key'], $context['commit'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 17
echo " </channel>
</rss>
";
}
public function getTemplateName()
{
return "rss.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 74 => 17, 63 => 14, 59 => 13, 55 => 12, 47 => 11, 43 => 10, 40 => 9, 36 => 8, 31 => 6, 24 => 4, 19 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "rss.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/rss.twig");
}
}

View file

@ -1,77 +0,0 @@
<?php
/* navigation.twig */
class __TwigTemplate_9ec705f6c96d081246fe5f344823a71a135d1524e81d18a7a98066049099767f extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
$this->parent = false;
$this->blocks = array(
);
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
echo "<div class=\"navbar navbar-scroll-top\">
<div class=\"navbar-inner\">
<div class=\"container\">
<a class=\"btn btn-navbar\" data-toggle=\"collapse\" data-target=\".nav-collapse\">
<span class=\"icon-bar\"></span>
<span class=\"icon-bar\"></span>
<span class=\"icon-bar\"></span>
</a>
<a class=\"brand\" href=\"";
// line 9
echo $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("homepage");
echo "\">";
echo twig_escape_filter($this->env, ($context["title"] ?? null), "html", null, true);
echo "</a>
<div class=\"nav-collapse\">
<ul class=\"nav pull-right\">
<li><a href=\"http://gitlist.org/\">About</a></li>
<li><a href=\"";
// line 13
echo $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("homepage");
echo "refresh\">Refresh</a></li>
<li><a href=\"https://github.com/klaussilveira/gitlist/issues/new\">Report bug</a></li>
<li><a href=\"https://github.com/klaussilveira/gitlist/wiki\">Help</a></li>
</ul>
</div>
</div>
</div>
</div>
";
}
public function getTemplateName()
{
return "navigation.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 38 => 13, 29 => 9, 19 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "navigation.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/navigation.twig");
}
}

View file

@ -1,185 +0,0 @@
<?php
/* layout.twig */
class __TwigTemplate_18478d8044bf2883aca4c702a8e4bd139f045132d1f5f35cc527e29fda868b78 extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
$this->parent = false;
$this->blocks = array(
'title' => array($this, 'block_title'),
'body' => array($this, 'block_body'),
'javascripts' => array($this, 'block_javascripts'),
);
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
echo "<!DOCTYPE html>
<html lang=\"en\">
<head>
<meta charset=\"UTF-8\" />
<title>";
// line 5
echo twig_escape_filter($this->env, ($context["title"] ?? null), "html", null, true);
if (($context["title"] ?? null)) {
echo " - ";
}
$this->displayBlock('title', $context, $blocks);
echo "</title>
<link rel=\"stylesheet\" type=\"text/css\" href=\"";
// line 6
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/css/style.css\">
<link rel=\"stylesheet\" type=\"text/css\" href=\"";
// line 7
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/css/gitgraph.css\">
<link rel=\"shortcut icon\" type=\"image/png\" href=\"";
// line 8
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/img/favicon.png\" />
<!--[if lt IE 9]>
<script type=\"application/javascript\" src=\"";
// line 10
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/html5.js\"></script>
<![endif]-->
</head>
<body>
";
// line 15
$this->displayBlock('body', $context, $blocks);
// line 16
echo " ";
$this->displayBlock('javascripts', $context, $blocks);
// line 29
echo " </body>
</html>
";
}
// line 5
public function block_title($context, array $blocks = array())
{
echo "Welcome!";
}
// line 15
public function block_body($context, array $blocks = array())
{
}
// line 16
public function block_javascripts($context, array $blocks = array())
{
// line 17
echo " <script type=\"application/javascript\" src=\"";
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/jquery.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 18
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/raphael.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 19
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/bootstrap.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 20
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/codemirror.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 21
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/showdown.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 22
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/table.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 23
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/list.min.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 24
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/main.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 25
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/networkGraph.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 26
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/gitgraph.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 27
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/draw.js\"></script>
";
}
public function getTemplateName()
{
return "layout.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 151 => 27, 145 => 26, 139 => 25, 133 => 24, 127 => 23, 121 => 22, 115 => 21, 109 => 20, 103 => 19, 97 => 18, 90 => 17, 87 => 16, 82 => 15, 76 => 5, 70 => 29, 67 => 16, 65 => 15, 55 => 10, 48 => 8, 42 => 7, 36 => 6, 28 => 5, 22 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "layout.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/layout.twig");
}
}

View file

@ -1,87 +0,0 @@
<?php
/* error.twig */
class __TwigTemplate_95cfad686402070ce62cd54c41698adb703af2cb3e0d3090b63b8e751e96d80a extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
// line 1
$this->parent = $this->loadTemplate("layout.twig", "error.twig", 1);
$this->blocks = array(
'title' => array($this, 'block_title'),
'body' => array($this, 'block_body'),
);
}
protected function doGetParent(array $context)
{
return "layout.twig";
}
protected function doDisplay(array $context, array $blocks = array())
{
$this->parent->display($context, array_merge($this->blocks, $blocks));
}
// line 2
public function block_title($context, array $blocks = array())
{
echo "GitList";
}
// line 4
public function block_body($context, array $blocks = array())
{
// line 5
$this->loadTemplate("navigation.twig", "error.twig", 5)->display($context);
// line 6
echo "
<div class=\"container\">
<div class=\"alert alert-error\">
<strong>Oops!</strong> ";
// line 10
echo twig_escape_filter($this->env, ($context["message"] ?? null), "html", null, true);
echo "
</div>
<hr />
";
// line 15
$this->loadTemplate("footer.twig", "error.twig", 15)->display($context);
// line 16
echo "</div>
";
}
public function getTemplateName()
{
return "error.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 56 => 16, 54 => 15, 46 => 10, 40 => 6, 38 => 5, 35 => 4, 29 => 2, 11 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "error.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/error.twig");
}
}

View file

@ -1,165 +0,0 @@
<?php
/* commits_list.twig */
class __TwigTemplate_83b91dc6b9474e28a3d067df760e7d1aaff54e6e7fd03c0d455b404713cd4305 extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
$this->parent = false;
$this->blocks = array(
);
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
if (($context["commits"] ?? null)) {
// line 2
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable(($context["commits"] ?? null));
foreach ($context['_seq'] as $context["date"] => $context["commit"]) {
// line 3
echo "<table class=\"table table-striped table-bordered\">
<thead>
<tr>
<th colspan=\"3\">";
// line 6
echo twig_escape_filter($this->env, twig_date_format_filter($this->env, $context["date"], "F j, Y"), "html", null, true);
echo "</th>
</tr>
</thead>
<tbody>
";
// line 10
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable($context["commit"]);
foreach ($context['_seq'] as $context["_key"] => $context["item"]) {
// line 11
echo " <tr>
<td width=\"5%\"><img src=\"";
// line 12
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFunction('avatar')->getCallable(), array($this->getAttribute($this->getAttribute($context["item"], "author", array()), "email", array()), 40)), "html", null, true);
echo "\" /></td>
<td width=\"95%\">
<span class=\"pull-right\"><a class=\"btn btn-small\" href=\"";
// line 14
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("commit", array("repo" => ($context["repo"] ?? null), "commit" => $this->getAttribute($context["item"], "hash", array()))), "html", null, true);
echo "\"><i class=\"icon-list-alt\"></i> View ";
echo twig_escape_filter($this->env, $this->getAttribute($context["item"], "shortHash", array()), "html", null, true);
echo "</a></span>
<h4>";
// line 15
echo twig_escape_filter($this->env, $this->getAttribute($context["item"], "message", array()), "html", null, true);
echo "</h4>
<span>
<a href=\"mailto:";
// line 17
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute($context["item"], "author", array()), "email", array()), "html", null, true);
echo "\">";
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute($context["item"], "author", array()), "name", array()), "html", null, true);
echo "</a> authored on ";
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFilter('format_date')->getCallable(), array($this->getAttribute($context["item"], "date", array()))), "html", null, true);
echo "
";
// line 18
if (($this->getAttribute($this->getAttribute($context["item"], "author", array()), "email", array()) != $this->getAttribute($this->getAttribute($context["item"], "commiter", array()), "email", array()))) {
// line 19
echo " &bull; <a href=\"mailto:";
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute($context["item"], "commiter", array()), "email", array()), "html", null, true);
echo "\">";
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute($context["item"], "commiter", array()), "name", array()), "html", null, true);
echo "</a> committed on ";
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFilter('format_date')->getCallable(), array($this->getAttribute($context["item"], "commiterDate", array()))), "html", null, true);
echo "
";
}
// line 21
echo " </span>
</td>
</tr>
";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['_key'], $context['item'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 25
echo " </tbody>
</table>
";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['date'], $context['commit'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
} else {
// line 29
echo "<p>No results found.</p>
";
}
// line 31
echo "
";
// line 32
if ((($context["page"] ?? null) != "searchcommits")) {
// line 33
echo "<ul class=\"pager\">
";
// line 34
if (($this->getAttribute(($context["pager"] ?? null), "current", array()) != 0)) {
// line 35
echo " <li class=\"previous\">
<a href=\"?page=";
// line 36
echo twig_escape_filter($this->env, $this->getAttribute(($context["pager"] ?? null), "previous", array()), "html", null, true);
echo "\">&larr; Newer</a>
</li>
";
}
// line 39
echo " ";
if (($this->getAttribute(($context["pager"] ?? null), "current", array()) != $this->getAttribute(($context["pager"] ?? null), "last", array()))) {
// line 40
echo " <li class=\"next\">
<a href=\"?page=";
// line 41
echo twig_escape_filter($this->env, $this->getAttribute(($context["pager"] ?? null), "next", array()), "html", null, true);
echo "\">Older &rarr;</a>
</li>
";
}
// line 44
echo "</ul>
";
}
}
public function getTemplateName()
{
return "commits_list.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 133 => 44, 127 => 41, 124 => 40, 121 => 39, 115 => 36, 112 => 35, 110 => 34, 107 => 33, 105 => 32, 102 => 31, 98 => 29, 89 => 25, 80 => 21, 70 => 19, 68 => 18, 60 => 17, 55 => 15, 49 => 14, 44 => 12, 41 => 11, 37 => 10, 30 => 6, 25 => 3, 21 => 2, 19 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "commits_list.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/commits_list.twig");
}
}

View file

@ -1,343 +0,0 @@
<?php
/* tree.twig */
class __TwigTemplate_74e1d3d532bff3ca08812970328e2a26187fedd0631d80c6181c6ca30bfc6a4d extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
// line 1
$this->parent = $this->loadTemplate("layout_page.twig", "tree.twig", 1);
$this->blocks = array(
'title' => array($this, 'block_title'),
'content' => array($this, 'block_content'),
);
}
protected function doGetParent(array $context)
{
return "layout_page.twig";
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 3
$context["page"] = "files";
// line 1
$this->parent->display($context, array_merge($this->blocks, $blocks));
}
// line 5
public function block_title($context, array $blocks = array())
{
echo "GitList";
}
// line 7
public function block_content($context, array $blocks = array())
{
// line 8
echo " ";
$this->loadTemplate("tree.twig", "tree.twig", 8, "1604538170")->display(array_merge($context, array("breadcrumbs" => ($context["breadcrumbs"] ?? null))));
// line 43
echo "
";
// line 44
if ( !twig_test_empty(($context["files"] ?? null))) {
// line 45
echo " <table class=\"tree\">
<thead>
<tr>
<th width=\"80%\">name</th>
<th width=\"10%\">mode</th>
<th width=\"10%\">size</th>
</tr>
</thead>
<tbody>
";
// line 54
if ( !(null === ($context["parent"] ?? null))) {
// line 55
echo " <tr>
<td><i class=\"icon-spaced\"></i>
";
// line 57
if ( !($context["parent"] ?? null)) {
// line 58
echo " <a href=\"";
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("branch", array("repo" => ($context["repo"] ?? null), "branch" => ($context["branch"] ?? null))), "html", null, true);
echo "\">..</a>
";
} else {
// line 60
echo " <a href=\"";
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("tree", array("repo" => ($context["repo"] ?? null), "commitishPath" => ((($context["branch"] ?? null) . "/") . ($context["parent"] ?? null)))), "html", null, true);
echo "\">..</a>
";
}
// line 62
echo " </td>
<td></td>
<td></td>
</tr>
";
}
// line 67
echo " ";
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable(($context["files"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["file"]) {
// line 68
echo " <tr>
<td><i class=\"";
// line 69
echo (((($this->getAttribute($context["file"], "type", array()) == "folder") || ($this->getAttribute($context["file"], "type", array()) == "symlink"))) ? ("icon-folder-open") : ("icon-file"));
echo " icon-spaced\"></i> <a href=\"";
// line 70
if ((($this->getAttribute($context["file"], "type", array()) == "folder") || ($this->getAttribute($context["file"], "type", array()) == "symlink"))) {
// line 71
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("tree", array("repo" => ($context["repo"] ?? null), "commitishPath" => (((($context["branch"] ?? null) . "/") . ($context["path"] ?? null)) . ((($this->getAttribute($context["file"], "type", array()) == "symlink")) ? ($this->getAttribute($context["file"], "path", array())) : ($this->getAttribute($context["file"], "name", array())))))), "html", null, true);
} else {
// line 73
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("blob", array("repo" => ($context["repo"] ?? null), "commitishPath" => (((($context["branch"] ?? null) . "/") . ($context["path"] ?? null)) . ((($this->getAttribute($context["file"], "type", array()) == "symlink")) ? ($this->getAttribute($context["file"], "path", array())) : ($this->getAttribute($context["file"], "name", array())))))), "html", null, true);
}
// line 75
echo "\">";
echo twig_escape_filter($this->env, $this->getAttribute($context["file"], "name", array()), "html", null, true);
echo "</a></td>
<td>";
// line 76
echo twig_escape_filter($this->env, $this->getAttribute($context["file"], "mode", array()), "html", null, true);
echo "</td>
<td>";
// line 77
if ($this->getAttribute($context["file"], "size", array())) {
echo twig_escape_filter($this->env, call_user_func_array($this->env->getFilter('format_size')->getCallable(), array($this->getAttribute($context["file"], "size", array()))), "html", null, true);
}
echo "</td>
</tr>
";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['_key'], $context['file'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 80
echo " </tbody>
</table>
";
} else {
// line 83
echo " <p>This repository is empty.</p>
";
}
// line 85
echo " ";
if ((array_key_exists("readme", $context) && !twig_test_empty(($context["readme"] ?? null)))) {
// line 86
echo " <div class=\"readme-view\">
<div class=\"md-header\">
<div class=\"meta\">";
// line 88
echo twig_escape_filter($this->env, $this->getAttribute(($context["readme"] ?? null), "filename", array()), "html", null, true);
echo "</div>
</div>
<div id=\"md-content\">";
// line 90
echo twig_escape_filter($this->env, $this->getAttribute(($context["readme"] ?? null), "content", array()), "html", null, true);
echo "</div>
</div>
";
}
// line 93
echo "
<hr />
";
}
public function getTemplateName()
{
return "tree.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 153 => 93, 147 => 90, 142 => 88, 138 => 86, 135 => 85, 131 => 83, 126 => 80, 115 => 77, 111 => 76, 106 => 75, 103 => 73, 100 => 71, 98 => 70, 95 => 69, 92 => 68, 87 => 67, 80 => 62, 74 => 60, 68 => 58, 66 => 57, 62 => 55, 60 => 54, 49 => 45, 47 => 44, 44 => 43, 41 => 8, 38 => 7, 32 => 5, 28 => 1, 26 => 3, 11 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "tree.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/tree.twig");
}
}
/* tree.twig */
class __TwigTemplate_74e1d3d532bff3ca08812970328e2a26187fedd0631d80c6181c6ca30bfc6a4d_1604538170 extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
// line 8
$this->parent = $this->loadTemplate("breadcrumb.twig", "tree.twig", 8);
$this->blocks = array(
'extra' => array($this, 'block_extra'),
);
}
protected function doGetParent(array $context)
{
return "breadcrumb.twig";
}
protected function doDisplay(array $context, array $blocks = array())
{
$this->parent->display($context, array_merge($this->blocks, $blocks));
}
// line 9
public function block_extra($context, array $blocks = array())
{
// line 10
echo " <div class=\"pull-right\">
<div class=\"btn-group download-buttons\">
";
// line 12
if ((($context["show_http_remote"] ?? null) || ($context["show_ssh_remote"] ?? null))) {
// line 13
echo " <a href=\"#\" class=\"btn btn-mini\" title=\"Show remotes to clone this repository.\" id=\"clone-button-show\">Clone</a>
";
}
// line 15
echo " <a href=\"";
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("archive", array("repo" => ($context["repo"] ?? null), "branch" => ($context["branch"] ?? null), "format" => "zip")), "html", null, true);
echo "\" class=\"btn btn-mini\" title=\"Download '";
echo twig_escape_filter($this->env, ($context["branch"] ?? null), "html", null, true);
echo "' as a ZIP archive\">ZIP</a>
<a href=\"";
// line 16
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("archive", array("repo" => ($context["repo"] ?? null), "branch" => ($context["branch"] ?? null), "format" => "tar")), "html", null, true);
echo "\" class=\"btn btn-mini\" title=\"Download '";
echo twig_escape_filter($this->env, ($context["branch"] ?? null), "html", null, true);
echo "' as a TAR archive\">TAR</a>
</div>
<a href=\"";
// line 18
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("rss", array("repo" => ($context["repo"] ?? null), "branch" => ($context["branch"] ?? null))), "html", null, true);
echo "\" class=\"rss-icon\"><i class=\"rss\"></i></a>
</div>
";
// line 20
if ((($context["show_http_remote"] ?? null) || ($context["show_ssh_remote"] ?? null))) {
// line 21
echo " <div id=\"clone-popup\">
<div id=\"clone-popup-inner-wrapper\">
<a class=\"close\" href=\"#\" id=\"clone-button-hide\">&times;</a>
<div class=\"btn-group\">
";
// line 25
if (($context["show_ssh_remote"] ?? null)) {
// line 26
echo " <button class=\"btn";
echo (((($context["show_ssh_remote"] ?? null) && ($context["show_http_remote"] ?? null))) ? (" active") : (""));
echo "\" id=\"clone-button-ssh\">SSH</button>
";
}
// line 28
echo " ";
if (($context["show_http_remote"] ?? null)) {
// line 29
echo " <button class=\"btn\" id=\"clone-button-http\">HTTP";
echo ((($context["use_https"] ?? null)) ? ("S") : (""));
echo "</button>
";
}
// line 31
echo " </div><br />
";
// line 32
if (($context["show_ssh_remote"] ?? null)) {
// line 33
echo " <input type=\"text\" class=\"form-control";
echo ((($context["show_ssh_remote"] ?? null)) ? (" visible") : (""));
echo "\" id=\"clone-input-ssh\" value=\"git clone ";
echo ((($context["ssh_port"] ?? null)) ? ("ssh://") : (""));
echo twig_escape_filter($this->env, twig_urlencode_filter(($context["ssh_user"] ?? null)), "html", null, true);
echo ((($context["ssh_user"] ?? null)) ? ("@") : (""));
echo twig_escape_filter($this->env, ((($context["ssh_host"] ?? null)) ? (($context["ssh_host"] ?? null)) : ($this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "host", array()))), "html", null, true);
echo ":";
echo twig_escape_filter($this->env, ((($context["ssh_port"] ?? null)) ? ((($context["ssh_port"] ?? null) . "/")) : ("")), "html", null, true);
echo twig_escape_filter($this->env, ($context["ssh_url_subdir"] ?? null), "html", null, true);
echo twig_escape_filter($this->env, ($context["repo"] ?? null), "html", null, true);
echo "\">
";
}
// line 35
echo " ";
if (($context["show_http_remote"] ?? null)) {
// line 36
echo " <input type=\"text\" class=\"form-control";
echo (((twig_test_empty(($context["show_ssh_remote"] ?? null)) && ($context["show_http_remote"] ?? null))) ? (" visible") : (""));
echo "\" id=\"clone-input-http\" value=\"git clone http";
echo ((($context["use_https"] ?? null)) ? ("s") : (""));
echo "://";
echo twig_escape_filter($this->env, twig_urlencode_filter(($context["http_user"] ?? null)), "html", null, true);
echo ((($context["http_user"] ?? null)) ? ("@") : (""));
echo twig_escape_filter($this->env, ((($context["http_host"] ?? null)) ? (($context["http_host"] ?? null)) : ($this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "host", array()))), "html", null, true);
echo "/";
echo twig_escape_filter($this->env, ($context["http_url_subdir"] ?? null), "html", null, true);
echo twig_escape_filter($this->env, ($context["repo"] ?? null), "html", null, true);
echo "\">
";
}
// line 38
echo " </div>
</div>
";
}
// line 41
echo " ";
}
public function getTemplateName()
{
return "tree.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 313 => 41, 308 => 38, 293 => 36, 290 => 35, 275 => 33, 273 => 32, 270 => 31, 264 => 29, 261 => 28, 255 => 26, 253 => 25, 247 => 21, 245 => 20, 240 => 18, 233 => 16, 226 => 15, 222 => 13, 220 => 12, 216 => 10, 213 => 9, 196 => 8, 153 => 93, 147 => 90, 142 => 88, 138 => 86, 135 => 85, 131 => 83, 126 => 80, 115 => 77, 111 => 76, 106 => 75, 103 => 73, 100 => 71, 98 => 70, 95 => 69, 92 => 68, 87 => 67, 80 => 62, 74 => 60, 68 => 58, 66 => 57, 62 => 55, 60 => 54, 49 => 45, 47 => 44, 44 => 43, 41 => 8, 38 => 7, 32 => 5, 28 => 1, 26 => 3, 11 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "tree.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/tree.twig");
}
}

View file

@ -1,47 +0,0 @@
<?php
/* footer.twig */
class __TwigTemplate_844546439e80200e2d7e676e5bd721a772a8107ab219eb760cc37419c4982ce7 extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
$this->parent = false;
$this->blocks = array(
);
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
echo "<footer>
<p>Powered by <a href=\"https://github.com/klaussilveira/gitlist\">GitList 1.0.2</a></p>
</footer>
";
}
public function getTemplateName()
{
return "footer.twig";
}
public function getDebugInfo()
{
return array ( 19 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "footer.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/footer.twig");
}
}

View file

@ -1,182 +0,0 @@
<?php
/* layout.twig */
class __TwigTemplate_d2997569c55296f12cc2ed12fa433140666c22c5aafdacf78a815d38d6d67b47 extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
$this->parent = false;
$this->blocks = array(
'title' => array($this, 'block_title'),
'body' => array($this, 'block_body'),
'javascripts' => array($this, 'block_javascripts'),
);
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
echo "<!DOCTYPE html>
<html lang=\"en\">
<head>
<meta charset=\"UTF-8\" />
<title>";
// line 5
echo twig_escape_filter($this->env, ($context["title"] ?? null), "html", null, true);
if (($context["title"] ?? null)) {
echo " -";
}
$this->displayBlock('title', $context, $blocks);
echo "</title>
<link rel=\"stylesheet\" type=\"text/css\" href=\"";
// line 6
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/css/style.css\">
<link rel=\"stylesheet\" type=\"text/css\" href=\"";
// line 7
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/css/gitgraph.css\">
<link rel=\"shortcut icon\" type=\"image/png\" href=\"";
// line 8
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/img/favicon.png\" />
<!--[if lt IE 9]>
<script type=\"application/javascript\" src=\"";
// line 10
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/html5.js\"></script>
<![endif]-->
</head>
<body>";
// line 15
$this->displayBlock('body', $context, $blocks);
// line 16
$this->displayBlock('javascripts', $context, $blocks);
// line 29
echo " </body>
</html>
";
}
// line 5
public function block_title($context, array $blocks = array())
{
echo "Welcome!";
}
// line 15
public function block_body($context, array $blocks = array())
{
}
// line 16
public function block_javascripts($context, array $blocks = array())
{
// line 17
echo " <script type=\"application/javascript\" src=\"";
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/jquery.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 18
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/raphael.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 19
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/bootstrap.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 20
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/codemirror.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 21
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/showdown.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 22
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/table.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 23
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/list.min.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 24
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/main.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 25
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/networkGraph.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 26
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/gitgraph.js\"></script>
<script type=\"application/javascript\" src=\"";
// line 27
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/themes/";
echo twig_escape_filter($this->env, ($context["theme"] ?? null), "html", null, true);
echo "/js/draw.js\"></script>";
}
public function getTemplateName()
{
return "layout.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 149 => 27, 143 => 26, 137 => 25, 131 => 24, 125 => 23, 119 => 22, 113 => 21, 107 => 20, 101 => 19, 95 => 18, 88 => 17, 85 => 16, 80 => 15, 74 => 5, 68 => 29, 66 => 16, 64 => 15, 55 => 10, 48 => 8, 42 => 7, 36 => 6, 28 => 5, 22 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "layout.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/layout.twig");
}
}

View file

@ -1,119 +0,0 @@
<?php
/* breadcrumb.twig */
class __TwigTemplate_94f1b51e7eff2386c25d22dcf9bb9fb7e88e2c911b9c5da3887f495406fe3b9d extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
$this->parent = false;
$this->blocks = array(
'extra' => array($this, 'block_extra'),
);
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
echo "<ul class=\"breadcrumb\">
<li><a href=\"";
// line 2
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("tree", array("repo" => ($context["repo"] ?? null), "commitishPath" => ($context["branch"] ?? null))), "html", null, true);
echo "\">";
echo twig_escape_filter($this->env, ($context["repo"] ?? null), "html", null, true);
echo "</a></li>
";
// line 3
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable(($context["breadcrumbs"] ?? null));
$context['loop'] = array(
'parent' => $context['_parent'],
'index0' => 0,
'index' => 1,
'first' => true,
);
if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof Countable)) {
$length = count($context['_seq']);
$context['loop']['revindex0'] = $length - 1;
$context['loop']['revindex'] = $length;
$context['loop']['length'] = $length;
$context['loop']['last'] = 1 === $length;
}
foreach ($context['_seq'] as $context["_key"] => $context["breadcrumb"]) {
// line 4
echo " <span class=\"divider\">/</span>
<li";
// line 5
if ($this->getAttribute($context["loop"], "last", array())) {
echo " class=\"active\"";
}
echo ">";
if ( !$this->getAttribute($context["loop"], "last", array())) {
echo "<a href=\"";
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("tree", array("repo" => ($context["repo"] ?? null), "commitishPath" => ((($context["branch"] ?? null) . "/") . $this->getAttribute($context["breadcrumb"], "path", array())))), "html", null, true);
echo "\">";
echo twig_escape_filter($this->env, $this->getAttribute($context["breadcrumb"], "dir", array()), "html", null, true);
echo "</a>";
}
if ($this->getAttribute($context["loop"], "last", array())) {
echo twig_escape_filter($this->env, $this->getAttribute($context["breadcrumb"], "dir", array()), "html", null, true);
}
echo "</li>
";
++$context['loop']['index0'];
++$context['loop']['index'];
$context['loop']['first'] = false;
if (isset($context['loop']['length'])) {
--$context['loop']['revindex0'];
--$context['loop']['revindex'];
$context['loop']['last'] = 0 === $context['loop']['revindex0'];
}
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['_key'], $context['breadcrumb'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 7
echo "
";
// line 8
$this->displayBlock('extra', $context, $blocks);
// line 9
echo "</ul>
";
}
// line 8
public function block_extra($context, array $blocks = array())
{
}
public function getTemplateName()
{
return "breadcrumb.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 88 => 8, 83 => 9, 81 => 8, 78 => 7, 49 => 5, 46 => 4, 29 => 3, 23 => 2, 20 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "breadcrumb.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/breadcrumb.twig");
}
}

View file

@ -1,47 +0,0 @@
<?php
/* footer.twig */
class __TwigTemplate_5029b81fb673022f28d476632b8acef6ef39efd54ec1c8340f2021b7f2899998 extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
$this->parent = false;
$this->blocks = array(
);
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 1
echo "<footer>
<p>Powered by <a href=\"https://github.com/klaussilveira/gitlist\">GitList 1.0.2</a></p>
</footer>
";
}
public function getTemplateName()
{
return "footer.twig";
}
public function getDebugInfo()
{
return array ( 19 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "footer.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/footer.twig");
}
}

View file

@ -1,130 +0,0 @@
<?php
/* file.twig */
class __TwigTemplate_2b0ac13b81d1086760101f17fe559eb3e5d28b7f26b849c078abe7ec971367dc extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
// line 1
$this->parent = $this->loadTemplate("layout_page.twig", "file.twig", 1);
$this->blocks = array(
'title' => array($this, 'block_title'),
'content' => array($this, 'block_content'),
);
}
protected function doGetParent(array $context)
{
return "layout_page.twig";
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 3
$context["page"] = "files";
// line 1
$this->parent->display($context, array_merge($this->blocks, $blocks));
}
// line 5
public function block_title($context, array $blocks = array())
{
echo "GitList";
}
// line 7
public function block_content($context, array $blocks = array())
{
// line 8
echo " ";
$this->loadTemplate("breadcrumb.twig", "file.twig", 8)->display(array_merge($context, array("breadcrumbs" => ($context["breadcrumbs"] ?? null))));
// line 9
echo "
<div class=\"source-view\">
<div class=\"source-header\">
<div class=\"meta\"></div>
<div class=\"btn-group pull-right\">
<a href=\"";
// line 15
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("blob_raw", array("repo" => ($context["repo"] ?? null), "commitishPath" => ((($context["branch"] ?? null) . "/") . ($context["file"] ?? null)))), "html", null, true);
echo "\" class=\"btn btn-small\"><i class=\"icon-file\"></i> Raw</a>
<a href=\"";
// line 16
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("blame", array("repo" => ($context["repo"] ?? null), "commitishPath" => ((($context["branch"] ?? null) . "/") . ($context["file"] ?? null)))), "html", null, true);
echo "\" class=\"btn btn-small\"><i class=\"icon-bullhorn\"></i> Blame</a>
<a href=\"";
// line 17
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("logpatch", array("repo" => ($context["repo"] ?? null), "commitishPath" => ((($context["branch"] ?? null) . "/") . ($context["file"] ?? null)))), "html", null, true);
echo "\" class=\"btn btn-small\"><i class=\"icon-calendar\"></i> Patch Log</a>
<a href=\"";
// line 18
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("commits", array("repo" => ($context["repo"] ?? null), "commitishPath" => ((($context["branch"] ?? null) . "/") . ($context["file"] ?? null)))), "html", null, true);
echo "\" class=\"btn btn-small\"><i class=\"icon-list-alt\"></i> History</a>
</div>
</div>
";
// line 21
if ((($context["fileType"] ?? null) == "image")) {
// line 22
echo " <center><img src=\"";
echo twig_escape_filter($this->env, $this->env->getExtension('Symfony\Bridge\Twig\Extension\RoutingExtension')->getPath("blob_raw", array("repo" => ($context["repo"] ?? null), "commitishPath" => ((($context["branch"] ?? null) . "/") . ($context["file"] ?? null)))), "html", null, true);
echo "\" alt=\"";
echo twig_escape_filter($this->env, ($context["file"] ?? null), "html", null, true);
echo "\" class=\"image-blob\" /></center>
";
} elseif (( // line 24
($context["fileType"] ?? null) == "markdown")) {
// line 25
echo " <div class=\"md-view\"><div id=\"md-content\">";
echo twig_escape_filter($this->env, ($context["blob"] ?? null), "html", null, true);
echo "</div></div>
";
} else {
// line 28
echo " <pre id=\"sourcecode\" language=\"";
echo twig_escape_filter($this->env, ($context["fileType"] ?? null), "html", null, true);
echo "\">";
echo htmlentities(($context["blob"] ?? null));
echo "</pre>
";
}
// line 30
echo " </div>
<hr />
";
}
public function getTemplateName()
{
return "file.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 97 => 30, 89 => 28, 82 => 25, 80 => 24, 72 => 22, 70 => 21, 64 => 18, 60 => 17, 56 => 16, 52 => 15, 44 => 9, 41 => 8, 38 => 7, 32 => 5, 28 => 1, 26 => 3, 11 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "file.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/file.twig");
}
}

View file

@ -1,137 +0,0 @@
<?php
/* layout_page.twig */
class __TwigTemplate_4878bce68b5076bafc60af71d3deda2ec60bc7ce16d9610ff1a4f67606b1a168 extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
// line 1
$this->parent = $this->loadTemplate("layout.twig", "layout_page.twig", 1);
$this->blocks = array(
'body' => array($this, 'block_body'),
'content' => array($this, 'block_content'),
);
}
protected function doGetParent(array $context)
{
return "layout.twig";
}
protected function doDisplay(array $context, array $blocks = array())
{
$this->parent->display($context, array_merge($this->blocks, $blocks));
}
// line 3
public function block_body($context, array $blocks = array())
{
// line 4
echo " ";
$this->loadTemplate("navigation.twig", "layout_page.twig", 4)->display($context);
// line 5
echo "
<div class=\"container\">
<div class=\"row\">
<div class=\"span12\">
";
// line 9
if (twig_in_filter(($context["page"] ?? null), array(0 => "commits", 1 => "searchcommits"))) {
// line 10
echo " <form class=\"form-search pull-right\" action=\"";
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/";
echo twig_escape_filter($this->env, ($context["repo"] ?? null), "html", null, true);
echo "/commits/";
echo twig_escape_filter($this->env, ($context["branch"] ?? null), "html", null, true);
echo "/search\" method=\"POST\">
<input type=\"text\" name=\"query\" class=\"input-medium search-query\" placeholder=\"Search commits...\" value=\"";
// line 11
echo twig_escape_filter($this->env, ((array_key_exists("query", $context)) ? (_twig_default_filter(($context["query"] ?? null), "")) : ("")), "html", null, true);
echo "\">
</form>
";
} else {
// line 14
echo " <form class=\"form-search pull-right\" action=\"";
echo twig_escape_filter($this->env, $this->getAttribute($this->getAttribute(($context["app"] ?? null), "request", array()), "basepath", array()), "html", null, true);
echo "/";
echo twig_escape_filter($this->env, ($context["repo"] ?? null), "html", null, true);
echo "/tree/";
echo twig_escape_filter($this->env, ($context["branch"] ?? null), "html", null, true);
echo "/search\" method=\"POST\">
<input type=\"text\" name=\"query\" class=\"input-medium search-query\" placeholder=\"Search tree...\" value=\"";
// line 15
echo twig_escape_filter($this->env, ((array_key_exists("query", $context)) ? (_twig_default_filter(($context["query"] ?? null), "")) : ("")), "html", null, true);
echo "\">
</form>
";
}
// line 18
echo "
";
// line 19
if (array_key_exists("branches", $context)) {
// line 20
echo " ";
$this->loadTemplate("branch_menu.twig", "layout_page.twig", 20)->display($context);
// line 21
echo " ";
}
// line 22
echo "
";
// line 23
$this->loadTemplate("menu.twig", "layout_page.twig", 23)->display($context);
// line 24
echo " </div>
</div>
";
// line 27
$this->displayBlock('content', $context, $blocks);
// line 28
echo "
";
// line 29
$this->loadTemplate("footer.twig", "layout_page.twig", 29)->display($context);
// line 30
echo " </div>
";
}
// line 27
public function block_content($context, array $blocks = array())
{
}
public function getTemplateName()
{
return "layout_page.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 106 => 27, 101 => 30, 99 => 29, 96 => 28, 94 => 27, 89 => 24, 87 => 23, 84 => 22, 81 => 21, 78 => 20, 76 => 19, 73 => 18, 67 => 15, 58 => 14, 52 => 11, 43 => 10, 41 => 9, 35 => 5, 32 => 4, 29 => 3, 11 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "layout_page.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/layout_page.twig");
}
}

View file

@ -1,84 +0,0 @@
<?php
/* error.twig */
class __TwigTemplate_8a3e4fd6200802d16d6d6735b20963640b984ddd8a4352b6b467bcc17d192e2c extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
// line 1
$this->parent = $this->loadTemplate("layout.twig", "error.twig", 1);
$this->blocks = array(
'title' => array($this, 'block_title'),
'body' => array($this, 'block_body'),
);
}
protected function doGetParent(array $context)
{
return "layout.twig";
}
protected function doDisplay(array $context, array $blocks = array())
{
$this->parent->display($context, array_merge($this->blocks, $blocks));
}
// line 2
public function block_title($context, array $blocks = array())
{
echo "GitList";
}
// line 4
public function block_body($context, array $blocks = array())
{
// line 5
$this->loadTemplate("navigation.twig", "error.twig", 5)->display($context);
// line 6
echo "
<div class=\"container\">
<div class=\"alert alert-error\">
<strong>Oops!</strong>";
// line 10
echo twig_escape_filter($this->env, ($context["message"] ?? null), "html", null, true);
echo "
</div>
<hr />";
// line 15
$this->loadTemplate("footer.twig", "error.twig", 15)->display($context);
// line 16
echo "</div>";
}
public function getTemplateName()
{
return "error.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 54 => 16, 52 => 15, 46 => 10, 40 => 6, 38 => 5, 35 => 4, 29 => 2, 11 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "error.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/error.twig");
}
}

View file

@ -1,81 +0,0 @@
<?php
/* commits.twig */
class __TwigTemplate_3b7f14f45be10bcc46f8785e5b33af081ae4979750b132d5aea1849899a430cb extends Twig_Template
{
public function __construct(Twig_Environment $env)
{
parent::__construct($env);
// line 1
$this->parent = $this->loadTemplate("layout_page.twig", "commits.twig", 1);
$this->blocks = array(
'title' => array($this, 'block_title'),
'content' => array($this, 'block_content'),
);
}
protected function doGetParent(array $context)
{
return "layout_page.twig";
}
protected function doDisplay(array $context, array $blocks = array())
{
// line 3
$context["page"] = "commits";
// line 1
$this->parent->display($context, array_merge($this->blocks, $blocks));
}
// line 5
public function block_title($context, array $blocks = array())
{
echo "GitList";
}
// line 7
public function block_content($context, array $blocks = array())
{
// line 8
echo " ";
$this->loadTemplate("breadcrumb.twig", "commits.twig", 8)->display(array_merge($context, array("breadcrumbs" => array(0 => array("dir" => "Commit history", "path" => "")))));
// line 9
echo "
";
// line 10
$this->loadTemplate("commits_list.twig", "commits.twig", 10)->display($context);
// line 11
echo "
<hr />
";
}
public function getTemplateName()
{
return "commits.twig";
}
public function isTraitable()
{
return false;
}
public function getDebugInfo()
{
return array ( 49 => 11, 47 => 10, 44 => 9, 41 => 8, 38 => 7, 32 => 5, 28 => 1, 26 => 3, 11 => 1,);
}
/** @deprecated since 1.27 (to be removed in 2.0). Use getSourceContext() instead */
public function getSource()
{
@trigger_error('The '.__METHOD__.' method is deprecated since version 1.27 and will be removed in 2.0. Use getSourceContext() instead.', E_USER_DEPRECATED);
return $this->getSourceContext()->getCode();
}
public function getSourceContext()
{
return new Twig_Source("", "commits.twig", "/var/www/SAND-FrameWork-1.1.0/application/modules/gitlist/themes/default/twig/commits.twig");
}
}

View file

@ -14,7 +14,7 @@ repositories[] = '/home/git/repositories/' ; Path to your repositories
[app]
debug = false
cache = true
theme = "default"
theme = "default_without_html"
title = ""
[clone_button]

View file

@ -0,0 +1,25 @@
{% extends 'layout_page.twig' %}
{% set page = 'commits' %}
{% block title %}GitList{% endblock %}
{% block content %}
{% include 'breadcrumb.twig' with {breadcrumbs: [{dir: 'Blame', path:''}]} %}
<div class="source-view">
<div class="source-header">
<div class="meta">{{ file }}</div>
</div>
<table class="blame-view">
{% for blame in blames %}
<tr>
<td class="commit"><a href="{{ path('commit', {repo: repo, commit: blame.commit}) }}">{{ blame.commitShort }}</a></td>
<td><pre>{{ blame.line }}</pre></td>
</tr>
{% endfor %}
</table>
</div>
<hr />
{% endblock %}

View file

@ -0,0 +1,21 @@
<div class="btn-group pull-left space-right" id="branchList">
<button class="btn dropdown-toggle" data-toggle="dropdown">browsing: <strong>{{ branch }}</strong> <span class="caret"></span></button>
<div class="dropdown-menu">
<div class="search">
<input class="search" placeholder="Filter branch/tags" autofocus>
</div>
<ul class="unstyled list">
<li class="dropdown-header">Branches</li>
{% for item in branches %}
<li><a href="{{ path('branch', {repo: repo, branch: item}) }}"><span class="item">{{ item }}</span></a></li>
{% endfor %}
{% if tags %}
<li class="dropdown-header">Tags</li>
{% for item in tags %}
<li><a href="{{ path('branch', {repo: repo, branch: item}) }}"><span class="item">{{ item }}</span></a></li>
{% endfor %}
{% endif %}
</ul>
</div>
</div>

View file

@ -0,0 +1,9 @@
<ul class="breadcrumb">
<li><a href="{{ path('tree', {repo: repo, commitishPath: branch}) }}">{{ repo }}</a></li>
{% for breadcrumb in breadcrumbs %}
<span class="divider">/</span>
<li{% if loop.last %} class="active"{% endif %}>{% if not loop.last %}<a href="{{ path('tree', {repo: repo, commitishPath: branch ~ '/' ~ breadcrumb.path}) }}">{{ breadcrumb.dir }}</a>{% endif %}{% if loop.last %}{{ breadcrumb.dir }}{% endif %}</li>
{% endfor %}
{% block extra %}{% endblock %}
</ul>

View file

@ -0,0 +1,82 @@
{% extends 'layout_page.twig' %}
{% set page = 'commits' %}
{% block title %}GitList{% endblock %}
{% block content %}
{% include 'breadcrumb.twig' with {breadcrumbs: [{dir: "Commit #{commit.hash}", path:''}]} %}
<div class="commit-view">
<div class="commit-header">
<span class="pull-right"><a class="btn btn-small" href="{{ path('branch', {repo: repo, branch: commit.hash}) }}" title="Browse code at this point in history"><i class="icon-list-alt"></i> Browse code</a></span>
<h4>{{ commit.message }}</h4>
</div>
<div class="commit-body">
{% if commit.body is not empty %}
<p>{{ commit.body | nl2br }}</p>
{% endif %}
<img src="{{ avatar(commit.author.email, 32) }}" class="pull-left space-right" />
<span>
<a href="mailto:{{ commit.author.email }}">{{ commit.author.name }}</a> authored on {{ commit.date | format_date }}
{% if commit.author.email != commit.commiter.email %}
&bull; <a href="mailto:{{ commit.commiter.email }}">{{ commit.commiter.name }}</a> committed on {{ commit.commiterDate | format_date }}
{% endif %}
<br />Showing {{ commit.changedFiles }} changed files
</span>
</div>
</div>
<ul class="commit-list">
{% for diff in commit.diffs %}
<li><i class="icon-file"></i> <a href="#diff-{{ loop.index }}">{{ diff.file }}</a> <span class="meta pull-right">{{ diff.index }}</span></li>
{% endfor %}
</ul>
{% for diff in commit.diffs %}
<div class="source-view">
<div class="source-header">
<div class="meta"><a id="diff-{{ loop.index }}">{{ diff.file }}</div>
<div class="btn-group pull-right">
<a href="{{ path('commits', {repo: repo, commitishPath: commit.hash ~ '/' ~ diff.file}) }}" class="btn btn-small"><i class="icon-list-alt"></i> History</a>
<a href="{{ path('blob', {repo: repo, commitishPath: commit.hash ~'/' ~ diff.file}) }}" class="btn btn-small"><i class="icon-file"></i> View file @ {{ commit.shortHash }}</a>
</div>
</div>
<div class="source-diff">
<table>
{% for line in diff.getLines %}
<tr>
<td class="lineNo">
{% if line.getType != 'chunk' %}
<a name="L{{ loop.index }}R{{ line.getNumOld }}"></a>
<a href="#L{{ loop.index }}R{{ line.getNumOld }}">
{% endif %}
{{ line.getNumOld }}
{% if line.getType != 'chunk' %}
</a>
{% endif %}
</td>
<td class="lineNo">
{% if line.getType != 'chunk' %}
<a name="L{{ loop.index }}L{{ line.getNumNew }}"></a>
<a href="#L{{ loop.index }}L{{ line.getNumNew }}">
{% endif %}
{{ line.getNumNew }}
{% if line.getType != 'chunk' %}
</a>
{% endif %}
</td>
<td style="width: 100%">
<pre{% if line.getType %} class="{{ line.getType }}"{% endif %}>{{ line.getLine }}</pre>
</td>
</tr>
{% endfor %}
</table>
</div>
</div>
{% endfor %}
<hr />
{% endblock %}

View file

@ -0,0 +1,13 @@
{% extends 'layout_page.twig' %}
{% set page = 'commits' %}
{% block title %}GitList{% endblock %}
{% block content %}
{% include 'breadcrumb.twig' with {breadcrumbs: [{dir: 'Commit history', path:''}]} %}
{% include 'commits_list.twig' %}
<hr />
{% endblock %}

View file

@ -0,0 +1,45 @@
{% if commits %}
{% for date, commit in commits %}
<table class="table table-striped table-bordered">
<thead>
<tr>
<th colspan="3">{{ date | date("F j, Y") }}</th>
</tr>
</thead>
<tbody>
{% for item in commit %}
<tr>
<td width="5%"><img src="{{ avatar( item.author.email, 40 ) }}" /></td>
<td width="95%">
<span class="pull-right"><a class="btn btn-small" href="{{ path('commit', {repo: repo, commit: item.hash}) }}"><i class="icon-list-alt"></i> View {{ item.shortHash }}</a></span>
<h4>{{ item.message }}</h4>
<span>
<a href="mailto:{{ item.author.email }}">{{ item.author.name }}</a> authored on {{ item.date | format_date }}
{% if item.author.email != item.commiter.email %}
&bull; <a href="mailto:{{ item.commiter.email }}">{{ item.commiter.name }}</a> committed on {{ item.commiterDate | format_date }}
{% endif %}
</span>
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endfor %}
{% else %}
<p>No results found.</p>
{% endif %}
{% if page != 'searchcommits' %}
<ul class="pager">
{% if pager.current != 0 %}
<li class="previous">
<a href="?page={{ pager.previous }}">&larr; Newer</a>
</li>
{% endif %}
{% if pager.current != pager.last %}
<li class="next">
<a href="?page={{ pager.next }}">Older &rarr;</a>
</li>
{% endif %}
</ul>
{% endif %}

View file

@ -0,0 +1,17 @@
{% extends 'layout.twig' %}
{% block title %}GitList{% endblock %}
{% block body %}
{% include 'navigation.twig' %}
<div class="container">
<div class="alert alert-error">
<strong>Oops!</strong> {{ message }}
</div>
<hr />
{% include 'footer.twig' %}
</div>
{% endblock %}

Some files were not shown because too many files have changed in this diff Show more