• Login
  • Register
  • Zoek
Everywhere
  • Everywhere
  • Articles
  • Pages
  • Forum
  • Filebase Entry
  • More Options

ICTscripters

Dé plek voor IT

Dé plek voor IT

Login

Geavanceerde opties
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Dé plek voor IT - ICTscripters
  2. Leden
  3. M.Beers

Forum

  • Beta-testers gezocht voor Crypto-oefenplatform

    Syntax 29 januari 2026 om 16:11
  • Na 15 jaar terug van weggeweest: iCriminals.nl is terug (BETA)!

    Syntax 19 januari 2026 om 09:34
  • Developer Gezocht

    Mikevdk 10 januari 2026 om 18:57
  • Op zoek naar de legends

    Syntax 5 januari 2026 om 13:50
  • [FREE] WeFact Hosting module

    Jeroen.G 13 oktober 2025 om 14:09
  • Help testers nodig voor android app Urgent

    urgentotservices 26 september 2025 om 10:21
  • Versio vervanger

    Jeroen.G 25 augustus 2025 om 15:56
  • Afspraken systeem met planbeperking

    Lijno 1 augustus 2025 om 23:04

Marktplaats

  • 350 Nieuwe Domeinnamen Januari 2026

    shiga 1 februari 2026 om 14:21
  • 321 Nieuwe Domeinnamen December 2025

    shiga 1 januari 2026 om 10:26
  • Meerdere mafia game template te koop

    Syntax 26 december 2025 om 00:07

Posts by M.Beers

  • Waar geven ze cursus php?

    • M.Beers
    • 31 juli 2015 om 13:28
    Citaat van peter070

    Motivatie zakt al weg bij het geen dat ik het niet uit mijn hoofd kan schrijven. En met de hoop dat ik ergens een cursus kan krijgen waarin ze mij de logica achter PHP leer en dat ik zo mijn eigen systemen kan bouwen.

    Hiervoor heb ik geen cursus of opleiding gevolgd, ik ben zoals vele denk ik begonnen met het schrijven van kleine scripts en heb deze vervolgens uitgebreid. 9/10 keer kan je iets googelen.

    Mocht je toch een cursus hiervoor gaan volgen houdt er rekening mee dat PHP echt mega aan het veranderen is. Dit moet na je cursus wel bij te houden zijn... want waarschijnlijk word er op 12 november een final release gedaan van PHP 7 en zullen veel hosts PHP 5.4 gaan uitfaseren.

  • Waar geven ze cursus php?

    • M.Beers
    • 31 juli 2015 om 02:13
    Citaat van peter070

    Ik ben al jaren bezig met php en ik vind dat het tijd is om het uit mijn hoofd te kunnen. Dat ik mijn eigen systemen kan bouwen en niet elke x van hier en daar wat aan mekaar knutsel. Verder wat mijn doel is om mezelf te ontwikelen in php aangezien ik jaren ermee bezig ben, wil ik het zelf kunnen schrijven.

    Wanneer je al jaren bezig bent met php, zal je jezelf moeten afvragen wat je motivatie is om hiervoor een cursus te volgen.

    Op mijn opleiding leer ik bijvoorbeeld ook Java, alleen buiten de theoretische kennis, is het aan jezelf om je hierin te ontwikkelen. Met programmeren ben je continue bezig met het oplossen van een probleem, dit kan van alles zijn natuurlijk en is heel specifiek aan jouw project.

    Ik vraag me af in hoeverre zo'n cursus jou gaat helpen, buiten het feit dat je een certificaat krijgt.

  • WordPress Framework Testen

    • M.Beers
    • 30 juli 2015 om 00:33

    Beste ICTscripters,

    Vaak moet ik voor klanten onderdelen toevoegen aan het admin paneel van WordPress. Ondanks WordPress hiervoor verschillende functies en hooks heeft is dit nog veel werk om te schrijven. Daarom heb ik hiervoor een framework geschreven die dit werk uit handen neemt. Hiervoor zoek ik alleen nog testers die met deze plugin willen experimenteren en willen zoeken naar bugs.

    Momenteel bevat het framework de volgende functies:

    - Snel aanmaken van Metaboxes
    - Snel aanmaken van Admin panels + Admin tabs
    - Snel aanmaken van de Customizer

    Hiervoor worden momenteel de volgende velden ondersteund (dit worden er veel en veel meer):

    - Text input
    - Textarea input
    - Checkbox input
    - Radio input
    - Select input
    - Genereren van submit en reset buttons.

    Zijn er mensen op ICTscripters die hier aan mee willen werken/experimenteren? Het gaat hier om een developer tool dat kan samenwerken met Themes, Child-themes en Plugins. Je moet dus een klein beetje ervaring hebben met het maken van WordPress thema's/plugin's. Dit zal geheel op vrijwilliger basis zijn en in ruil voor een life-time-licentie wanneer ik deze uiteindelijk ga verkopen mocht de interesse hiervoor erg groot worden.

  • WebBase

    • M.Beers
    • 18 juli 2015 om 14:59

    Zoals FangorN al opmaakt is dit onveilig geschreven en zitten er nog veel slordigheden in je code. Kortom nog veel te verbeteren.

    p.s. Dit is niet echt OOP, je maakt gebruik van classes etc. alleen hebben je classes niet zijn eigen verantwoordelijkheid. Neem bijvoorbeeld "Users" hier zit het inloggen in verwerkt maar ook het hashen van wachtwoorden. In dit geval zou je bijvoorbeeld een apparte "package" moeten maken voor het hashen van wachtwoorden.

  • cURL update naar 7.30+

    • M.Beers
    • 14 juli 2015 om 15:43

    Werkt het commando niet gewoon? :P

    Code
    yum update curl

    Edit op de website van de developer staat dat CentOS maar tot V7.29 gaat alleen ik kan het mis hebben... http://curl.haxx.se/download.html

  • Designer gezocht

    • M.Beers
    • 8 juli 2015 om 17:44

    Pokémon gerelateerde dingen op ICTScripters zijn niet toegestaan wegens plagiaat op Nintendo...

  • Script converten van PHP 5.6 naar PHP 5.5

    • M.Beers
    • 2 juli 2015 om 11:07

    Het is al opgelost...

    ...$arguments vervangen voor $arguments = fun_get_args() doet wonderen.

  • Script converten van PHP 5.6 naar PHP 5.5

    • M.Beers
    • 1 juli 2015 om 23:38

    Beste ITScripters,

    Een tijdje terug heb ik een class gevonden om verschillende objecten te stapelen als "layers". Echter wil ik deze nu toepassen in een project van mij alleen werkt dit niet voor PHP 5.5 door de ...$parameter beargumentatie.

    Zijn er mensen die hiermee kunnen helpen want call_user_func_array() werkt bijvoorbeeld niet bij Closures...

    PHP
    <?php
    class Stack
    {
        /**
         * Method to call on the decoracted class.
         *
         * @var string
         */
    
    
        protected $method;
    
    
        /**
         * Container.
         */
    
    
        protected $container;
    
    
        /**
         * Middleware layers.
         *
         * @var array
         */
    
    
        protected $layers = [];
    
    
        public function __construct(Container $container = null, $method = null)
        {
            $this->container = $container ?: new Container;
            $this->method = $method ?: 'handle';
        }
    
    
        public function addLayer($class, $inner = true)
        {
            return $inner ? array_unshift($this->layers, $class) : array_push($this->layers, $class);
        }
    
    
        public function addInnerLayer($class)
        {
            return $this->addLayer($class);
        }
    
    
        public function addOuterLayer($class)
        {
            return $this->addLayer($class, false);
        }
    
    
        protected function buildCoreClosure($object)
        {
            return function(...$arguments) use ($object)
            {
                $callable = $object instanceof Closure ? $object : [$object, $this->method];
    
    
                return $callable(...$arguments);
            };
        }
    
    
        protected function buildLayerClosure($layer, Closure $next)
        {
            return function(...$arguments) use ($layer, $next)
            {
                return $layer->execute(...array_merge($arguments, [$next]));
            };
        }
    
    
    
    
        public function peel($object, array $parameters = [])
        {
            $next = $this->buildCoreClosure($object);
    
    
            foreach($this->layers as $layer)
            {
                $layer = $this->container->get($layer);
    
    
                $next = $this->buildLayerClosure($layer, $next);
            }
    
    
            return $next(...$parameters);
        }
    }
    Toon Meer
  • Waar zit de fout?

    • M.Beers
    • 28 juni 2015 om 21:57

    Het limiet staat op regel 6...

    if ($data->bankleft > 0) {} else {}

    Kortom het staat gewoon in je database ... verder ben ik niet bekend met crime games maar je kan gewoon je mysql_query commenten met // en je bankleft gaat niet meer naar beneden in de database

  • Closure probleem

    • M.Beers
    • 16 juni 2015 om 14:27
    Citaat van FangorN

    Bij dit soort vraagstukken kan het handig zijn om (in het vervolg) de PHP-versie die je gebruikt te vermelden omdat bepaalde constructies simpelweg niet werken in/voor bepaalde versies.

    Zo had ik een tijd geleden het probleem dat ik geen statische methoden kon aanroepen waarbij de klassenaam variabel was. Dit bleek niet ondersteund te worden voor PHP 5.3.0. Ook daar was call_user_func() de oplossing.

    Of een PHP upgrade lol.

    Ik test mijn code in Travis CI dus in dit geval was dit niet van toepassing want ik test met PHP 5.4 tm 7 en HHVM

  • Ark: survival evolved

    • M.Beers
    • 15 juni 2015 om 16:40

    Veel laptops hebben een GPU met shared memory ...

    Dit zou de reden kunnen zijn waarom hij niet soepel draait omdat je GPU geheugen snoept van je andere componenten (processor en ram).

  • Closure probleem

    • M.Beers
    • 15 juni 2015 om 13:13

    Daar gaat het niet fout ... wanneer ik het volgende uitvoer:

    PHP
    <?php
    $html = new HTML();
    $html->tag('foo', [] 'hello');
    ?>

    Krijg ik terug: <foo>Hello</foo>
    Dat werkt dus... (is ook een string)

    Maar wanneer ik dit vervolgens uitvoer in een anonymous function werkt het niet meer en krijg ik die error hierboven...

    http://php.net/manual/en/functions.anonymous.php

    Daarom vind ik het vreemd en is het ook niet te herleiden

    Opgelost call_user_func_array() ertussen en het werkt :P

    Zo simpel en niet aan gedacht evengoed bedankt Ferhat

    Edit:

    PHP
    <?php 
       /**
         * Magic shortcut to the custom HTML macros.
         *
         * @param string $name
         * @param array   $arguments
         * @return string
         */
        public function __call($name, array $arguments) {
            if (!isset(self::$tags[$name])) {
                throw new BadMethodCallException(vsprintf("Call to undefined method %s::%s().", [__CLASS__, $name]));
            }
            
            return  call_user_func_array(self::$tags[$name], $arguments);
        }
    Toon Meer
  • Closure probleem

    • M.Beers
    • 15 juni 2015 om 00:32

    Hallo allen,

    Ik wil d.m.v. de __call() methode een shortcut schrijven voor mijn HTML helper alleen krijg ik de volgende fout:

    Object of class Closure could not be converted to string in ...

    Alleen ik kan niet plaatsen wat ik nu fout doe gezien ik te weinig met Closures werk en ik er na 2,5 uur nog steeds niet uitkom. Zover mijn kennis loopt zou hij dit moeten doen maar schijn bedriegt... p.s. ik weet dat ik in de __call() methoden nog argumenten moet verwerken etc.

    Alvast bedankt,

    Michael

    Code
    <?php  
       /**
         * Magic shortcut to the custom HTML macros.
         *
         * @param string $name
         * @param array   $arguments
         * @return string
         */
        public function __call($name, array $arguments) {
            if (!isset(static::$tags[$name])) {
                throw new BadMethodCallException(vsprintf("Call to undefined method %s::%s().", [__CLASS__, $name]));
            }
            
            // Returnt een closure
            return static::$tags[$name];
        }
    ?>
    Toon Meer
    PHP: Testbestand
    <?php
    $html = new HTML();
    
    
    // Registreer een nieuwe html tag
    HTML::registerTag('foo', function($html, $content = null, $attributes = []) {
        return $html->tag('foo', $attributes, $content);
    });
    
    
    var_dump(HTML::$tags, $html->foo());
    ?>
    Toon Meer
    PHP: Hele HTML Helper
    <?php
    
    
    namespace Sparky\Util;
    
    
    use Closure;
    use BadMethodCallException;
    
    
    /**
     * HTML Helper.
     *
     * @package Sparky
     * @author Sparky Dev Team
     * @copyright Copyright (c) 2015 - 2015, Michael Beers | Online Media en Design (http://michaelbeers.nl)
     * @license http://opensource.org/licenses/Apache-2.0 Apache 2.0
     * @link http://michaelbeers.nl
     * @sice Version 1.0.0
     * 
     * @TODO Add a shortcut to call tags?
     */
    class HTML {
    
    
        /**
         * Should we return XHTML?
         *
         * @var boolean
         */
        protected $xhtml;
    
    
        /**
         * Custom tags.
         *
         * @var array
         */
        public static $tags = [];
    
    
        /**
         * Constructor.
         *
         * @param boolean $xhtml
         */
        public function __construct($xhtml = false) {
            $this->xhtml = $xhtml;
        }
    
    
        /**
         * Magic shortcut to the custom HTML macros.
         *
         * @param string $name
         * @param array   $arguments
         * @return string
         */
        public function __call($name, array $arguments) {
            if (!isset(static::$tags[$name])) {
                throw new BadMethodCallException(vsprintf("Call to undefined method %s::%s().", [__CLASS__, $name]));
            }
            
            return static::$tags[$name];
        }
    
    
        /**
         * Registers a new HTML tag.
         *
         * @param string $name
         * @param \Closure $tag
         */
        public static function registerTag($name, Closure $tag) {
            static::$tags[$name] = $tag;
        }
    
    
        /**
         * Takes an array of attributes and turns it into a string.
         *
         * @param array $attributes
         * @return string
         */
        protected function attributes($attributes) {
            $attr = '';
    
    
            foreach ($attributes as $attribute => $value) {
                if (is_int($attribute)) {
                    $attribute = $value;
                }
    
    
                $attr .= ' ' . $attribute . '="' . $value . '"';
            }
    
    
            return $attr;
        }
    
    
        /**
         * Creates a HTML5 tag.
         *
         * @param string $name
         * @param array $attributes
         * @param string $content
         * @returnstring
         */
        public function tag($name, array $attributes = [], $content = null) {
            return '<' . $name . $this->attributes($attributes) . (($content === null) ? ($this->xhtml ? ' />' : '>') : '>' . $content . '</' . $name . '>');
        }
    
    
        /**
         * Helper method for building media tags.
         *
         * @param string $type
         * @param mixed $files
         * @param array $attributes
         */
        protected function buildMedia($type, $files, $attributes) {
            $sources = '';
    
    
            foreach ((array) $files as $file) {
                $sources .= $this->tag('source', ['src' => $file]);
            }
    
    
            return $this->tag($type, $attributes, $sources);
        }
    
    
        /**
         * Creates audio tag with support for multiple sources.
         *
         * @param mixed $files
         * @param array $attributes
         */
        public function audio($files, array $attributes = []) {
            return $this->buildMedia('audio', $files, $attributes);
        }
    
    
        /**
         * Creates video tag with support for multiple sources.
         *
         * @param mixed $files
         * @param array $attributes
         */
        public function video($files, array $attributes = []) {
            return $this->buildMedia('video', $files, $attributes);
        }
    
    
        /**
         * Helper method for building list tags.
         *
         * @param string $type
         * @param mixed $items
         * @param array $attributes
         */
        protected function buildList($type, $items, $attributes) {
            $list = '';
    
    
            foreach ($items as $item) {
                if (is_array($item)) {
                    $list .= $this->tag('li', [], $this->buildList($type, $item, []));
                } else {
                    $list .= $this->tag('li', [], $item);
                }
            }
    
    
            return $this->tag($type, $attributes, $list);
        }
    
    
        /**
         * Builds an un-ordered list.
         *
         * @param array $items
         * @param array $attributes
         * @return string
         */
        public function ul(array $items, array $attributes = []) {
            return $this->buildList('ul', $items, $attributes);
        }
    
    
        /**
         * Builds am ordered list.
         *
         * @param array $items
         * @param array $attributes
         * @return string
         */
        public function ol(array $items, array $attributes = []) {
            return $this->buildList('ol', $items, $attributes);
        }
    
    
    }
    Toon Meer
  • Peiling SCSS

    • M.Beers
    • 9 juni 2015 om 12:14

    Koala werkt ook wel alleen ik ben erg fan van een task builder wat naar mijn mening zoveel fijner werkt dan Koala.

    In combinatie met yeoman kan je in 4 commands een complete webapp developen die automatisch geupdate word:

    yo gulp-web-app
    gulp serve (synchronisatie browser voor wijzigingen)
    gulp build (wanneer je klaar bent met developen)

    Same met wat wijziginen en deze 4 commandos doen het volgende:
    - LESS omzetten naar CSS
    - Bundelen van CSS
    - Minimaliseren van CSS
    - Mediaqueries mergen
    - Prefixen van functionaliteiten binnen CSS tot x-aantal browser versies terug van de meest recente browser release.
    - Bundelen van Javascript
    - Minimaliseren van Javascript
    - CSS & Javascript injecten in HTML bestanden (<!-- inject:css --> in html bijv.)
    - HTML templates maken met behulp van een template builder
    - HTML minimaliseren en comments weghalen
    - Automatisch wijzigingen compilen en refreshen wanneer je gulp serve gebruikt

    Mocht ik een keer tijd hebben zal ik een korte tutorial hierover schrijven want het is super easy om aan te leren.

  • Peiling SCSS

    • M.Beers
    • 7 juni 2015 om 20:34
    Citaat van mitchellve

    wat heeft LESS met ruby te maken?ruby on rails is server side.
    en LESS is toch frontend.
    Of zie ik dit verkeerd? :)

    Om SASS te installeren moet je ook Ruby hebben ... of je moet een compiler tool hebben als Koala :) staat overigens ook gewoon op de SASS website.

    "Before you start using Sass you will need to install Ruby."

  • Peiling SCSS

    • M.Beers
    • 7 juni 2015 om 18:56

    Ik gebruik meestal LESS, de grootste reden hiervoor is omdat ik geen zin heb om Ruby te installeren :P . Dit doe ik uiteraard in combinatie Gulp en nog een aantal tools.

    Voor de mensen die Grunt gebruiken, check Gulp eens is zeker een aanrader geen gezeur met Parallizer plugins etc. om stream-based je tasks uit te voeren.

  • Oneplus One invite

    • M.Beers
    • 18 april 2015 om 00:46

    Tip: zet je invite niet zo neer als hierboven, er zijn verschillende bots die deze invites claimen zodat je er niet meer aan hebt

  • Login class pdo

    • M.Beers
    • 15 april 2015 om 14:04

    Bedenk dat elk object zijn eigen doel heeft! Simpel voorbeeld:

    User.php - Vaak het model dus is eigenlijk alleen maar een container voor alle data (bevat attributen + getters/setters)
    UserDao.php - Dit is het data object van de user (bevat alle database acties)
    AuthenticationService.php - Dit is het inloggen zelf, waar alle sessies en zooi worden aangemaakt.
    AuthenticationController.php - Dit is de pagina die je laat zien op het web met enkele acties

    Dit is een ongetest voorbeeld, heel snel geschreven:

    PHP
    <?php
    class User {
    	
    	private $id;
    	private $username;
    	private $password;
    	
    	public __construct($username, $password) {
    		$this->username = $username;
    		$this->password = $password;
    	}
    	
    	public function getUsername() {
    		return $this->username;
    	}
    	
    	public function setUsername($username) {
    		$this->username = $username;
    	}
    	
    	...
    	
    }
    
    
    class UserDao {
    	
    	public function getUserByUsername($username) {
    		// User object maken.
    		$user = new User();
    		
    		try {
    			$query = $db->prepare("SELECT * FROM `Users` WHERE `username`= ? LIMIT 1");
    			$query->bindParam(1, $username);
    			$query->execute();
    			
    			if($query->rowCount() == 0) {
    				return false;
    			}
    			
    			$result = $query->fetchObject();
    			
    			// Data naar user object plaatsen, kan volgensmij niet rechtstreekt uit de DB omdat het PHP is.
    			$user->setUsername($result->username);
    		} catch(\PDOException $e) {
    			
    		}
    		
    		return $user;
    	}
    	
    	...
    	
    }
    
    
    public AuthenticationService {
    	
    	public function loginUser($username, $password) {
    		$dao = new UserDao();
    		$user = $dao->getUserByUsername($username);
    		
    		if ($user->getPassword() === $password) {
    			return true;
    		} else {
    			return false;
    		}
    	}
    	
    	...
    	
    }
    
    
    public AuthenticationController {
    	
    	public function loginPage() {
    		$service = new AuthenticationService();
    		
    		if ($service->loginUser('piet', 'eenheellastigwachtwoord')) {
    			echo "Gebruiker is wel ingelogd";
    		} else {
    			echo "Gebruiker is niet ingelogd";
    		}
    	}
    	
    	...
    	
    }
    ?>
    Toon Meer

    Ik hoop dat dit je een beetje helpt, het zijn veel extra objecten maar ieder object heeft hierin zijn eigen rol die hij vervult.

  • Onderzoek: online supermarkt

    • M.Beers
    • 30 maart 2015 om 02:19

    Ingevuld succes met je onderzoek

  • Oneindige zoom

    • M.Beers
    • 18 maart 2015 om 22:39
    Citaat van L. Velthuis

    Weet iemand hoe dit gerealiseerd kan worden?

    Aan de bron code te zien zijn er slechts 14 afbeeldingen gebruikt die loopen ... en het werkt als volgt:

    1. Er wordt 1 afbeelding ingeladen (800x600 px)
    2. Die afbeelding zoomt continue in
    3. Op een bepaald zoom niveau is de grootte van het ingezoomde beeld gelijk aan de nieuwe afbeelding (weer 800x600 px) en wordt deze afbeelding als een soort Photoshop layer op de afbeelding geplaatst
    4. Dit herhaalt zich oneindig en worden mogelijk de afbeeldingen weer hersteld naar de originele grootte om de performance hoog te houden.

    Opzich heel grappig gemaakt alleen niet heel lastig, op het tekenen van de afbeeldingen na dan.

ICT Nieuws

  • Fijne feestdagen

    tcbhome 28 december 2025 om 13:55
  • Kritieke update voor Really Simple Security-plug-in

    K.Rens 16 november 2024 om 16:12
  • ING Nederland streeft naar ondersteuning van Google Pay tegen eind februari

    K.Rens 2 november 2024 om 16:09

Blogs

  • Functioneel ontwerp

    Dees 28 december 2014 om 12:38
  • Access Control List implementatie in PHP/MySQL - deel 1/2

    FangorN 28 december 2018 om 12:35
  • Access Control List implementatie in PHP/MySQL - deel 2/2

    FangorN 29 december 2018 om 12:37
  1. Marktplaats
  2. Design
  3. Voorwaarden
  4. Ons team
  5. Leden
  6. Geschiedenis
  7. Regels
  8. Links
  9. Privacy Policy
ICTscripters ©2005 - 2026 , goedkope hosting door DiMoWeb.com, BE0558.915.582
Sponsors: Beste kattenhotel provincie Antwerpen | Beste Zetes eid kaartlezer webshop
Style: Nexus by cls-design
Stylename
Nexus
Manufacturer
cls-design
Licence
Commercial styles
Help
Supportforum
Visit cls-design