More changes
This commit is contained in:
@@ -7,7 +7,7 @@ class GeneratorController {
|
|||||||
private $langBase =
|
private $langBase =
|
||||||
<<<EOL
|
<<<EOL
|
||||||
<?php
|
<?php
|
||||||
\$lang['{{PLUGIN_NAME}}']['module_name'] = '{{PLUGIN_NAME_PRETTY}}';
|
\$lang["{{PLUGIN_NAME}}"]["module_name"] = "{{PLUGIN_NAME_PRETTY}}";
|
||||||
EOL;
|
EOL;
|
||||||
|
|
||||||
private $migrationBase =
|
private $migrationBase =
|
||||||
@@ -17,35 +17,43 @@ class GeneratorController {
|
|||||||
use Schema\Wrapper as Wrapper;
|
use Schema\Wrapper as Wrapper;
|
||||||
|
|
||||||
function {{PLUGIN_NAME}}_upgrade(\$pluginversion) {
|
function {{PLUGIN_NAME}}_upgrade(\$pluginversion) {
|
||||||
if (\$pluginversion < '1.0.0') {
|
if (\$pluginversion < "0.0.1") {
|
||||||
\$table = Wrapper::get_table('{{PLUGIN_NAME}}');
|
\$table = Wrapper::get_table("{{PLUGIN_NAME}}");
|
||||||
\$table->addColumn("name", 'string', Array('null' => false));
|
\$table->addColumn("name", "string", Array("null" => false));
|
||||||
\$table->addColumn("time", 'timestamp', Array('null' => true, 'default'=>null));
|
\$table->addColumn("time", "timestamp", Array("null" => true, "default"=>null));
|
||||||
\$table->addColumn("areaid", 'integer', Array('null' => false));
|
\$table->addColumn("areaid", "integer", Array("null" => false));
|
||||||
\$table->addTimestamps();
|
\$table->addTimestamps();
|
||||||
\$table->addSoftDelete();
|
\$table->addSoftDelete();
|
||||||
\$table->create();
|
\$table->create();
|
||||||
|
|
||||||
Migrator::getInstance()->update_plugin_version('{{PLUGIN_NAME}}', '1.0.0');
|
Migrator::getInstance()->update_plugin_version("{{PLUGIN_NAME}}", "1.0.0");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//if (\$pluginversion < '1.0.1') {
|
//if (\$pluginversion < "0.0.2") {
|
||||||
//\$table = Wrapper::get_table('{{PLUGIN_NAME}}');
|
//\$table = Wrapper::get_table("{{PLUGIN_NAME}}");
|
||||||
//Migrator::getInstance()->update_plugin_version('{{PLUGIN_NAME}}', '1.0.1');
|
//Migrator::getInstance()->update_plugin_version("{{PLUGIN_NAME}}", "1.0.1");
|
||||||
//return;
|
//return;
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function {{PLUGIN_NAME}}_rollback(\$pluginversion) {
|
||||||
|
if(\$pluginversion > "0.0.1"){
|
||||||
|
\$table = Wrapper::get_table("{{PLUGIN_NAME}}");
|
||||||
|
\$table->drop();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
EOL;
|
EOL;
|
||||||
|
|
||||||
private $versionBase =
|
private $versionBase =
|
||||||
<<<EOL
|
<<<EOL
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
\$plugin->name = '{{PLUGIN_NAME}}';
|
\$plugin->name = "{{PLUGIN_NAME}}";
|
||||||
\$plugin->version = '0.0.1';
|
\$plugin->version = "0.0.1";
|
||||||
|
|
||||||
//\$plugin->require = Array( ["name" => "plugin_name", "version" => 'x.x.x'] );
|
//\$plugin->require = Array( ["name" => "plugin_name", "version" => "x.x.x"] );
|
||||||
EOL;
|
EOL;
|
||||||
|
|
||||||
private $controllerBase =
|
private $controllerBase =
|
||||||
@@ -55,38 +63,93 @@ class GeneratorController {
|
|||||||
namespace {{NAMESPACE}};
|
namespace {{NAMESPACE}};
|
||||||
|
|
||||||
use \{{NAMESPACE}}\Classes\{{OBJECT}} as {{OBJECT}};
|
use \{{NAMESPACE}}\Classes\{{OBJECT}} as {{OBJECT}};
|
||||||
|
use \App\Core\Template\Output as Output;
|
||||||
|
|
||||||
class {{CONTROLLER}} {
|
class {{CONTROLLER}} {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index
|
||||||
|
* Show the main {{OBJECT}} list
|
||||||
|
*/
|
||||||
function index(){
|
function index(){
|
||||||
|
Output::setView('index');
|
||||||
|
\$list = Array();
|
||||||
|
|
||||||
|
for(\$i = 0; \$i <= 10; \$i++){
|
||||||
|
\$obj = Array();
|
||||||
|
\$obj['id'] = \$i;
|
||||||
|
\$obj['value'] = md5(\$i);
|
||||||
|
\$obj['description'] = sha1(\$i);
|
||||||
|
\$list[] = \$obj;
|
||||||
|
}
|
||||||
|
Output::addValue('list', \$list );
|
||||||
|
Output::render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create
|
||||||
|
* Render the main {{OBJECT}} formular
|
||||||
|
*/
|
||||||
function create(){
|
function create(){
|
||||||
|
Output::setView('form', ['id' => 0]);
|
||||||
|
Output::render();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store
|
||||||
|
* Store the param on the database
|
||||||
|
* @param {{OBJECT}} \${{OBJECT_LOWER}}
|
||||||
|
*/
|
||||||
|
function store({{OBJECT}} \${{OBJECT_LOWER}}){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function Store(){
|
/**
|
||||||
|
* Show
|
||||||
|
* Render one register
|
||||||
|
*
|
||||||
|
* @param {{OBJECT}} \${{OBJECT_LOWER}}
|
||||||
|
*/
|
||||||
|
function show({{OBJECT}} \${{OBJECT_LOWER}}){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function show({{OBJECT}} \{{OBJECT_LOWER}}){
|
/**
|
||||||
|
* Edit
|
||||||
|
* Render the formular for a database {{OBJECT}}
|
||||||
|
*
|
||||||
|
* @param {{OBJECT}} \${{OBJECT_LOWER}}
|
||||||
|
*/
|
||||||
|
function edit({{OBJECT}} \${{OBJECT_LOWER}}){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function edit({{OBJECT}} \{{OBJECT_LOWER}}){
|
/**
|
||||||
|
* Update
|
||||||
|
* Store the changes of the param on the database
|
||||||
|
*
|
||||||
|
* @param {{OBJECT}} \${{OBJECT_LOWER}}
|
||||||
|
*/
|
||||||
|
function update({{OBJECT}} \${{OBJECT_LOWER}}){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function update({{OBJECT}} \{{OBJECT_LOWER}}){
|
/**
|
||||||
|
* Destroy
|
||||||
|
* If the object has soft delete.
|
||||||
|
*
|
||||||
|
* @param {{OBJECT}} \${{OBJECT_LOWER}}
|
||||||
|
*/
|
||||||
|
function destroy({{OBJECT}} \${{OBJECT_LOWER}}){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
function destroy({{OBJECT}} \{{OBJECT_LOWER}}){
|
* Purge
|
||||||
|
* Remove object even with soft delete.
|
||||||
}
|
*
|
||||||
|
* @param {{OBJECT}} \${{OBJECT_LOWER}}
|
||||||
function purge({{OBJECT}} \{{OBJECT_LOWER}}){
|
*/
|
||||||
|
function purge({{OBJECT}} \${{OBJECT_LOWER}}){
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -103,15 +166,15 @@ class GeneratorController {
|
|||||||
|
|
||||||
class {{OBJECT}} extends Entity {
|
class {{OBJECT}} extends Entity {
|
||||||
|
|
||||||
//const _idPolice = Array('type' => '', 'min' => 0, 'max' => 100000, 'step' => 2);
|
//const _idPolice = Array("type" => "", "min" => 0, "max" => 100000, "step" => 2);
|
||||||
|
|
||||||
const _tableName = '{{TABLE_NAME}}';
|
const _tableName = "{{TABLE_NAME}}";
|
||||||
//const _properties = Array('id', 'name');
|
//const _properties = Array("id", "name");
|
||||||
|
|
||||||
//const _timestamps = true;
|
//const _timestamps = true;
|
||||||
//const _softdelete = true;
|
//const _softdelete = true;
|
||||||
|
|
||||||
//const _connectionName = '';
|
//const _connectionName = "";
|
||||||
}
|
}
|
||||||
EOL;
|
EOL;
|
||||||
|
|
||||||
@@ -121,17 +184,64 @@ class GeneratorController {
|
|||||||
|
|
||||||
use Routes\RouteCollection as RouteCollection;
|
use Routes\RouteCollection as RouteCollection;
|
||||||
|
|
||||||
RouteCollection::group('/{{PLUGIN_NAME}}', function(){
|
RouteCollection::group("/{{PLUGIN_NAME}}", function(){
|
||||||
RouteCollection::get ('/', '\{{NAMESPACE}}\{{CONTROLLER}}@index');
|
RouteCollection::get ("/", "\{{NAMESPACE}}\{{CONTROLLER}}@index");
|
||||||
RouteCollection::get ('/', '\{{NAMESPACE}}\{{CONTROLLER}}@create');
|
RouteCollection::get ("/form", "\{{NAMESPACE}}\{{CONTROLLER}}@create");
|
||||||
RouteCollection::post ('/', '\{{NAMESPACE}}\{{CONTROLLER}}@store');
|
RouteCollection::post ("/", "\{{NAMESPACE}}\{{CONTROLLER}}@store");
|
||||||
RouteCollection::get ('/[i:id]', '\{{NAMESPACE}}\{{CONTROLLER}}@show');
|
RouteCollection::get ("/[i:id]", "\{{NAMESPACE}}\{{CONTROLLER}}@show");
|
||||||
RouteCollection::get ('/[i:id]/edit', '\{{NAMESPACE}}\{{CONTROLLER}}@edit');
|
RouteCollection::get ("/[i:id]/edit", "\{{NAMESPACE}}\{{CONTROLLER}}@edit");
|
||||||
RouteCollection::put ('/[i:id]/edit', '\{{NAMESPACE}}\{{CONTROLLER}}@update');
|
RouteCollection::put ("/[i:id]/edit", "\{{NAMESPACE}}\{{CONTROLLER}}@update");
|
||||||
RouteCollection::delete('/[i:id]', '\{{NAMESPACE}}\{{CONTROLLER}}@destroy');
|
RouteCollection::delete("/[i:id]", "\{{NAMESPACE}}\{{CONTROLLER}}@destroy");
|
||||||
});
|
});
|
||||||
EOL;
|
EOL;
|
||||||
|
|
||||||
|
private $indexTemplate =
|
||||||
|
<<<EOL
|
||||||
|
<a href='{{ENDPOINT}}/form' >Adicionar </a>
|
||||||
|
<div class="table-responsive">
|
||||||
|
<table class='table'>
|
||||||
|
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Id</th>
|
||||||
|
<th>Value</th>
|
||||||
|
<th>Description</th>
|
||||||
|
<th>Actions</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
|
||||||
|
{{#list}}
|
||||||
|
<tr class="table-dark" data-id='{{id}}'>
|
||||||
|
<td>{{id}}</td>
|
||||||
|
<td>{{value}}</td>
|
||||||
|
<td>{{description}}</td>
|
||||||
|
<td>
|
||||||
|
<a href="{{ENDPOINT}}/edit"> <i class="fa fa-pencil"></i></a>
|
||||||
|
<a href="{{ENDPOINT}}/purge"> <i class="fa fa-fire"></i></a>
|
||||||
|
<a href="{{ENDPOINT}}/"> <i class="fa fa-plus"></i></a>
|
||||||
|
<a href="{{ENDPOINT}}/destroy"> <i class="fa fa-trash-o"></i></a>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{{/list}}
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
EOL;
|
||||||
|
|
||||||
|
private $formTemplate =
|
||||||
|
<<<EOL
|
||||||
|
{{@ if( {{id}} ): @}}
|
||||||
|
<form method="POST" action="{{ENDPOINT}}/{{id}}/edit">
|
||||||
|
<input type="hidden" name="id" value="{{id}}" />
|
||||||
|
<input type="hidden" name="_method" value="put" />
|
||||||
|
{{@ else: @}}
|
||||||
|
<form method="POST" action="{{ENDPOINT}}">
|
||||||
|
<input type="hidden" name="id" value="" />
|
||||||
|
{{@ endif; @}}
|
||||||
|
|
||||||
|
</form>
|
||||||
|
EOL;
|
||||||
|
|
||||||
|
|
||||||
private $ctagsHeader =
|
private $ctagsHeader =
|
||||||
<<<EOL
|
<<<EOL
|
||||||
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
|
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
|
||||||
@@ -146,63 +256,72 @@ class GeneratorController {
|
|||||||
|
|
||||||
function createPluginFromTemplate($subname, $name){
|
function createPluginFromTemplate($subname, $name){
|
||||||
|
|
||||||
if (is_dir( DIR_APP.$subname . '/' . $name )){
|
if (is_dir( DIR_APP.$subname . "/" . $name )){
|
||||||
echo 'Treco ja existe';
|
echo "Treco ja existe";
|
||||||
return;
|
return;
|
||||||
}else{
|
}else{
|
||||||
mkdir(DIR_APP.$subname . '/' . $name, 0755, true);
|
mkdir(DIR_APP.$subname . "/" . $name, 0755, true);
|
||||||
mkdir(DIR_APP.$subname . '/' . $name . '/lang', 0755, true);
|
mkdir(DIR_APP.$subname . "/" . $name . "/lang", 0755, true);
|
||||||
mkdir(DIR_APP.$subname . '/' . $name . '/classes', 0755, true);
|
mkdir(DIR_APP.$subname . "/" . $name . "/classes", 0755, true);
|
||||||
mkdir(DIR_APP.$subname . '/' . $name . '/db', 0755, true);
|
mkdir(DIR_APP.$subname . "/" . $name . "/db", 0755, true);
|
||||||
mkdir(DIR_APP.$subname . '/' . $name . '/views', 0755, true);
|
mkdir(DIR_APP.$subname . "/" . $name . "/views", 0755, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
$plugin_name = $name;
|
$plugin_name = $name;
|
||||||
$namespace = "App\\".ucfirst($subname).'\\'.ucfirst($name);
|
$namespace = "App\\".ucfirst($subname)."\\".ucfirst($name);
|
||||||
$plugin_name_pretty = ucwords(str_replace('_', ' ', $name));
|
$plugin_name_pretty = ucwords(str_replace("_", " ", $name));
|
||||||
$object = ucfirst( $name );
|
$object = ucfirst( $name );
|
||||||
$controller = $object.'Controller';
|
$controller = $object."Controller";
|
||||||
|
|
||||||
$this->langBase = str_replace("{{PLUGIN_NAME}}", $plugin_name, $this->langBase);
|
$this->langBase = str_replace("{{PLUGIN_NAME}}", $plugin_name, $this->langBase);
|
||||||
$this->langBase = str_replace("{{PLUGIN_NAME_PRETTY}}", $plugin_name_pretty, $this->langBase);
|
$this->langBase = str_replace("{{PLUGIN_NAME_PRETTY}}", $plugin_name_pretty, $this->langBase);
|
||||||
file_put_contents(DIR_APP.$subname . '/' . $name . '/lang/en.php', $this->langBase);
|
file_put_contents(DIR_APP.$subname . "/" . $name . "/lang/en.php", $this->langBase);
|
||||||
file_put_contents(DIR_APP.$subname . '/' . $name . '/lang/'.APP_LANG.'.php', $this->langBase);
|
file_put_contents(DIR_APP.$subname . "/" . $name . "/lang/".APP_LANG.".php", $this->langBase);
|
||||||
|
|
||||||
$this->migrationBase = str_replace("{{PLUGIN_NAME}}", $plugin_name, $this->migrationBase);
|
$this->migrationBase = str_replace("{{PLUGIN_NAME}}", $plugin_name, $this->migrationBase);
|
||||||
file_put_contents(DIR_APP.$subname . '/' . $name . '/db/Migrate.php', $this->migrationBase);
|
file_put_contents(DIR_APP.$subname . "/" . $name . "/db/Migrate.php", $this->migrationBase);
|
||||||
|
|
||||||
$this->routeBase = str_replace("{{NAMESPACE}}", $namespace, $this->routeBase);
|
$this->routeBase = str_replace("{{NAMESPACE}}", $namespace, $this->routeBase);
|
||||||
$this->routeBase = str_replace("{{PLUGIN_NAME}}", $plugin_name, $this->routeBase);
|
$this->routeBase = str_replace("{{PLUGIN_NAME}}", $plugin_name, $this->routeBase);
|
||||||
$this->routeBase = str_replace("{{CONTROLLER}}", $controller, $this->routeBase);
|
$this->routeBase = str_replace("{{CONTROLLER}}", $controller, $this->routeBase);
|
||||||
file_put_contents(DIR_APP.$subname . '/' . $name . '/Routes.php', $this->routeBase);
|
file_put_contents(DIR_APP.$subname . "/" . $name . "/Routes.php", $this->routeBase);
|
||||||
|
|
||||||
$this->objectBase = str_replace("{{NAMESPACE}}", $namespace.'\Classes', $this->objectBase);
|
$this->objectBase = str_replace("{{NAMESPACE}}", $namespace."\Classes", $this->objectBase);
|
||||||
$this->objectBase = str_replace("{{OBJECT}}", $object, $this->objectBase);
|
$this->objectBase = str_replace("{{OBJECT}}", $object, $this->objectBase);
|
||||||
$this->objectBase = str_replace("{{TABLE_NAME}}", $name, $this->objectBase);
|
$this->objectBase = str_replace("{{TABLE_NAME}}", $name, $this->objectBase);
|
||||||
file_put_contents(DIR_APP.$subname . '/' . $name . "/classes/$object.php", $this->objectBase);
|
file_put_contents(DIR_APP.$subname . "/" . $name . "/classes/$object.php", $this->objectBase);
|
||||||
|
|
||||||
$this->controllerBase = str_replace("{{NAMESPACE}}", $namespace, $this->controllerBase);
|
$this->controllerBase = str_replace("{{NAMESPACE}}", $namespace, $this->controllerBase);
|
||||||
$this->controllerBase = str_replace("{{OBJECT}}", $object, $this->controllerBase);
|
$this->controllerBase = str_replace("{{OBJECT}}", $object, $this->controllerBase);
|
||||||
$this->controllerBase = str_replace("{{OBJECT_LOWER}}",strlower($object), $this->controllerBase);
|
$this->controllerBase = str_replace("{{OBJECT_LOWER}}",strtolower($object), $this->controllerBase);
|
||||||
$this->controllerBase = str_replace("{{CONTROLLER}}", $controller, $this->controllerBase);
|
$this->controllerBase = str_replace("{{CONTROLLER}}", $controller, $this->controllerBase);
|
||||||
file_put_contents(DIR_APP.$subname . '/' . $name . "/$controller.php", $this->controllerBase);
|
file_put_contents(DIR_APP.$subname . "/" . $name . "/$controller.php", $this->controllerBase);
|
||||||
|
|
||||||
|
$this->versionBase = str_replace("{{PLUGIN_NAME}}", $subname."_".$plugin_name, $this->versionBase);
|
||||||
|
file_put_contents(DIR_APP.$subname . "/" . $name . "/version.php", $this->versionBase);
|
||||||
|
|
||||||
|
$this->indexTemplate = str_replace("{{ENDPOINT}}", $plugin_name, $this->indexTemplate);
|
||||||
|
file_put_contents(DIR_APP.$subname . "/" . $name . "/views/index.mustache", $this->indexTemplate);
|
||||||
|
|
||||||
|
$this->formTemplate = str_replace("{{ENDPOINT}}", $plugin_name, $this->formTemplate);
|
||||||
|
file_put_contents(DIR_APP.$subname . "/" . $name . "/views/form.mustache", $this->formTemplate);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function listRoutes(){
|
function listRoutes(){
|
||||||
echo str_pad('VERB', 10, ' ', STR_PAD_BOTH) . "||";
|
echo str_pad("VERB", 10, " ", STR_PAD_BOTH) . "||";
|
||||||
echo str_pad('URI' , 35, ' ', STR_PAD_BOTH) . "||";
|
echo str_pad("URI" , 35, " ", STR_PAD_BOTH) . "||";
|
||||||
echo str_pad('W', 5, ' ', STR_PAD_BOTH) . "||";
|
echo str_pad("W", 5, " ", STR_PAD_BOTH) . "||";
|
||||||
echo str_pad('FUNCTION', 60, ' ', STR_PAD_BOTH) . "\n";
|
echo str_pad("FUNCTION", 60, " ", STR_PAD_BOTH) . "\n";
|
||||||
echo str_pad('', 120, '-') . "\n";
|
echo str_pad("", 120, "-") . "\n";
|
||||||
foreach(\Routes\RouteCollection::returnRoutes() as $route){
|
foreach(\Routes\RouteCollection::returnRoutes() as $route){
|
||||||
echo str_pad(implode($route->_verb , ', '), 10, ' ', STR_PAD_BOTH) . "||";
|
echo str_pad(implode($route->_verb , ", "), 10, " ", STR_PAD_BOTH) . "||";
|
||||||
echo str_pad($route->_uri, 35, ' ', STR_PAD_RIGHT) . "||";
|
echo str_pad($route->_uri, 35, " ", STR_PAD_RIGHT) . "||";
|
||||||
echo str_pad($route->_weight, 5, ' ', STR_PAD_BOTH). "||";
|
echo str_pad($route->_weight, 5, " ", STR_PAD_BOTH). "||";
|
||||||
if( gettype($route->_callback[0]) == 'object' ){
|
if( gettype($route->_callback[0]) == "object" ){
|
||||||
echo str_pad('Clousure', 60, ' ', STR_PAD_RIGHT);
|
echo str_pad("Clousure", 60, " ", STR_PAD_RIGHT);
|
||||||
}else{
|
}else{
|
||||||
echo str_pad($route->_callback[0], 30, ' ', STR_PAD_RIGHT);
|
echo str_pad($route->_callback[0], 30, " ", STR_PAD_RIGHT);
|
||||||
}
|
}
|
||||||
echo "\n";
|
echo "\n";
|
||||||
}
|
}
|
||||||
@@ -210,19 +329,19 @@ class GeneratorController {
|
|||||||
|
|
||||||
function createTags(){
|
function createTags(){
|
||||||
$outputs = shell_exec("grep -Rnsi '@ctag' . | sed s/\ //g | sed s/*@ctag/\ /g");
|
$outputs = shell_exec("grep -Rnsi '@ctag' . | sed s/\ //g | sed s/*@ctag/\ /g");
|
||||||
$outputs = preg_split('/\R/', $outputs);
|
$outputs = preg_split("/\R/", $outputs);
|
||||||
$return = $this->ctagsHeader . "\n";
|
$return = $this->ctagsHeader . "\n";
|
||||||
foreach($outputs as $output){
|
foreach($outputs as $output){
|
||||||
$line = explode(' ', str_replace('\\t', '', $output) );
|
$line = explode(" ", str_replace("\\t", "", $output) );
|
||||||
@$line = $line[1] . "\t " . str_replace('./', '', explode(':', $line[0])[0]) . "\t ".$line[1] . "\n";
|
@$line = $line[1] . "\t " . str_replace("./", "", explode(":", $line[0])[0]) . "\t ".$line[1] . "\n";
|
||||||
if( strpos($line, 'app/core/generator/GeneratorController.php') ){
|
if( strpos($line, "app/core/generator/GeneratorController.php") ){
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$return .= $line;
|
$return .= $line;
|
||||||
//echo "Generating: ".$line."\n";
|
//echo "Generating: ".$line."\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
file_put_contents(DIR_ROOT.'tags', $return);
|
file_put_contents(DIR_ROOT."tags", $return);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Executable
+198
@@ -0,0 +1,198 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Core\Sanity;
|
||||||
|
|
||||||
|
class MigratorController {
|
||||||
|
|
||||||
|
private static $instance;
|
||||||
|
private $instaled;
|
||||||
|
private $phisical;
|
||||||
|
private $uninstall = Array();
|
||||||
|
private $downgrade = Array();
|
||||||
|
private $upgrade = Array();
|
||||||
|
private $install = Array();
|
||||||
|
|
||||||
|
private function __construct() {
|
||||||
|
$this->load_installed_plugins();
|
||||||
|
$this->load_physical_plugins();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static function newObj() {
|
||||||
|
if (!isset(self::$instance)) {
|
||||||
|
self::$instance = new MigratorController();
|
||||||
|
}
|
||||||
|
return self::$instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getInstance() {
|
||||||
|
if (!isset(self::$instance)) {
|
||||||
|
return self::newObj();
|
||||||
|
}
|
||||||
|
return self::$instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function sentinel() {
|
||||||
|
global $ROUTE;
|
||||||
|
|
||||||
|
if (!is_file(DIR_CONFIG . 'modules.ini')) {
|
||||||
|
if (INSTALL_REQUIRE) {
|
||||||
|
$ROUTE->doBlock()->setHttpError(500);
|
||||||
|
}
|
||||||
|
file_put_contents(DIR_CONFIG . 'modules.ini', '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private function save() {
|
||||||
|
$out = '';
|
||||||
|
foreach ($this->instaled as $instaled) {
|
||||||
|
$out .= "[$instaled->name]\n";
|
||||||
|
$out .= "name=$instaled->name\n";
|
||||||
|
$out .= "version=$instaled->version\n\n";
|
||||||
|
}
|
||||||
|
file_put_contents(DIR_CONFIG . '/modules.ini', $out);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function is_satisfy($name, $version) {
|
||||||
|
if (!isset($this->instaled[$name])) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if ($this->instaled[$name]->version >= $version) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function is_satisfy_array($array) {
|
||||||
|
foreach ($array as $item) {
|
||||||
|
if (!self::is_satisfy($item->name, $item->version)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update_plugin_version($name, $version) {
|
||||||
|
echo "Atualizando $name para versão $version\n";
|
||||||
|
if (isset($this->instaled[$name])) {
|
||||||
|
$this->instaled[$name]->version = $version;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
$this->instaled[$name] = new \stdClass();
|
||||||
|
$this->instaled[$name]->name = $name;
|
||||||
|
$this->instaled[$name]->version = $version;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function load_installed_plugins() {
|
||||||
|
$installed = parse_ini_file(DIR_CONFIG . 'modules.ini', true);
|
||||||
|
|
||||||
|
foreach ($installed as $key => $item) {
|
||||||
|
$installed[$key] = (object) $item;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->instaled = $installed;
|
||||||
|
}
|
||||||
|
|
||||||
|
private function load_physical_plugins() {
|
||||||
|
$module_configs = Array();
|
||||||
|
$plugins = Array();
|
||||||
|
|
||||||
|
$rdi = new \RecursiveDirectoryIterator(DIR_APP);
|
||||||
|
|
||||||
|
foreach (new \RecursiveIteratorIterator($rdi) as $file) {
|
||||||
|
if (strpos($file, 'version.php')) {
|
||||||
|
$module_configs[] = str_replace('version.php', '', $file);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach ($module_configs as $module_config) {
|
||||||
|
$plugin = new \stdClass();
|
||||||
|
include $module_config . 'version.php';
|
||||||
|
$plugins[$plugin->name] = $plugin;
|
||||||
|
if (is_file($module_config . 'db/Migrate.php')) {
|
||||||
|
include $module_config . 'db/Migrate.php';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->phisical = $plugins;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function physical_list() {
|
||||||
|
return $this->phisical;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function installed_list() {
|
||||||
|
return $this->instaled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function instal_list() {
|
||||||
|
return $this->install;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function uninstal_list() {
|
||||||
|
return $this->uninstall;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function sort_plugins() {
|
||||||
|
foreach ($this->phisical as $key => $plugin) {
|
||||||
|
if (!isset($this->instaled[$key])) {
|
||||||
|
$this->install[] = $plugin;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ($this->instaled[$key]->version < $plugin->version) {
|
||||||
|
$this->upgrade[] = $plugin;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if ($this->instaled[$key]->version > $plugin->version) {
|
||||||
|
$this->downgrade[] = $plugin;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$this->uninstall[] = $plugin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function execute_plan() {
|
||||||
|
$status = false;
|
||||||
|
while (!$status) {
|
||||||
|
$this->sort_plugins();
|
||||||
|
$status = true;
|
||||||
|
|
||||||
|
foreach ($this->install as $key => $item) {
|
||||||
|
if (isset($item->require)) {
|
||||||
|
if (!self::is_satisfy_array($item->require)) {
|
||||||
|
$status = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!self::is_satisfy($item->name, $item->version)) {
|
||||||
|
if (!function_exists($item->name . '_upgrade')) {
|
||||||
|
$this->update_plugin_version($item->name, $item->version);
|
||||||
|
$this->upgrade[] = $item;
|
||||||
|
unset($this->install[$key]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
call_user_func($item->name . '_upgrade', 0);
|
||||||
|
$this->upgrade[] = $this->instaled[$item->name];
|
||||||
|
unset($this->install[$key]);
|
||||||
|
$status = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($this->upgrade as $item) {
|
||||||
|
if (isset($item->require)) {
|
||||||
|
if (!self::is_satisfy_array($item->require)) {
|
||||||
|
$status = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!self::is_satisfy($item->name, $item->version)) {
|
||||||
|
if (!function_exists($item->name . '_upgrade')) {
|
||||||
|
$this->update_plugin_version($item->name, $item->version);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
call_user_func($item->name . '_upgrade', $this->instaled[$item->name]->version);
|
||||||
|
$status = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,27 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Routes\RouteCollection as RouteCollection;
|
use Routes\RouteCollection as RouteCollection;
|
||||||
use DDLWrapper\Wrapper as Wrapper;
|
use ORM\Connections as Connections;
|
||||||
|
use Schema\Wrapper as Wrapper;
|
||||||
|
|
||||||
RouteCollection::cli('sanity/install', function() {
|
RouteCollection::cli('sanity/install', function() {
|
||||||
include_once 'classes/Migrator.class.php';
|
|
||||||
|
|
||||||
global $DB;
|
|
||||||
Wrapper::set_driver($DB);
|
|
||||||
|
|
||||||
Migrator::getInstance()->execute_plan();
|
|
||||||
|
|
||||||
|
Wrapper::set_driver(Connections::getConnection());
|
||||||
|
App\Core\Sanity\MigratorController::getInstance()->execute_plan();
|
||||||
Wrapper::commit();
|
Wrapper::commit();
|
||||||
|
|
||||||
})->middlewareIgnore('auth');
|
})->middlewareIgnore('auth');
|
||||||
|
|
||||||
|
|
||||||
RouteCollection::add('*', '*', function() {
|
RouteCollection::add('*', '*', function() {
|
||||||
global $ROUTE;
|
App\Core\Sanity\MigratorController::getInstance()->sentinel();
|
||||||
if(INSTALL_REQUIRE){
|
|
||||||
//App need to be installed
|
|
||||||
if (!is_file(DIR_CONFIG . 'modules.ini')) {
|
|
||||||
$ROUTE->doBlock()->setHttpError(500);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}, -19)->doIgnore()->middlewareIgnore('auth');
|
}, -19)->doIgnore()->middlewareIgnore('auth');
|
||||||
@@ -1,183 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
class Migrator{
|
|
||||||
|
|
||||||
private static $instance;
|
|
||||||
|
|
||||||
private $instaled;
|
|
||||||
private $phisical;
|
|
||||||
|
|
||||||
private $uninstall = Array();
|
|
||||||
private $downgrade = Array();
|
|
||||||
|
|
||||||
private $upgrade = Array();
|
|
||||||
private $install = Array();
|
|
||||||
|
|
||||||
private function __construct(){
|
|
||||||
$this->load_installed_plugins();
|
|
||||||
$this->load_physical_plugins();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function newObj(){
|
|
||||||
if (!isset( self::$instance )) {
|
|
||||||
self::$instance = new Migrator();
|
|
||||||
}
|
|
||||||
return self::$instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getInstance(){
|
|
||||||
if (!isset(self::$instance)) {
|
|
||||||
return self::newObj();
|
|
||||||
}
|
|
||||||
return self::$instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function save(){
|
|
||||||
$out = '';
|
|
||||||
foreach ($this->instaled as $instaled){
|
|
||||||
$out .= "[$instaled->name]\n";
|
|
||||||
$out .= "name=$instaled->name\n";
|
|
||||||
$out .= "version=$instaled->version\n\n";
|
|
||||||
}
|
|
||||||
file_put_contents(DIR_CONFIG.'/modules.ini', $out);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function is_satisfy($name, $version){
|
|
||||||
if(!isset($this->instaled[$name])){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if($this->instaled[$name]->version >= $version){
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function is_satisfy_array($array){
|
|
||||||
foreach ($array as $item){
|
|
||||||
if( !self::is_satisfy($item->name, $item->version) ){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function update_plugin_version($name, $version){
|
|
||||||
echo "Atualizando $name para versão $version\n";
|
|
||||||
if( isset($this->instaled[$name]) ){
|
|
||||||
$this->instaled[$name]->version = $version;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$this->instaled[$name] = new stdClass();
|
|
||||||
$this->instaled[$name]->name = $name;
|
|
||||||
$this->instaled[$name]->version = $version;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function load_installed_plugins(){
|
|
||||||
$installed = parse_ini_file(DIR_CONFIG.'/modules.ini', true);
|
|
||||||
|
|
||||||
foreach ($installed as $key => $item) {
|
|
||||||
$installed[$key] = (object) $item;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->instaled = $installed;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function load_physical_plugins(){
|
|
||||||
$module_configs = Array();
|
|
||||||
$plugins = Array();
|
|
||||||
|
|
||||||
$rdi = new RecursiveDirectoryIterator(DIR_APP);
|
|
||||||
|
|
||||||
foreach(new RecursiveIteratorIterator($rdi) as $file){
|
|
||||||
if( strpos($file, 'version.php') ){
|
|
||||||
$module_configs[] = str_replace('version.php','', $file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach ($module_configs as $module_config) {
|
|
||||||
$plugin = new stdClass();
|
|
||||||
include $module_config . 'version.php';
|
|
||||||
$plugins[$plugin->name] = $plugin;
|
|
||||||
if(is_file( $module_config . 'db/Migrate.php') ){
|
|
||||||
//echo 'aaaaaaaaaaaa';
|
|
||||||
include $module_config . 'db/Migrate.php';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->phisical = $plugins;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function physical_list(){
|
|
||||||
return $this->phisical;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function installed_list(){
|
|
||||||
return $this->instaled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function instal_list(){
|
|
||||||
return $this->install;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function uninstal_list(){
|
|
||||||
return $this->uninstall;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function sort_plugins(){
|
|
||||||
foreach ($this->phisical as $key => $plugin){
|
|
||||||
if( !isset($this->instaled[$key]) ){
|
|
||||||
$this->install[] = $plugin;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if( $this->instaled[$key]->version < $plugin->version){
|
|
||||||
$this->upgrade[] = $plugin;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if( $this->instaled[$key]->version > $plugin->version){
|
|
||||||
$this->downgrade[] = $plugin;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$this->uninstall[] = $plugin;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function execute_plan(){
|
|
||||||
$status = false;
|
|
||||||
while(! $status ){
|
|
||||||
$this->sort_plugins();
|
|
||||||
$status = true;
|
|
||||||
|
|
||||||
foreach ($this->install as $key => $item) {
|
|
||||||
if( isset($item->require) ){
|
|
||||||
if( !self::is_satisfy_array($item->require) ){ $status = false; continue; }
|
|
||||||
}
|
|
||||||
if(!self::is_satisfy($item->name, $item->version) ){
|
|
||||||
if(!function_exists($item->name.'_upgrade')){
|
|
||||||
$this->update_plugin_version($item->name, $item->version);
|
|
||||||
$this->upgrade[] = $item;
|
|
||||||
unset($this->install[$key]);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
call_user_func($item->name.'_upgrade', 0);
|
|
||||||
$this->upgrade[] = $this->instaled[$item->name];
|
|
||||||
unset($this->install[$key]);
|
|
||||||
$status = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($this->upgrade as $item) {
|
|
||||||
if( isset($item->require) ){
|
|
||||||
if( !self::is_satisfy_array($item->require) ){ $status = false; continue; }
|
|
||||||
}
|
|
||||||
if(!self::is_satisfy($item->name, $item->version) ){
|
|
||||||
if(!function_exists($item->name.'_upgrade')){
|
|
||||||
$this->update_plugin_version($item->name, $item->version);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
call_user_func($item->name.'_upgrade', $this->instaled[$item->name]->version);
|
|
||||||
$status = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->save();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -47,7 +47,8 @@ class Output {
|
|||||||
self::getInstance()->setView($name, $values, $location)->render();
|
self::getInstance()->setView($name, $values, $location)->render();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function setView($name, $values = Array(), $location = null) {
|
public static function setView($name = '', $values = Array(), $location = null) {
|
||||||
|
if($name == ''){ return self::getInstance(); }
|
||||||
$instance = self::getInstance();
|
$instance = self::getInstance();
|
||||||
$folder = '';
|
$folder = '';
|
||||||
if (!$location) {
|
if (!$location) {
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ class Dashboard extends RenderableTemplate {
|
|||||||
global $DROPDOWN, $SIDEBAR;
|
global $DROPDOWN, $SIDEBAR;
|
||||||
|
|
||||||
$head = '';
|
$head = '';
|
||||||
$head .= '<meta name="viewport" content="width=device-width, initial-scale=1.0">';
|
|
||||||
$head .= '<script src="/plugins/jquery/jquery.min.js"></script>';
|
$head .= '<script src="/plugins/jquery/jquery.min.js"></script>';
|
||||||
|
|
||||||
$head .= '<script src="/plugins/mousetrap/mousetrap.min.js"></script>';
|
$head .= '<script src="/plugins/mousetrap/mousetrap.min.js"></script>';
|
||||||
@@ -31,7 +31,7 @@ class Dashboard extends RenderableTemplate {
|
|||||||
$head .= '<link href="/plugins/normalize-css/normalize.css" rel="stylesheet">';
|
$head .= '<link href="/plugins/normalize-css/normalize.css" rel="stylesheet">';
|
||||||
$head .= '<link href="/dist/style.css" rel="stylesheet">';
|
$head .= '<link href="/dist/style.css" rel="stylesheet">';
|
||||||
|
|
||||||
$head .= '<link href="/dist/theme/black_and_white.css" rel="stylesheet">';
|
$head .= '<link href="/dist/themes/black_and_white.css" rel="stylesheet">';
|
||||||
|
|
||||||
$head .= '<link href="/plugins/metisMenu/metisMenu.min.css" rel="stylesheet">';
|
$head .= '<link href="/plugins/metisMenu/metisMenu.min.css" rel="stylesheet">';
|
||||||
$head .= '<script src="/plugins/metisMenu/metisMenu.min.js"></script>';
|
$head .= '<script src="/plugins/metisMenu/metisMenu.min.js"></script>';
|
||||||
@@ -47,7 +47,6 @@ class Dashboard extends RenderableTemplate {
|
|||||||
|
|
||||||
$foot = '';
|
$foot = '';
|
||||||
$foot .= '<script src="/dist/script.js"></script>';
|
$foot .= '<script src="/dist/script.js"></script>';
|
||||||
$foot .= '<script src="/dist/exercicio_form.js"></script>';
|
|
||||||
|
|
||||||
$this->content = file_get_contents(__DIR__ . '/template.html');
|
$this->content = file_get_contents(__DIR__ . '/template.html');
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta charset="utf-8">
|
||||||
{{head}}
|
{{head}}
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|||||||
Executable
+40
@@ -0,0 +1,40 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use ORM\Connections as Connections;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PostgreSQL
|
||||||
|
*
|
||||||
|
* Connections::addConnection(Connection::open([
|
||||||
|
'driver' => 'pgsql',
|
||||||
|
'host' => 'localhost',
|
||||||
|
'prefix' => '_urfat',
|
||||||
|
'name' => 'urfat',
|
||||||
|
'user' => 'urfat',
|
||||||
|
'pass' => 'urfat'])
|
||||||
|
, "default");
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mysql
|
||||||
|
*
|
||||||
|
* Connections::addConnection(Connection::open([
|
||||||
|
'driver' => 'mysql',
|
||||||
|
'host' => 'localhost',
|
||||||
|
'prefix' => '_urfat',
|
||||||
|
'name' => 'urfat',
|
||||||
|
'user' => 'urfat',
|
||||||
|
'pass' => 'urfat'])
|
||||||
|
, "default");
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sqlite
|
||||||
|
*
|
||||||
|
Connections::addConnection(Connection::open([
|
||||||
|
'driver' => 'sqlite',
|
||||||
|
'prefix' => '_urfat',
|
||||||
|
'name' => 'database.db'])
|
||||||
|
, "default");
|
||||||
|
*/
|
||||||
Vendored
+1
-1
@@ -19,7 +19,7 @@ function log(message, importance = 0) {
|
|||||||
}
|
}
|
||||||
if (importance === 2) {
|
if (importance === 2) {
|
||||||
alert("LOG:: |" + message + "|");
|
alert("LOG:: |" + message + "|");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function isDefined(data) {
|
function isDefined(data) {
|
||||||
|
|||||||
Vendored
+16
-10
@@ -1,15 +1,11 @@
|
|||||||
/*
|
/*
|
||||||
Devel
|
*Devel
|
||||||
*/
|
*/
|
||||||
|
|
||||||
table tr .selected{
|
table tr .selected{
|
||||||
background-color: #d9edf7;
|
background-color: #d9edf7;
|
||||||
}
|
}
|
||||||
|
|
||||||
.hidden{
|
|
||||||
display:none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.no-scroll{
|
.no-scroll{
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
@@ -40,6 +36,7 @@ body{
|
|||||||
*/
|
*/
|
||||||
textarea{
|
textarea{
|
||||||
resize: vertical;
|
resize: vertical;
|
||||||
|
min-height: 200px
|
||||||
}
|
}
|
||||||
|
|
||||||
.data-table table{
|
.data-table table{
|
||||||
@@ -175,11 +172,11 @@ textarea{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
_ _ ______ _____ ______ _____
|
_ _ ______ ^ _____ ______ _____
|
||||||
| | | | ____| /\ | __ \| ____| __ \
|
| | | | ____| / \ | __ \| ____| __ \
|
||||||
| |__| | |__ / \ | | | | |__ | |__) |
|
| |__| | |__ / \ | | | | |__ | |__) |
|
||||||
| __ | __| / /\ \ | | | | __| | _ /
|
| __ | __| / /_\ \ | | | | __| | _ /
|
||||||
| | | | |____ / ____ \| |__| | |____| | \ \
|
| | | | |____ / _____ \| |__| | |____| | \ \
|
||||||
|_| |_|______/_/ \_\_____/|______|_| \_\
|
|_| |_|______/_/ \_\_____/|______|_| \_\
|
||||||
|
|
||||||
*/
|
*/
|
||||||
@@ -204,4 +201,13 @@ textarea{
|
|||||||
border-radius: 0px !important;
|
border-radius: 0px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*--*/
|
/* HELPER ---------------------------- */
|
||||||
|
|
||||||
|
.round-ball{
|
||||||
|
border-radius: 60px !important;
|
||||||
|
font-size: 1.5em;
|
||||||
|
position: fixed;
|
||||||
|
padding: 20px;
|
||||||
|
bottom: 20px;
|
||||||
|
right: 20px;
|
||||||
|
}
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
User-agent: *
|
||||||
|
Disallow: /
|
||||||
Reference in New Issue
Block a user