Clansuite Community Forum

 
Willkommen Gast. Bitte einloggen oder registrieren.
Haben Sie Ihre Aktivierungs E-Mail übersehen?

Einloggen mit Benutzername, Passwort und Sitzungslänge
 
Seiten: [1]   Nach unten
  Drucken  
Autor Thema: Kleine Liste  (Gelesen 2301 mal)
0 Mitglieder und 1 Gast betrachten dieses Thema.
paulbr
Developer
*****
Offline Offline

Beiträge: 126


« am: Oktober 06, 2010, 03:30:10 »

Hallo Jens,

hier mal eine kleine Liste was mir aufgefallen ist:

functions.core.php
   function dirsize()
      # recursion
      $size += dirsize($direntry);   <=>   $size += self::dirsize($direntry);

   function array2object()
      $object->$name = arrayToObject($value);  ? ? soll das array2object sein?

cronjobs.core.php
   function runJob()
       logMessage()    nicht definiert

inputfilter.core.php
   function modify()
       case 'strip_tags':
          $string = striptags($string);   <=>  $string = strip_tags($string);

       case 'html_replace:numeric_entities':
           $string = preg_replace(....., $str);    <=>  $str nicht definiert

moduledecorador.core.php
   function __call($method, $args)
      return call_user_func_array($method, $arguments);     <=>  $args

router.core.php
   function processSegmentsRegExp(array $segments, array $requirements = null)
      unset($requirement[$name]);   <=>  $requirements

security.core.php
   function checkPassword()
      return check_salted_hash( $passwordhash, $databasehash, $salt );  <=>  self::
      $passwordhash, $databasehash, $salt <=> nicht definiert

session.core.php
   function session_write($id, $data)
      if(isset($request['mod']) == false and empty($this->request['mod']))   <=> ...isset($request[...

user.core.php
   function getUser($user_id = null)
      ->select($fields)   <=>  $fields nicht definiert

   function setRememberMeCookie($user_id, $passwordhash)
      setcookie('cs_cookie_password', $passwordhash, $cookie_lifetimee);  <=>  $cookie_lifetime

cache/file.cache.php
   function fetch($key)
      $expires = (int) fread($file, 10);   <=> $file nicht definiert

   function store($key)
       return (bool) file_put_contents($filepath, serialize($value), FILE_EX | FILE_APPEND);  <=> $value nicht definiert

cache/memcached.cache.php
   function __construct()
       if($config['cache']['memcached_serverpool']..  <=> $config nicht definiert

   function setServer($servers)
       $this->addserver($host, $port, $weigth);  <=> vars  nicht definiert

config/xml.config.php
   function writeArray(XMLWriter $xml, $array)
       foreach($data as $key => $value)   <=> $data nicht definiert

events/AuthenticationLogging.event.php
   function __construct($logger)
       $this->request = $request;   <=> $request nicht definiert

events/BlockIps.event.php
   function execute(Event $event)
       $request = getRequest();   <=> getRequest nicht definiert

files/upload.core.php
   function parseFiles()
       foreach ($files as $formId => $fileInfo)   <=> $files nicht definiert

       #$filecounter = count($fileInfo['name']);
       for ($i = 0; $i < $filecounter; $i++)        <=> $filecounter nicht definiert

      generell:  Clansuite_Upload_Exception   <=>  ist das definiert ?

filters/permissions.filter.php
      generell:  Clansuite_RBACL <=> nicht definiert

logger/file.logger.php
   function getErrorLogFilename()
      if($config['log']['rotation'] == true)   <=>  $config

logger/firebug.logger.php
   function writeLog($data)
      $firephp->fb($data['message'],....   <=> $firephp nicht definiert

renderer/csv.renderer.php
   function assign($data, $header = array())
      $this->headers = $headers;   <=>  $headers

viewhelper/blockcontainer.core.php
     class Clansuite_BlockContainer extends Clansuite_Layout
     definition in layout.core.php ist: Clansuite_View_Layout

viewhelper/form/formelement.core.php
   function function setOnclick($onklick)
     $this->onklick = $onclick;  <=> definiert ist protected $onclick;

   function function addDecorator($decorators)
     Clansuite_Formelement_Decorator_Interface  <=>  ist das definiert ?

viewhelper/form/form.core.php
   function function processForm()
      $form->errors();             <=> $form nicht definiert
      $form->success();

viewhelper/form/formelements/recaptcha.form.php
    /**
     * @var string The ReCaptcha API PublicKey. You got this key from the ReCaptcha signup page.
     */
    private $publicKey;

    /**
     * @var string The ReCaptcha API PrivateKey.
     */
    private $publicKey;

    2mal definiert
 
viewhelper/form/formelements/timetoken.form.php
   function render()
      return '<input type="hidden" name="'.generateToken().'" value="1" />'; <=> function nicht definiert


modulecontroller.php
   function loadForm()
      Wo sind den:
         - Clansuite_Module_Controller_Resolver
         - Clansuite_Action_Controller_Resolver
      definiert, ich finde die Klassen nirgens

Das wars mal wieder, wenn weiteres auffällt Poste ich es  L&#228;chelnd

gruss
paul

Gespeichert
Jens-A. Koch
Maintainer
*
Offline Offline

Beiträge: 574

One-Man Team


« Antworten #1 am: Oktober 06, 2010, 07:36:16 »

Besten Dank fürs genaue Hinschauen und die Zuarbeit - ich bin sehr dankbar dafür.
Die genannten Positionen bin ich durchgegangen und habe entsprechende Änderungen eingefügt. Hoffentlich hab ich nichts übersehn.

Einige Dinge auf der Liste sind definitv noch Todo, so beispielsweise das Formelement timetoken - dort die Funktion für die Erstellung eines Tokens oder auch "form.core.php" processForm() um eingehende Daten automatisch zu validieren.

Zu Clansuite_Module_Controller_Resolver: Die Resolver gibt es gar nicht mehr im System.
Die gesamte Funktionalität ist in Clansuite_Mapper aufgegangen.

Stichwort Exceptions: Statt Clansuite_Upload_Exception einfach Clansuite_Exception.
Gesonderte Exceptions zu definieren und dann zu werfen halte ich inzwischen für überflüssig.
Das ist zwar nicht ganz so sauber, aber ein allgemeines, zentralisiertes Exception-Handling ist einfacher, als die Klassenhierarchie unnötig zu erhöhen.

Die Geschichte mit dem Formelement_Decorator_Interface leuchtet mir nicht ein.
Kann gut sein, dass es vorher ein Interface gab, dass ich in eine abstrakte Klasse umgewandelt hab - ohne dieses instanceof aufzulösen.

Soviel erstmal, Jens
Gespeichert

Keine Supportanfragen per PN oder Mail. Fragen bitte nur im Forum stellen (Wie man Fragen richtig stellt).
paulbr
Developer
*****
Offline Offline

Beiträge: 126


« Antworten #2 am: Oktober 06, 2010, 10:07:29 »

Hallo

das nenne ich schnelle Arbeit, hab das doch grad erst gepostet gehabt  L&#228;chelnd

Was mir auffiel:
Zitat
viewhelper/form/formelement.core.php
   function setOnclick($onklick)
     $this->onklick = $onclick;  <=> definiert ist protected $onclick;

$this->onklick = $onclick   hast du übersehen muss $this->onclick lauten, da private $onclick definiert ist.

und

setOnclick($onklick) entweder $onclick oder halt
      $this->onclick = $onclick; nach = $onklick ändern.


was für eine geklicke, das verwirrt einen ja ganz schön  Zwinkernd

Zitat
Einige Dinge auf der Liste sind definitv noch Todo, ...

Sicherlich steht ja auch meistens dabei, aber wenn man trotzdem kleine fehlerchen gleich
ausbessert, bekommt man irgendwann später mal damit keine Probleme.
Zudem übersieht man diese sehr leicht, siehe router.core.php, welche ja nun wirklich oft
kleine Änderungen und ausbesserungen bekam, aber genanntes nicht aufgefallen ist.
Gut ob das Array nun zerstört wird oder nicht, davon geht die Welt nicht unter, aber viele
kleine steine bringen einem irgendwann auch zum stolpern.



gruss
paul

Gespeichert
Jens-A. Koch
Maintainer
*
Offline Offline

Beiträge: 574

One-Man Team


« Antworten #3 am: Oktober 06, 2010, 11:19:02 »

Das HTML Attribut nennt sich "onclick" - habs nochmal entsprechend geändert.

Sagen wir mal so, mit einer vernünftigen Testabdeckung könnte man viele von diesen Fehlern finden und gleichzeitig sicherstellen, dass die Funktionen auch wirklich laufen.
Besonders die undefinierten oder falsch benannten Variablen würden dadurch auffallen.
Ich werde mal nachlesen, wie man das bewerkstelligen könnte, ohne zuviel Arbeit in die Erstellung oder Pflege der Tests zu stecken.
Gespeichert

Keine Supportanfragen per PN oder Mail. Fragen bitte nur im Forum stellen (Wie man Fragen richtig stellt).
paulbr
Developer
*****
Offline Offline

Beiträge: 126


« Antworten #4 am: Oktober 07, 2010, 01:02:12 »


ist das nicht möglich mit code coverage zu checken?

Xdebug hat das doch glaub ich auch drinnen: xdebug_start_code_coverage()

Gespeichert
Jens-A. Koch
Maintainer
*
Offline Offline

Beiträge: 574

One-Man Team


« Antworten #5 am: Oktober 07, 2010, 01:47:01 »

Naja, die Code Coverage gibt ja an, wieviel vom Quellcode mit Tests abgedeckt ist.
Wenn man jetzt ne einfache if,elseif,else Kontrollstruktur nimmt, dann müsste man
wohl mindestens 3 Tests mit den entsprechenden Bedingungen schreiben, um in die jeweiligen Anweisungsbereiche zu kommen.
Um die Code Coverage ins Spiel zu bringen, müsste man diese vor dem Durchlaufen der 3 Tests anwerfen und loggen lassen. Nachdem alle Tests durchlaufen sind, kann man das Code Coverage Log auswerten und erhält dann 3/3, also 100% Testabdeckung.
Die Coverage Logs lassen sich auch mit Hudson grafisch darstellen. Da wird der Quellcode der von Tests erreicht wird grün eingefärbt und der Rest rot. So kann man zumindest erkennen, wenn bestimmte Teile des Quellcodes nicht erreicht werden, denn dann liegt entweder gar kein Test dafür vor - oder der/die Tests sind fehlerhaft oder der Programmcode ist fehlerhaft.

Das würde folgende Ergänzungen bedeuten:
1) Prüfen, ob die Anfrage vom Test-Tool kommt, wenn ja, dann xdebug_code_coverage anwerfen und loggen lassen.
2) Test durchlaufen
3) Shutdown

Das kann man jetzt auf zwei Arten machen, entweder man schiebt den Aufruf von xdebug_code_coverage in den Bereich des Test-Tools und starten dann das System.
Oder man nimmt deinen Ansatz mit dem Staging und versetzt das System bei Aufruf durch ein Test-Tool in den Zustand bzw. das Environment "Testing" und führt dort den zusätzlichen Aufruf von xdebug_code_coverage aus.
Gespeichert

Keine Supportanfragen per PN oder Mail. Fragen bitte nur im Forum stellen (Wie man Fragen richtig stellt).
paulbr
Developer
*****
Offline Offline

Beiträge: 126


« Antworten #6 am: Oktober 11, 2010, 03:00:03 »

Mir sind da mal wieder ein paar kleinigkeiten ins Auge gefallen  Smiley

Ich habe betreffende Dateien geändert (siehe Anhang)
Beschreibung der Fehler liegt bei.

gruss
paul
Gespeichert
Jens-A. Koch
Maintainer
*
Offline Offline

Beiträge: 574

One-Man Team


« Antworten #7 am: Oktober 11, 2010, 06:47:39 »

Danke für die Berichtigungen.
In der categories.admin.php war die Funktion flatten_array() drin. Ich hab sie dort ganz rausgenommen. Dafür steht Clansuite_Functions::flatten_array() zur Verfügung.

Ich habe Simpletest geupdated. Die angesprochene CodeCoverage mittels XDebug ist in der neuen Version gleich mit dabei. Jetzt gilt es die Testumgebung nochmals anzupassen und dann einige Tests einzufügen.
Gespeichert

Keine Supportanfragen per PN oder Mail. Fragen bitte nur im Forum stellen (Wie man Fragen richtig stellt).
paulbr
Developer
*****
Offline Offline

Beiträge: 126


« Antworten #8 am: Oktober 23, 2010, 11:56:32 »


Clansuite_Doctrine
Erhält ja das array $config['database'], zum Connecten.
In der initDoctrineCacheDriver() welche im Productionsmode zum tragen kommt,
wird er cache driver mittels if(isset($this->config['cache'])) geprüft.

In der $config ist er nicht vorhanden, da hier nur die Sektion Database abgelegt ist.

Wie ich gerade feststelle, fehlt die Sektion für den cache komplett in der clansuite.config.php
;----------------------------------------
; cache
;----------------------------------------
[cache]
adapter = 'apc'
caching = 0
cache_lifetime = 0
memcached_lifetime = 0
memcached_autocompression = 0

gruss
paul

Gespeichert
Jens-A. Koch
Maintainer
*
Offline Offline

Beiträge: 574

One-Man Team


« Antworten #9 am: Oktober 24, 2010, 02:33:12 »

Danke dafür. Habe $config['database'] in $config geändert. Innerhalb von "Clansuite_Doctrine" steht damit wieder das ganze Array zur Verfügung. Wichtig sind ja nur die Sektionen [database] und [cache].

Cache Sektion habe ich in die Config eingefügt - die Settings sind driver, enabled, lifetime.
Für Smarty gibts nun eine eigene Sektion mit den Settings cache und cache_lifetime.
Die Memcache-Settings lohnen sich erstmal nicht, da ich erst noch den Memcache-Driver überarbeiten muss.
Gespeichert

Keine Supportanfragen per PN oder Mail. Fragen bitte nur im Forum stellen (Wie man Fragen richtig stellt).
paulbr
Developer
*****
Offline Offline

Beiträge: 126


« Antworten #10 am: Oktober 27, 2010, 10:36:53 »

In der theme.core.php ist definiert:

    public function isBackendTheme()
    {
        return (bool) $this->theme_info['backendtheme'];
    }

    public function isFrontendTheme()
    {
        return (bool) $this->theme_info['backendtheme'] === true ? false : true;
    }

Das Frontendtheme ist ja gegeben durch die theme_info.xml, die liegt ja im Frontend.
Soll hier das Layoutfile auf vorhanden sein geprüft werden?

gruss
paul
Gespeichert
paulbr
Developer
*****
Offline Offline

Beiträge: 126


« Antworten #11 am: Oktober 27, 2010, 02:37:10 »

Die Clansuite verursacht einen Fehler:

Fatal error: require() [function.require]: Cannot redeclare class clansuite_widget in E:\SERVER\www\_Projekte\clansuite\core\viewhelper\smarty\function.load_module.php on line 70

gruss
paul
Gespeichert
Jens-A. Koch
Maintainer
*
Offline Offline

Beiträge: 574

One-Man Team


« Antworten #12 am: Oktober 27, 2010, 09:45:38 »

In der theme.core.php ist definiert:

    public function isBackendTheme()
    {
        return (bool) $this->theme_info['backendtheme'];
    }

    public function isFrontendTheme()
    {
        return (bool) $this->theme_info['backendtheme'] === true ? false : true;
    }

Das Frontendtheme ist ja gegeben durch die theme_info.xml, die liegt ja im Frontend.
Soll hier das Layoutfile auf vorhanden sein geprüft werden?
theme.core.php ist ein nur ein Wrapper zum Zugriff auf die theme_info.xml.
Bei den beiden Methoden geht es darum, anhand der theme_info.xml zu bestimmen (siehe <backendtheme>1</backendtheme>), ob es ein Frontend oder Backendtheme ist.
Das ist u.a. bei der Installation wichtig. Um die Layout zu ermitteln, gibt es <layout mainfile="index.tpl"/> in der theme_info.xml und die Methoden getLayout() und getLayoutFile().

Zitat
Fatal error: require() [function.require]: Cannot redeclare class clansuite_widget in E:\SERVER\www\_Projekte\clansuite\core\viewhelper\smarty\function.load_module.php on line 70
Komisch - bei mir hat er nichts gemeldet. Habe aber einen class_exists Check eingefügt.
Das sollte den Fehler beheben.
Gespeichert

Keine Supportanfragen per PN oder Mail. Fragen bitte nur im Forum stellen (Wie man Fragen richtig stellt).
paulbr
Developer
*****
Offline Offline

Beiträge: 126


« Antworten #13 am: Oktober 28, 2010, 05:54:34 »

Habe das mal ausprobiert, der Fehler trat nur bei einer neuen clansuite installation auf.

- Caches und cookies gelöscht.
- Die aktuelle aus dem svn mit svn-clean in einem neuen ordner gezogen, vhost und
   konfiguration angepasst und gestart.
   Fehler trat auf!

- Caches und cookies gelöscht.
- Das svn in einer bereits vorhandenen nur eingepflegt
   Fehler trat nicht auf!

Zitat
Habe aber einen class_exists Check eingefügt.
Ja jetzt ist geht es wieder in beiden variationen.

gruss
paul
Gespeichert
Seiten: [1]   Nach oben
  Drucken  
 
Gehe zu:  


Powered by SMF 1.1.16 | SMF © 2006-2009, Simple Machines

Google visited last this page Mai 08, 2012, 04:43:36