Git Product home page Git Product logo

dynao-cms's People

Contributors

aaroniker avatar cyperghost avatar sysix avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

pulloverschwein

dynao-cms's Issues

Bugfixe für 0.2

  • Addon dir löschen geht nicht
  • Abfrage ob aktuellste Version klappt nicht
  • Blöcke hinzufügen geht nicht
  • ganzen Block löschen fehlt
  • Blöcke editieren/löschen/hinzufügen nochmal auf Cache überprüfen
  • Blöcke sortieren muss noch block=1 bzw. block=0 abgefragt werden
  • Blöcke und Module aus config.json vom Template geht nicht
  • Backend Menü anpassen bei zu vielen Punkten nicht sichtbar
  • Module importieren fehlt ne Upload Funktion (die Dateien, die beim exportieren erstellt werden)
  • Idee Mail abschicken fehlt (ajax)
  • Install-Layout

SQL QueryType ändert sich nach der 1. Zeile

Usecase:

$sql = new sql();
$sql->query('......'), MYSQL_NUM);
while($sql->isNext()) {

$sql->next();
}

Nachdem sql->next() aufgerufen worden ist, setzt er den query wieder auf default wert.
Es liegt daran, dass sql->next() sql->result() aufruft ohne parameter zu übergeben

Addons

Eine Addonliste die abgearbeitet wird

  • Metainfos (100%)
  • TinyMCE (50%)
  • Medienmanager (90%)
  • Imagemanager (80%)
  • SEO (70%)
  • Im/Export SQL (75%)
  • Developer Addon (Module & Slot exportieren) <- ist fest im System!

Addon vorschläge kann man natürlich auch hier schreiben.

strpos vs in_array

Hallo ich hba gerade ein Test gemacht wer schneller ist:

strpos vs in_array?

Mein Code:

$string  = '|1|2|3|6|';
$gesucht = 3;
$gesucht2 = 7;
$durchlauf = 1000000;

$start = microtime(true);
$array = explode('|', $string);
for($i=0; $i<$durchlauf; $i++) {    
    if(in_array($gesucht, $array)) { }
}
$time = microtime(true) - $start;
echo 'in_array gefunden Dauer: '.$time.' Sekunden<br />';

$start = microtime(true);
for($i=0; $i<$durchlauf; $i++) {    
    if(strpos($string, '|'.$gesucht.'|') !== false) { }
}
$time = microtime(true) - $start;
echo 'strpos gefunden Dauer: '.$time.' Sekunden<br />';


$start = microtime(true);
$array = explode('|', $string);
for($i=0; $i<$durchlauf; $i++) {    
    if(in_array($gesucht2, $array)) { } 
}
$time = microtime(true) - $start;
echo 'in_array nicht gefunden Dauer: '.$time.' Sekunden<br />';

$start = microtime(true);
for($i=0; $i<$durchlauf; $i++) {    
    if(strpos($string, '|'.$gesucht2.'|') !== false) { }
}
$time = microtime(true) - $start;
echo 'strpos nicht gefunden Dauer: '.$time.' Sekunden<br />';

explode hab ich extra im Zeiterfassung mit riengehauen, da das in unseren Code auch als Zeit aufgefasst werden muss ;)

Wieso der Test?
4bd0670#L1L26 hab ich in_array mit strpos ersetzt.. weil das Codesparender war.. aber nicht perfomance

Was machen wir nun?
strpos drinlassen und die "wertvolle" Zeit verlieren oder wieder umbauen :)?

Skype Besprechungen

Hallo,

wirh aben schon seit Monaten nichtmehr miteinander diskutiert (auch andere Mitglieder hier bei uns). Ich bitte euch einen geregelten Ablauf einzuplanen. Damit ihr mindestens eine Halbe Stunde in der Woche Zeit habt für das CMS.

Die Halbe Stunde wird folgendes besprochen:

  • Aktueller Stand
  • Bugs
  • Community (Forum) einbinden
  • Wünsche etc.

Da ich persönlich immer erst ab 6Uhr daheim bin. Ergibt es einen Zeitraum von 18:00 Uhr bis 22 Uhr.

Natürlich muss ich jetzt selbst nicht immer dabei sein ⚠️ .
Falls was Wichtiges besprochen worden ist, bitte hier irgendwie Vermerken, damit die anderne, die nicht dabei waren natürlich auch UptoDate sind.

Gruß Sysix

Call to a member function show() on null

Hi,
I just installed dynao and when I go to modules I got this

Notice: Undefined variable: form in /var/www/html/admin/pages/structure.module.php on line 247

Fatal error: Call to a member function show() on null in /var/www/html/admin/pages/structure.module.php on line 247

Bugfixe

Hier werden alle Bugfixe die uns bekannt sind reingeschrieben.
Damit man diese noch fixxen können :)

  • Strukture Block ---> Neuer Block --> Übernehmen --> Input´s sind leer
  • In Modulen kann man kein PHP verwenden
  • Struktur löschen, abfragen ob Unterartikel vorhanden sind
  • Metainfos kann man mehrmals anlagen (name)
  • Struktur/Medienkategorie Sortieren beim editieren. Andere zählen nicht mithoch
  • Kategorien einrücken beim Selectfeld in im Mediamanger Upload
  • User - Passwort ändern: Passwort wird nicht gehasht
  • Meta Trait funktioniert nicht im wenn vom Addon geladen wird
  • Medienmanger editieren ohne bildupload funktioniert nicht
  • Sortierung der Navigation ist falsch
  • Metainfo wird nicht gespeichert
  • Kategorie löschen, abfragen ob noch Dateien dadrin sind
  • form class - beim speichern wird der Paramater action mitgegeben
  • Nur Pageadmin darf Userrechte editieren
  • Medienmanager - addMediaField
  • Struktur Content speichern
  • Metainfos -> Übernehmen -> Name gekürzt
  • Subnavi bei Addons
  • Include von Secondnavi (addons.wiki.articles.php zb)
  • Fehler beim speichern und editieren von Modulen im Strukturbaum
  • Sprache unter Einstellungen speichern (obwohl en aktiviert, setzt der das selected bei de)
  • Weiterleitung nach Login - kein Content
  • Wenn ein Modul gelöscht wird, bleibt es dennoch auf den Seiten vorhanden (als pagearea), muss aus denen dann auch rausgeläscht werden
  • form ohne .form-horizontal, button nach ganz links
  • slots add Button zu groß
  • pageCache::clearAll() funzt net richtig
  • Metainfos speichert nur label & name
  • Versioncheck, immer falsche Version
  • PHP_HTML_VALUE wird trotzdem eval, durch pageArea->getEval
  • Struktur Sortierung fehlt - das "nested" geht nicht wirklich
  • Update wenn ein Slot schon vorhanden (config.json) - gilt zB. fürs manuell nachladen unter Einstellungen
  • Sortierung Seiten - die erfolgsnachricht wird nicht wieder auf 0 gesetzt, es erscheint ne 2 und 3 .. (gleiches gilt für die Sortierung der Module)
  • Slots werden auf jeder Seite angezeigt, auch wenn nur auf einer ausgewählt
  • Neuer User erstellen - kein password hash
  • Module offline wird angezeigt

autoload function für Klassen

Wir müssen uns Überlegen wie mir die autoload class für die anderen Klassen machen, da es bei uns paar Probleme gibt:

Standard:
Die Klasse hat genau den gleichen Namen wie der Dateinamen

Falls wir jede Datei im ordner classes includen kann es zu einen Fehler kommen, da es Kindklassen gibt.

Deswegen meien Überlegungen jede Datei erstmal öffnen schauen obs ne Kindklasse ist, wenn ja => In Warteschleife stecken und warten bis die Vaterklasse included wird.

Dann die Kindklasse includen
Dafür hab ich mal nen kleinen Script programmiert:

Öffnet die Klasse Datei mit den ersten 200 Ziffern
mit regex schauen ob Kindklasse ist oder nicht

$section = file_get_contents('admin/lib/classes/form/text.php', NULL, NULL, 0, 200);
echo htmlspecialchars($section).'<br />';
$section = preg_match('/class (\w+) extends (\w+)/', $section, $treffer);
/ #Anfang
class # Muss mit class  beginnen
 (\w+) #Alle Möglichen buchstaben, Zahlen und Zeichen
 extends  #Muss dann extends besitzen
(\w+)  #Alle Möglichen buchstaben, Zahlen und Zeichen
/ Ende

Als Result würde dann das kommen

Array (
    [0] => class formText extends formField
    [1] => formText
    [2] => formField
)

Speedtest - in_array() VS. $var == '' || $var == ''

Getestet:

if(in_array($action, ['add', 'edit'])
vs.
if($action == 'add' || $action == 'edit')

Ergebnis
inArray Dauer gefunden: 1.7210228443146
or Dauer gefunden: 0.57511186599731
inArray Dauer nicht gefunden: 1.7310140132904
or Dauer nicht gefunden: 0.59595799446106

Neue Webseite

Funktionen:

  • Mehrsprachigkeit
  • Download (Konfigurierbar)
  • News
  • Community Login (MyBB Bridge)
  • Addonverzeichnis
  • Modulverzeichnis
  • Templateverzeichnis
  • Über uns (Team)
  • Features
  • Erweitertes Wiki

Sonstiges:

  • Überarbeitung bzgl. SEO
  • Überarbeitung Webseite Design
  • Überarbeitung Forum Design

Icon font? oder svg?

Wollen wir weiterhin FontAwesome nutzen oder evtl auf svg icons umstellen?

Vorteile wären:

  • schnellere Ladezeiten, es werden nur die geladen, die gebraucht werden
  • schärfer / schöner (!)
  • mehr Optionen über CSS 3

Nachteile

  • IE 8 packt das nicht (bezweifle das der noch wichtig für uns ist)

dyn::checkVersion NEW

Hab endlich den Code richtig zum laufen bekommen:

static public function checkVersion($version1, $version2) {

        $version1 = str_replace(' ', '.', $version1);
        $version2 = str_replace(' ', '.', $version2);

        $version1 = explode('.', $version1);
        $version2 = explode('.', $version2);

        $depth = [
            lang::get('version_fail_version1'),
            lang::get('version_fail_version2'),
            lang::get('version_fail_version3'),
            'You have a Old Version',
        ];

        $versionArray = array_flip(['RC1', 'RC', 'RC2', 'RC3', 'b', 'beta', 'a', 'alpha', 'dev']);

        foreach($version1 as $i => $version) {

            if(isset($version2[$i])) {

                if(is_numeric($version) && is_numeric($version2[$i])) {

                    if($version2[$i] > $version) {
                        return $depth[$i];
                    }

                } else {

                    // 1.1.1 > 1.1 RC
                    if(is_int($version2[$i])) {
                        return $depth[4];
                    }

                    if(isset($versionArray[$version])) {
                        $version = $versionArray[$version];
                    }

                    if(isset($versionArray[$version2[$i]])) {
                        $version2[$i] = $versionArray[$version2[$i]];
                    }

                    //var_dump($version, $version2[$i]);

                    if($version2[$i] < $version) {
                        return $depth[3];
                    }

                }


            } else {
            // 1.1.1 > 1.1
               return !isset($versionArray[$version]);
            }

        }

        $count1 = count($version1);
        $count2 = count($version2);

        if($count1 < $count2) {

            $diff = $count2 - $count1;

            if($diff == 1) {

                return isset($versionArray[$version2[$count2-1]]);

            }


        }

        return true;

    }

Vergleiche "1.0.3" mit "1.0.2" :true
Vergleiche "1.0.1" mit "1.0" :true
Vergleiche "1.0.2 RC" mit "1.0.2 RC3" :true
Vergleiche "1.2" mit "1.1" :true
Vergleiche "1.0" mit "1.0 b" :true

Vergleiche "1.0.2" mit "1.0.3" :false
Vergleiche "1.0" mit "1.0.1" :false
Vergleiche "1.0.2 RC3" mit "1.0.2 RC" :false
Vergleiche "1.1" mit "1.2" :false
Vergleiche "1.0 b" mit "1.0" :false

Vielleicht fällt dir noch nen komplizierten Fall ein?
Noch ein bisschen ausfeilen und ihc würd gern die Methode so übernehmen.
Deine Meinung?

Sicherheit

hab folgendes von nem Benutzer bekommen:

Also:

http://demo.dynao.de/admin/index.php?page=dashboard
POST Exploit
Login "Bypass".
Konnte nur Emailabfrage umgehen, PW muss trz. gecracked werden.
Einfach [String] durch die Strings ersetzen.

Post:
email=[String]&password=[String]&login=

x" or "x"="x
" or "x"="x
" or 0=0 #
" or "a"="a
sqlinject" or "a"="a

XSS Lücke: Cross Site Scripting

"><script>alert(/XSS/);</script> "><script>alert(1);</script> "><script>alert('XSS');</script> "><script>alert("XSS");</script> "><script>alert(document.cookie);</script>

usw.

Benchmark passwordhash with salt

<?php
function generateSalt($length) {

    $str = '';
    for($i = 0; $i < $length; $i++) {
            $str .= chr(rand(33, 255));
    }

    return $str;

}

$time = microtime(true);

for($i = 1; $i <= 100000; $i++) {
    $salt = generateSalt(6);
    hash('sha256', $salt.'test'.$i).'<br />';
}
$end = microtime(true);
$ziel = $end-$time;
echo 'Resultat '.$ziel;

?>

Resultat 1.1267569065094
sha256 würd ic hsagen reicht und bei 100.000 durchläufn ist die Zeit auch nicht schlecht :). Mann muss noch beachten dass die Funktion jedesmal erstellt werden muss und die DB Abfrage...
Aber 100.000 User werden bestimmt nicht gleichzeitig eine Seite öffnen (Außer DDOS :D)
Und der Salt wird ja nur bei einen neuen User erstellt ansonsten wird ja nur hash aufgerufen
Irgendwelche optimierungen noch? Was zeit bei dir das Ergebnis?

ToDo

  • 1 Struktur verwalten ("Inhalt" kann als Unterseite weg)
  • 2 Responsive fertig
  • 3 Subnavi Seitennamen ausgeben
  • 4 Panels um die ganze Tabellen im Backend
  • 5 Nach Update überprüfen
  • 6 Frontend Ausgabe
  • 7 Sprache
  • 8 Slots
  • 9 metainfos als extension einfügen
  • 10 Struktur-Page editieren
  • 11 autofocus hinzufügen
  • 12 Username/Passwort bei User darf nicht leer sein
  • 13 AddonConfig speichern/bearbeiten (wie die normale Config)
  • 14 addSecSubnavi
  • 15 autoload noch PSR-0 einbeziehen
  • 16 formMedialist
  • 17 addLinkField
  • 18 addLinklistField
  • 19 BG für Responsive
  • 20 addon's help site
  • 21 Userrechte
  • 22 Metainfos als secondnavi
  • 23 DYN_MEDIA, DYN_MEDIA_LIST, DYN_LINK, DYN_LINK_LIST
  • 24 media im metainfos
  • 25 Extensions einfügen
  • 26 Einstellungen
  • 27 Cache für einzelne Seiten
  • 28 AddonNavi CSS
  • 29 mehrere Unterseiten im Templates (wird pro datei definiert)
  • 30 Installation
  • 31 Dashboard (News auslesen)
  • 32 Navigation ausgeben (frontend)
  • 33 2 Module für Text und Überschrift mit der Installation mitliefern, damit man auch ohne Kenntnisse Content anlegen kann
  • 34 Addons -> Weitere Addons (auslesen)

Sonstiges:

  • templates/default/config.json Addons den Template vorraussetzen
  • templates/default/config.json Slots automatisch hinzufügen
  • templates/default/config.json Module (input, output) und Slots per Funktion hinzufügen
  • templates/default/config.json Module den Slots zuordnen

Bezeichnungen

Slots:
Ich fände (Modul-) Positionen passender, also auch getPosition (gerade wenn man bald mehrere Module auf einen Slot/eine Position setzen kann)

Templates (die man pro Template anlegen/auswählen kann):
Hier fände ich Ansicht (engl. View) besser, da man sonst mit Templates durcheinander kommen kann

Module:
würde ich so lassen

Navigationspkt Struktur:
Diesen in Inhalt (engl Content) umbenennen, da man hier auch Module verwaltet


Sonst noch was ändern ? Deine Vorschläge? Community fragen?

Namen für einzelne Sachen?

Hey hey,

wir sollten uns langsam überlegen einen Namen für unsere einzelnen Seiten zu nehmen.
Sprich wie heißt bei uns z.B: eine Seite, oder ein Bereich einer Seite.
Structure wär ja sinnlos weil es ja ein Artikel ist und keine Struktur.

Mein Vorschlag:

Komplette Seite: article
Bereich der Seite (von Modul zusammengesetzt): article_area

Mir ist das Wichtig, da die Artikelbereiche noch in der module Klasse sind, obwohl es ein andere Arbeitschritt (= andere Klasse) sein sollte.

ToDo

System:


Vorschläge einfach editieren und drunterschreiben!

Addon-Konfiguration

Hab mich nun etwas damit beschäftigt und nun kommt folgende Frage auf:
Wie wollen wir die "Config" Datei aufbauen?

Mit XML? JSON oder YAML?

Hier paar Denkansprünge:
http://www.markfalto.com/Blog/post/XML-vs-JSON-vs-Yaml-serialization.aspx
http://www.phpblogger.net/2007/07/15/der-vergleich-xml-json-yaml-und-co/

XML würde für mich klar gewinnen, wäre da der "Metadata Overhead" nicht, sprich zu viel Quellcode, der nicht gebraucht wird.

JSON ist fast genausoschnell wie XML, wenn nicht schneller (nach dem 2ten mal Laden, jedoch bräuchten wir ja nur die Config einmal laden und einbinden?)

Aber YAML hat eine kleine Datengröße. Macht das Sinn darauf zu achten?

Was hälst du davon :)?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.