Skip to content

Commit 10bc015

Browse files
committed
Merge pull Github
2 parents 8277707 + 6d4e4f2 commit 10bc015

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1152
-152
lines changed

README.md

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,26 @@
1-
SAND-FRAMEWORK for Modular-Applications
1+
# SAND-FRAMEWORK for Modular-Applications
2+
3+
---
4+
---
25

36
Cette architecture MVC Objet est composée d'un moteur de template (Blade ou Twig)
47

58
Les urls d'accès sont de type www.domain.tld/le_nom_de_mapage/varname1/varvalue1/varname2/varvalue2/ ...
69

710
Afin de créer une nouvelle page vous devez instancier trois fichiers contenant diverses variables, dont voici les adresses:
811

9-
application > include > controlleurs > le_nom_de_mapage.php contenant:
12+
---
1013

11-
les commandes permettant de gérer un formulaire
12-
un ou plusieurs accès à la base de données
13-
des variables instanciées dans le tableau $templateData permettant l'affichage dans la vue blade ou twig
14+
`application > include > controlleurs > le_nom_de_mapage.php` contenant:
15+
- les commandes permettant de gérer un formulaire
16+
- un ou plusieurs accès à la base de données
17+
- des variables instanciées dans le tableau `$templateData` permettant l'affichage dans la vue blade ou twig
1418

15-
application > include > modeles > le_nom_de_mapage.model contenant les variables spécifiques à la page de l'application. soit par exemple:
19+
---
1620

21+
`application > include > modeles > le_nom_de_mapage.model` contenant
22+
les variables spécifiques à la page de l'application. soit par exemple:
23+
```
1724
name : le_nom_de_mapage
1825
page_title : le title du head de la page html rendue
1926
description : ma description pour les moteurs de recherche
@@ -22,13 +29,19 @@ authentification : no
2229
ariane : {acceuil, test d'acceuil}
2330
arianelink : {index, le_nom_de_mapage}
2431
paramsN : paramètre(s) supplémentaire(s)
32+
```
33+
avec en plus de cela :
34+
`engine : blade` pour un layout blade ou `engine : twig` pour un layout twig
2535

26-
avec en plus de cela : engine : blade pour un layout blade ou engine : twig pour un layout twig
27-
28-
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
36+
---
2937

30-
Vous pouvez aussi tout à fait utiliser la commande:
38+
`application > include > vues > view > le_nom_de_mapage.blade.php` contenant le layout `blade` a instancier
39+
`application > include > vues > view > le_nom_de_mapage.html.twig` contenant le layout `twig` a instancier
3140

32-
php console/bin.php page:add
41+
> Vous pouvez aussi tout à fait utiliser la commande:
42+
>
43+
> `php console/bin.php page:add`
3344
34-
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.
45+
Pour les modules, c'est un peu plus compliqué : il faut instancier ces trois précédents fichiers en faisant appel la class Modular,
46+
ne pas oublier de référencer le module dans le dossier modules > setup > registre.model, ajouter le dossier contenant le code du module
47+
et faire correspondre le nom du controlleur frontal du module avec le registre.

application/class/Caracter.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,41 @@ public static function avoid_guillemets($chaine)
8787
$chaine = str_replace('"', '', $chaine);
8888
return $chaine;
8989
}
90+
public static function mettreEnMajusculeAccents($chaine, $trueAccent = false)
91+
{
92+
if (!$trueAccent) {
93+
$chaine = str_replace('é', 'E', $chaine);
94+
$chaine = str_replace('è', 'E', $chaine);
95+
$chaine = str_replace('ë', 'E', $chaine);
96+
$chaine = str_replace('ê', 'E', $chaine);
97+
$chaine = str_replace('ç', 'C', $chaine);
98+
$chaine = str_replace('Ç', 'C', $chaine);
99+
$chaine = str_replace('à', 'A', $chaine);
100+
// $chaine = str_replace('','&aeacute;',$chaine);
101+
$chaine = str_replace('â', 'A', $chaine);
102+
$chaine = str_replace('ä', 'A', $chaine);
103+
$chaine = str_replace('î', 'I', $chaine);
104+
$chaine = str_replace('ï', 'I', $chaine);
105+
$chaine = str_replace('ù', 'U', $chaine);
106+
$chaine = str_replace('û', 'U', $chaine);
107+
$chaine = str_replace('ü', 'U', $chaine);
108+
} else {
109+
$chaine = str_replace('é', 'É', $chaine);
110+
$chaine = str_replace('è', 'È', $chaine);
111+
$chaine = str_replace('ë', 'Ë', $chaine);
112+
$chaine = str_replace('ê', 'Ê', $chaine);
113+
$chaine = str_replace('ç', 'Ç', $chaine);
114+
$chaine = str_replace('Ç', 'Ç', $chaine);
115+
$chaine = str_replace('à', 'À', $chaine);
116+
// $chaine = str_replace('','&aeacute;',$chaine);
117+
$chaine = str_replace('â', 'Â', $chaine);
118+
$chaine = str_replace('ä', 'Ä', $chaine);
119+
$chaine = str_replace('î', 'Î', $chaine);
120+
$chaine = str_replace('ï', 'Ï', $chaine);
121+
$chaine = str_replace('ù', 'Ù', $chaine);
122+
$chaine = str_replace('û', 'Û', $chaine);
123+
$chaine = str_replace('ü', 'Ü', $chaine);
124+
}
125+
return $chaine;
126+
}
90127
}

application/class/Modular.php

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ public function __construct($appName, $type = 'symfony', $options = array())
1919
break;
2020
case "symfony":
2121
break;
22+
case "laravel":
23+
break;
2224
case "wordpress":
2325
if (isset($options[0])) {
2426
switch ($options[0]) {
@@ -92,35 +94,69 @@ public function getAppName()
9294

9395
public function load($type = "symfony")
9496
{
95-
ob_start();
96-
97+
global $buffer_sand;
9798
switch ($type) {
9899
case "gitlist":
100+
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
101+
$level = ob_get_level();
99102
require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . DIRECTORY_SEPARATOR . "index.php";
100103
break;
101104
case "symfony":
105+
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
106+
$level = ob_get_level();
107+
$path = MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . DIRECTORY_SEPARATOR . "public" . DIRECTORY_SEPARATOR . "index.php";
108+
return require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . DIRECTORY_SEPARATOR . "public" . DIRECTORY_SEPARATOR . "index.php";
109+
break;
110+
case "laravel":
111+
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
112+
$level = ob_get_level();
102113
require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . DIRECTORY_SEPARATOR . "public" . DIRECTORY_SEPARATOR . "index.php";
103114
break;
104115
case "wordpress":
116+
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
117+
$level = ob_get_level();
105118
require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . $this->subapp_dir . DIRECTORY_SEPARATOR . $this->subfile;
106119
break;
107120
case "prestashop":
121+
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
122+
$level = ob_get_level();
108123
require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . $this->subapp_dir . DIRECTORY_SEPARATOR . "index.php";
109124
break;
110125
case "phplist":
126+
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
127+
$level = ob_get_level();
111128
require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . $this->subapp_dir . DIRECTORY_SEPARATOR . "index.php";
112129
break;
113130
case "wanewsletter":
131+
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
132+
$level = ob_get_level();
114133
require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . $this->subapp_dir . DIRECTORY_SEPARATOR . $this->subfile;
115134
break;
116135
case "phpmynewsletter":
136+
ob_start(array('\\MVC\\Classe\\Modular', 'rappel'),0,PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE);
137+
$level = ob_get_level();
117138
require MODULES_PATH . DIRECTORY_SEPARATOR . $this->getAppName() . $this->subapp_dir . DIRECTORY_SEPARATOR . $this->subfile;
118139
break;
119140
}
120-
121-
$data = ob_get_contents();
122-
ob_end_clean();
123-
124-
return $data;
141+
$buffer_sand = "";
142+
if (ob_get_level() == $level) {
143+
if (ob_get_level() > 1) {
144+
$buffer_sand = ob_get_contents();
145+
ob_end_clean();
146+
} else {
147+
$buffer_sand = "BUFFER CLOSURE BY FRAMEWORK !<br/>".$buffer_sand;
148+
}
149+
}else{
150+
$final_level = ob_get_level();
151+
$buffer_sand = "BUFFER LEVEL $level CLOSURE $final_level BY FRAMEWORK !<br/>".$buffer_sand;
152+
}
153+
return $buffer_sand;
125154
}
155+
public static function rappel($buffer)
156+
{
157+
global $buffer_sand;
158+
$buffer_sand = $buffer;
159+
// remplace toutes les pommes par des carottes
160+
return $buffer;
161+
}
126162
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
<?php
2+
3+
4+
namespace MVC\Classe;
5+
6+
7+
/**
8+
* Class MyActionTwigExtension
9+
* with call {{ static_call("AppBundle\Entity\YourEntity", "GetSomething", ["var1", "var2"]) }}
10+
* other {{ action("AppBundle\Entity\YourEntity", "GetSomething", ["var1", "var2"]) }}
11+
*
12+
* @package MVC\Classe
13+
*/
14+
15+
class TwigControlleurAction extends \Twig\Extension\AbstractExtension
16+
{
17+
/**
18+
* Returns a list of functions to add to the existing list.
19+
*
20+
* @return \Twig\TwigFunction[]
21+
*/
22+
public function getFunctions() {
23+
return array(
24+
new \Twig\TwigFunction("action", array($this, "inserer")),
25+
new \Twig\TwigFunction("call", array($this, "getClassMethodStatic")),
26+
new \Twig\TwigFunction("session", array($this, "afficheSession")),
27+
new \Twig\TwigFunction("server", array($this, "afficheServer"))
28+
);
29+
}
30+
31+
public function afficheServer($key_var = ''){
32+
if($key_var !== ""){
33+
if(isset($_SERVER[$key_var])) {
34+
return $_SERVER[$key_var];
35+
}else{
36+
return null;
37+
}
38+
}else {
39+
return $_SERVER;
40+
}
41+
return null;
42+
}
43+
44+
45+
public function afficheSession($key_var = ''){
46+
if($key_var !== ""){
47+
if(isset($_SESSION[$key_var])) {
48+
return $_SESSION[$key_var];
49+
}else{
50+
return null;
51+
}
52+
}else {
53+
return $_SESSION;
54+
}
55+
return null;
56+
}
57+
58+
public static function inserer($action, $data = array())
59+
{
60+
//on extrait la classe d'appel de l'action
61+
$action = explode('.', $action);
62+
$class = ucfirst($action[0]) . "Action";
63+
//TODO: use try ... catch with \MVC\Classe\Logger to log error
64+
if (is_file(ACTION_PATH . DIRECTORY_SEPARATOR . $class . ".php")) {
65+
require_once ACTION_PATH . DIRECTORY_SEPARATOR . $class . ".php";
66+
//On charge la classe Action de façon réflextive
67+
$slot = new $class();
68+
//si l'action passé en parametre est fournit avec une methode pointée on charge celle demandée sinon on charge celle par defaut
69+
if (isset($action[1])) {
70+
$method = $action[1];
71+
//On appel la méthode de la classe action de manière reflextive
72+
return $slot->$method(...$data);
73+
} else {
74+
return $slot->default(...$data);
75+
}
76+
} else {
77+
/*HandleError*/
78+
}
79+
}
80+
public static function getClassMethodStatic($class, $method, $args = array())
81+
{
82+
return $class::$method(...$args);
83+
}
84+
}

application/class/Vue.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public function __construct($page_params)
6060
switch ($engine){
6161
case 'twig':
6262
$renderer = new \Windwalker\Renderer\TwigRenderer($paths);
63+
$renderer->addExtension(new \MVC\Classe\TwigControlleurAction);
6364
$name .= '.html';
6465
break;
6566
case 'blade':

0 commit comments

Comments
 (0)