Merge branch '2015.11-develop'
authorPhilipp Schüle <p.schuele@metaways.de>
Mon, 25 Jan 2016 08:09:15 +0000 (09:09 +0100)
committerPhilipp Schüle <p.schuele@metaways.de>
Mon, 25 Jan 2016 08:09:15 +0000 (09:09 +0100)
18 files changed:
README.md
tine20/Calendar/Config.php
tine20/Calendar/Preference.php
tine20/Calendar/js/Calendar.js
tine20/Calendar/js/MainScreenCenterPanel.js
tine20/Expressodriver/js/ExceptionHandler.js
tine20/Filemanager/js/ExceptionHandler.js
tine20/Setup/Controller.php
tine20/Setup/ExtCheck.php
tine20/Setup/js/EmailPanel.js
tine20/Tinebase/Config/KeyField.php
tine20/Tinebase/Config/KeyFieldRecord.php
tine20/Tinebase/EmailUser/Smtp/LdapSimpleMailSchema.php
tine20/Tinebase/EmailUser/Smtp/LdapSimpleMailSchema/README
tine20/Tinebase/Setup/DemoData/Abstract.php
tine20/Tinebase/js/LoginPanel.js
tine20/Tinebase/js/tineInit.js
tine20/config.inc.php.dist

index 3c50e5e..a7929b9 100644 (file)
--- a/README.md
+++ b/README.md
@@ -55,7 +55,7 @@ legal fraught from other parties.
 
 ## Contributors Guide
 To start developing with tine20 and GIT please visit
-* [Tine2.0 Contributors Guide](https://www.tine20.org/wiki/index.php/Developers/Getting_Started/Contributors_Guide)
+* [Tine2.0 Contributors Guide](https://wiki.tine20.org/Developers/Getting_Started/Contributors_Guide)
 
 ## Official Ressources
 * [Documentation Wiki](https://www.tine20.org/wiki/)
index 1d4f9d6..032da93 100644 (file)
@@ -346,7 +346,7 @@ class Calendar_Config extends Tinebase_Config_Abstract
             ),
             'default'               => array(
                 self::FEATURE_SPLIT_VIEW                        => true,
-                self::FEATURE_YEAR_VIEW                         => true,
+                self::FEATURE_YEAR_VIEW                         => false,
                 self::FEATURE_EXTENDED_EVENT_CONTEXT_ACTIONS    => true,
                 self::FEATURE_COLOR_BY    => true,
             ),
index 69ac9b1..8f995ee 100644 (file)
@@ -81,8 +81,13 @@ class Calendar_Preference extends Tinebase_Preference_Abstract
      * timeIncrement
      */
     const DEFAULT_TIMEINCREMENT = 'timeIncrement';
+    
+    /**
+     * firstdayofweek
+     */
+    const FIRSTDAYOFWEEK = 'firstdayofweek';
 
-        /**
+    /**
      * @var string application
      */
     protected $_application = 'Calendar';
@@ -109,7 +114,8 @@ class Calendar_Preference extends Tinebase_Preference_Abstract
             self::DEFAULTATTENDEE_STRATEGY,
             self::DEFAULT_TIMEINCREMENT,
             self::DEFAULTATTENDEE_STRATEGY,
-            self::DEFAULT_EVENTS_RRIVATE
+            self::DEFAULT_EVENTS_RRIVATE,
+            self::FIRSTDAYOFWEEK
         );
         
         if ($cropDays) {
@@ -180,7 +186,11 @@ class Calendar_Preference extends Tinebase_Preference_Abstract
             self::DEFAULT_EVENTS_RRIVATE => array(
                 'label'         => $translate->_('Default set Events to privat'),
                 'description'   => $translate->_('If enabled every created event is always privat.'),
-            )
+            ),
+            self::FIRSTDAYOFWEEK => array(
+                'label'         => $translate->_('First Day of Week'),
+                'description'   => $translate->_('On what day the week should be starting'),
+            ),
         );
         
         return $prefDescriptions;
@@ -368,6 +378,20 @@ class Calendar_Preference extends Tinebase_Preference_Abstract
                         <special>' . Tinebase_Preference_Abstract::YES_NO_OPTIONS . '</special>
                     </options>';
                 break;
+            case self::FIRSTDAYOFWEEK:
+                $preference->value = 1;
+                $preference->options    = '<?xml version="1.0" encoding="UTF-8"?>
+                    <options>
+                        <option>
+                            <label>Sunday</label>
+                            <value>0</value>
+                        </option>
+                        <option>
+                            <label>Monday</label>
+                            <value>1</value>
+                        </option>
+                    </options>';
+                break;
             default:
                 throw new Tinebase_Exception_NotFound('Default preference with name ' . $_preferenceName . ' not found.');
         }
index b7ec3e1..88782ee 100644 (file)
@@ -81,6 +81,10 @@ Tine.Calendar.Application = Ext.extend(Tine.Tinebase.Application, {
  */
 Tine.Calendar.MainScreen = function(config) {
     Ext.apply(this, config);
+
+    var prefs = this.app.getRegistry().get('preferences');
+    Ext.DatePicker.prototype.startDay = parseInt((prefs ? prefs.get('firstdayofweek') : 1), 10);
+
     Tine.Calendar.colorMgr = new Tine.Calendar.ColorManager({});
     
     Tine.Calendar.MainScreen.superclass.constructor.apply(this, arguments);
index 22cca7f..eeeae54 100644 (file)
@@ -1232,8 +1232,10 @@ Tine.Calendar.MainScreenCenterPanel = Ext.extend(Ext.Panel, {
 
         // Allow to change attendee if in split view
         var defaultAttendee = Tine.Calendar.Model.Event.getDefaultData().attendee;
-        if (record.data.attendee[0].user_id.account_id != defaultAttendee[0].user_id.account_id) {
-            record.data.attendee[0] = Tine.Calendar.Model.Event.getDefaultData().attendee[0];
+        if (Ext.isArray(defaultAttendee) && defaultAttendee.length === 1) {
+            if (record.data.attendee[0].user_id.account_id != defaultAttendee[0].user_id.account_id) {
+                record.data.attendee[0] = defaultAttendee[0];
+            }
         }
 
         record.set('dtstart', datetime);
index a2d879c..8f3ee98 100644 (file)
@@ -35,7 +35,7 @@ Tine.Expressodriver.handleRequestException = function(exception, request) {
                 icon: Ext.MessageBox.WARNING,
                 title: _('Service Unavailable'),
                 msg: String.format(app.i18n._('The Expressodriver is not configured correctly. Please refer to the {0}Tine 2.0 Admin FAQ{1} for configuration advice or contact your administrator.'),
-                    '<a href="http://www.tine20.org/wiki/index.php/Admin_FAQ#The_message_.22filesdir_config_value_not_set.22_appears_in_the_logfile_and_I_can.27t_open_the_Expressodriver" target="_blank">',
+                    '<a href="http://wiki.tine20.org/Admin_FAQ#The_message_.22filesdir_config_value_not_set.22_appears_in_the_logfile_and_I_can.27t_open_the_Expressodriver" target="_blank">',
                     '</a>')
             });
             break;
index 620d259..992f58c 100644 (file)
@@ -31,7 +31,7 @@ Tine.Filemanager.handleRequestException = function(exception, request) {
                 icon: Ext.MessageBox.WARNING,
                 title: _('Service Unavailable'),
                 msg: String.format(app.i18n._('The Filemanager is not configured correctly. Please refer to the {0}Tine 2.0 Admin FAQ{1} for configuration advice or contact your administrator.'),
-                    '<a href="http://www.tine20.org/wiki/index.php/Admin_FAQ#The_message_.22filesdir_config_value_not_set.22_appears_in_the_logfile_and_I_can.27t_open_the_Filemanager" target="_blank">',
+                    '<a href="http://wiki.tine20.org/Admin_FAQ#The_message_.22filesdir_config_value_not_set.22_appears_in_the_logfile_and_I_can.27t_open_the_Filemanager" target="_blank">',
                     '</a>')
             });
             break;
index ff94fb1..95a86f1 100644 (file)
@@ -70,7 +70,7 @@ class Setup_Controller
      *
      * @var string
      */
-    protected $_helperLink = ' <a href="http://www.tine20.org/wiki/index.php/Admins/Install_Howto" target="_blank">Check the Tine 2.0 wiki for support.</a>';
+    protected $_helperLink = ' <a href="http://wiki.tine20.org/Admins/Install_Howto" target="_blank">Check the Tine 2.0 wiki for support.</a>';
 
     /**
      * the singleton pattern
index c45affe..9136ab5 100644 (file)
@@ -570,7 +570,7 @@ class Setup_ExtCheck
      */
     public function getData()
     {
-        $helperLink = ' <a href="http://www.tine20.org/wiki/index.php/Admins/Install_Howto" target="_blank">Check the Tine 2.0 wiki for support.</a>';
+        $helperLink = ' <a href="http://wiki.tine20.org/Admins/Install_Howto" target="_blank">Check the Tine 2.0 wiki for support.</a>';
         
         $result = array(
             'success'   => TRUE,
index 0180ec3..024d5f9 100644 (file)
@@ -157,7 +157,7 @@ Tine.Setup.EmailPanel = Ext.extend(Tine.Tinebase.widgets.form.ConfigPanel, {
         this.imapBackendCombo = new Ext.form.ComboBox(backendComboConfig);
         
         // smtp combo
-        backendComboConfig.store = [['standard', this.app.i18n._('Standard SMTP')], ['postfix', 'Postfix MySQL'], ['postfixcombined', 'Postfix SQL (combined schema)'], ['Ldapsmtpmail', 'Ldap (only mail attribute)'], ['ldapSmtp', 'Postfix Ldap (dbmail schema)'], ['ldapSmtpQmail', 'Postfix Ldap (qmail schema)'], ['ldap_univention', 'Univention']];
+        backendComboConfig.store = [['standard', this.app.i18n._('Standard SMTP')], ['postfix', 'Postfix MySQL'], ['postfixcombined', 'Postfix SQL (combined schema)'], ['Ldapsmtpmail', 'Ldap (only mail attribute)'], ['ldapSmtp', 'Postfix Ldap (dbmail schema)'], ['ldapSmtpQmail', 'Postfix Ldap (qmail schema)'], ['ldap_univention', 'Univention'], ['ldap_simplemail', 'SimpleMail or custom Ldap (BETA)']];
         backendComboConfig.name = 'smtp_backend';
         backendComboConfig.listeners = {
             scope: this,
index 901f0be..5617c4a 100644 (file)
@@ -9,7 +9,7 @@
 
 /**
  * this class represents a key field config
- * @see http://www.tine20.org/wiki/index.php/Developers/Concepts/KeyFields
+ * @see http://wiki.tine20.org/Developers/Concepts/KeyFields
  * 
  * @package     Tinebase
  * @subpackage  Config
index 98dddac..6c8e12b 100644 (file)
@@ -9,7 +9,7 @@
 
 /**
  * this class represents a key field record of a key field config
- * @see http://www.tine20.org/wiki/index.php/Developers/Concepts/KeyFields
+ * @see http://wiki.tine20.org/Developers/Concepts/KeyFields
  * 
  * @package     Tinebase
  * @subpackage  Config
index 2740f48..5ec275c 100644 (file)
@@ -291,13 +291,28 @@ class Tinebase_EmailUser_Smtp_LdapSimpleMailSchema extends Tinebase_EmailUser_Ld
                 continue;
             }
             
+            $keepEntryThreshold = 0;
+            foreach ($this->_propertyMapping as $property => $ldapName) {
+                if (substr($ldapName, -8) == ':boolean') {
+                    $ldapName = substr($ldapName, 0, -8);
+                }
+                if (!isset($dn[$ldapName])) {
+                    $dn[$ldapName] = null;
+                    $keepEntryThreshold++;
+                }
+                elseif ($dn[$ldapName] === null) {
+                    $keepEntryThreshold++;
+                }
+            }
+            
             // check for any values of worth to be saved (compared to minimal entry)
+            $dn = array_change_key_case($dn);
             $skeleton = array_change_key_case($this->_simpleMailConfig['skeleton']);
-            $skeleton['dn'] = true;
             $skeleton = array_merge($skeleton, Zend_Ldap_Dn::fromString($this->_simpleMailConfig['storage_rdn'])->getRdn() );
+            $skeleton['dn'] = true; // Zend_Ldap_Dn always carries the DN
             
             try {
-                if (count(array_diff_key($dn, $skeleton)) > 1) {
+                if (count(array_diff_key($dn, $skeleton)) > $keepEntryThreshold) {
                     $this->_ldap->save(Zend_Ldap_Dn::fromString($dn['dn']), $dn);
                 }
                 else {
@@ -402,4 +417,4 @@ class Tinebase_EmailUser_Smtp_LdapSimpleMailSchema extends Tinebase_EmailUser_Ld
             
         }
     }
-}
\ No newline at end of file
+}
index e523cf5..a55d11d 100644 (file)
@@ -1,6 +1,6 @@
 
                                                                   Johannes Nohl
-                                                             Berlin, 2015-08-10
+                                                             Berlin, 2015-10-18
 
 
 ## Tine 2.0 simpleMail SMTP-Backend (LDAP) ##
@@ -8,17 +8,19 @@
 
 ABSTRACT
 
-The simpleMail backend for SMTP keeps up Tine 2.0 with one advanced LDAP
-capability of mail transfer agents like Postfix's, “special_result_attribute”.
-This parameter is used to link mail related settings outside of user's LDAP
-entry to its DN (e.g. link mail address to user's mailbox). 
+When storing additional mail attributes outside user's Distinguished Name (DN) 
+you can link to user's LDAP branch and mail transfer agents like Postfix will 
+follow the target DN provided as i.e. “special_result_attribute”. With Tine 2.0 
+those external mail config is readable and - as required - writable through the 
+simpleMail backend for SMTP. You may use the provided LDAP scheme or configure 
+all by yourself (e.g. how to link mail addresses to user's DN). 
 
 
 PURPOSE AND OVERVIEW
 
 Tine 2.0 can handle user specific smtp settings in LDAP directories; additional
-information for mail aliases, mail forwarding addresses and an option to
-“forward only” (no local delivery) can be managed within the Admin App.
+information for *mail aliases*, *mail forwarding addresses* and an option to
+*forward only* (no local delivery) can be managed within the Admin module.
 
 While already existing backends for SMTP were limited to information stored as
 attributes in user's LDAP-node (DN:uid), simpleMail can read attributes from
@@ -31,6 +33,10 @@ account settings in LDAP.
 Additionally the linked mail information is needed for Felamimail's “out of
 office” assistant which will respond only to known aliases. 
 
+LIMITATION: You need to store Tine 2.0's accounts and your mail settings in
+            the same LDAP (probably on different subtrees) - the backend uses
+            your already existing connection.
+
 
 CONFIGURATION
 
@@ -54,16 +60,16 @@ object:
           }
 
 To see current SMTP settings from cli: 
-#> php git/setup.php --getconfig – configkey=smtp
+#> php setup.php --getconfig -- configkey=smtp
 
 To set new SMTP config by cli: 
-#> php setup.php --setconfig  configkey=smtp configvalue='{[ JSON ]}'
+#> php setup.php --setconfig -- configkey=smtp configvalue='{[ JSON ]}'
 
 
 OPTIONS - All available options for JSON
 
 [madatory] base:
-Search base in ldap for mail information (default search in subtree) and
+Search base in LDAP for mail information (default search in subtree) and
 default branch to store new entries (see storage_base)
 
 
@@ -72,27 +78,30 @@ default branch to store new entries (see storage_base)
 
 
 [optional] skeleton: 
-Attributes used to search related DN and at the same time template for newly 
-created DN. The wildcard %s will be substituted by user's DN at search time. 
+Attributes used as search filter for user related DNs and at the same time a
+template for newly created DNs. You must not provide objectClass top which is
+added programmatically. The attribute holding the wildcard %s represents the 
+link to user's DN ("special_result_attribute"). 
 
   Default:  "skeleton":{ 
               "objectclass":["simplemail","mailrouting"],
               "mailUserDN":"%s" 
             },
 
-  Note: The wildcard %s will be filled at runtime (by inserting user's DN)
+  Note: The wildcard %s will be substituted at runtime (by inserting user's DN)
 
 
 [optional] readonly: 
-On saving changes request will be ignored silently. 
+On saving changes request will be ignored silently. Default is false. 
 
         
 [optional] storage_base: 
-Base in LDAP-tree for writing new entries, defaults to base (see above). 
+Base in LDAP-tree for writing new entries, defaults to base (see above). If 
+given and different to base new config-DNs will be stored beneath. 
 
 
 [optional] storage_rdn: 
-Template for newly created entries - relative DN (RDN). 
+Name giving attribute for newly created entries - relative DN (RDN). 
 
   Default:  "storage_rdn:":"cn=%u{tine20}", 
 
@@ -110,28 +119,31 @@ parameterized mapping table.
               "emailForwardOnly":"maildiscard:boolean" 
             },
 
-  Please note: You can define a property (attribute) as an singular option
-  (instead of a set of attributes) by adding :boolean to its LDAP equivalent.
+  Note: You can define a property (attribute) as on/off-option (instead of a 
+        set of attributes) by adding :boolean to its LDAP equivalent.
 
 
 EXAMPLES
 
-Below you may find three common but minimal configurations (only the specific
-part of json is shown) 
+Below you may find three common but minimal configurations (only the backend 
+specific part of json is shown) 
  
 
 1) Get information readonly from anywhere below a specific part of the
-LDAP-tree (default entries fit to LDAP scheme called “simpleMail”):
+LDAP-tree (default entries here match the LDAP scheme “simpleMail”):
 
            "simplemail":{ 
               "base":"ou=mail,ou=config,dc=example,dc=com",
-              "readonly":fals
+              "readonly":tru
             }
 
+  Hint: If you manage mail settings aside Tine 2.0 this is how you get your
+        aliases known to Felamimail. 
+
 2) Read entries from subtree and write them below specified place, provide the
-necessary information about your DN structure needed by proper search and safe
-actions. Be aware of the mailUserDN attribute which holds the link to user's
-DN:
+necessary information about your DN structure needed for proper searches and 
+for saving new. Be aware of the mailUserDN attribute which holds the link to 
+user's DN:
 
             "simplemail":{ 
               "base":"ou=mail,ou=config,dc=example,dc=com", 
@@ -141,6 +153,25 @@ DN:
               } 
             }
 
+3) Non-simpleMail-schema exemplified: Tine 2.0 serves the primary domain all 
+other mail options are set by a fantasy-admin-tool... 
+
+            "simplemail":{ 
+              "base":"ou=postfixAdmin,dc=example,dc=com", 
+              "scope":1,
+              "skeleton":{
+                "objectclass":["postfixAdmin"], 
+                "tine20userDN":"%s" 
+              },
+              "property_mapping":{ 
+                "emailAliases":"virtualMailAccount",
+                "emailForwards":"forwardMail",
+                "emailForwardOnly":"doNotDeliver" 
+              },
+              "storage_base":"ou=userSettings,ou=postfixAdmin,dc=example,dc=com",
+              "storage_rdn:":"cn=mailconfig-%u"
+            } 
+
 
 FURTHER READINGS
 
index eee786e..973b210 100644 (file)
@@ -74,7 +74,7 @@ abstract class Tinebase_Setup_DemoData_Abstract
     
     /**
      * the personas to create demodata for
-     * http://www.tine20.org/wiki/index.php/Personas
+     * http://wiki.tine20.org/Personas
      * will be resolved to array of accounts
      * 
      * @var array
index f32d3f7..adb9240 100644 (file)
@@ -234,7 +234,7 @@ Tine.Tinebase.LoginPanel = Ext.extend(Ext.Panel, {
                     html: '<p>' + String.format(_('If the state of your language is not satisfying, or if you miss a language, please consider becoming a {0} translator.'), Tine.title) + '</p>'
                 }, {
                     html: '<br/><ul>' +
-                        '<li><a target="_blank" href="http://www.tine20.org/wiki/index.php/Contributors/Howtos/Translations" border="0">' + String.format(_('{0} Translation Howto'), Tine.title) + '</a></li>' +
+                        '<li><a target="_blank" href="http://wiki.tine20.org/Contributors/Howtos/Translations" border="0">' + String.format(_('{0} Translation Howto'), Tine.title) + '</a></li>' +
                         '<li><a target="_blank" href="https://www.transifex.com/projects/p/tine20/" border="0">' + _('Detailed Language Statistics') + '</a></li>'
                     + '</ul>'
                 }]
index 2042d7a..6638291 100644 (file)
@@ -53,7 +53,7 @@ Tine.clientVersion.releaseTime      = 'none';
  */
 Tine.title = 'Tine 2.0';
 Tine.weburl = 'https://www.tine20.org/en/the-project/contribute.html';
-Tine.helpUrl = 'http://www.tine20.org/wiki/index.php/Main_Page';
+Tine.helpUrl = 'http://wiki.tine20.org/Main_Page';
 
 /**
  * quiet logging in release mode
index d087c1c..8482165 100644 (file)
 <?php
+// GLOBAL CONFIGURATION FILE
 // NOTE: You can either:
 //  - copy this file to config.inc.php and add change config values
 //  - create an empty config.inc.php, make it writeable to the webserver and edit config via the setup.php interface
 //  - make this directory temporary writeable to the webserver and edit config via the setup.php interface
 
-// minimal configuration
 return array(
-    // set 'count' equal zero to disable captcha, or set to number of invalid logins before request captcha.
-    'captcha' => array('count'=>0), 
-    'database' => array(
-        'host'          => 'ENTER DATABASE HOSTNAME',
-        'dbname'        => 'ENTER DATABASE NAME',
-        'username'      => 'ENTER DATABASE USERNAME',
-        'password'      => 'ENTER DATABASE PASSWORD',
-        'adapter'       => 'pdo_mysql',
-        'tableprefix'   => 'tine20_',
-    ),
-    'setupuser' => array(
-        'username'      => 'SETUP USERNAME',
-        'password'      => 'SETUP PASSWORD' 
-    ),
-
-    /* // optional cache (recommended)
-    'caching' => array (
-        'active' => true,
-        'path' => 'PATH TO CACHE (NEEDS TO BE WRITEABLE BY WEBSERVER)',
-        'lifetime' => 3600,
-    ),
+    /*************************************************************************
+     /*----------------------- DATABASE  -----------------------------------*/
+    /************************************************************************/
+
+    //CONECTIVITY WITH DOMAIN DATABASE
+    'database' =>
+        array (
+            'username' => '[USERNAME]',
+            'password' => '[PASSWORD]',
+            'host' => '[HOST]',
+            'dbname' => '[DBNAME]',
+            'port' => 0,
+            'adapter' => 'pdo_[VENDOR]',
+            'tableprefix' => 'tine20_',
+            'profiler' => false
+        ),
+    /*************************************************************************
+    /*------------------------- GENERAL CONFIGURATION-----------------------*/
+    /************************************************************************/
+
+    //MAINTENANCE MODE
+    // in maintenanceMode only users of the defaultAdminGroup can login and operate
+    'maintenanceMode'   => false,
+
+    //APPLICATION ADMINISTRATOR ACCOUNT (SETUP ACCESS)
+    'setupuser' =>
+        array (
+            'username' => '[USERNAME]',
+            'password' => '[PASSWORD]',
+        ),
+
+    //TEMPORARY FILES
+    'tmpdir' => '',
+
+    //TEMPORARY UPLOAD FILES
+    'filesdir' => '',
+
+    //SESSIONS
+    'session' =>
+        array (
+            'lifetime' => 86400,
+            'backend' => 'File',
+            'path' => ''
+        ),
+
+    //DATA CACHE
+    'caching' =>
+        array (
+            'customexpirable' => false,
+            'active' => true,
+            'backend' => 'File',
+            'lifetime' => 900,
+            'path' => '',
+
+            //REDIS
+            'redis' =>
+            array (
+                    'host' => 'localhost',
+                    'port' => 6379,
+                ),
+
+            //MEMCACHED
+            'memcached' =>
+                array (
+                    'host' => 'localhost',
+                    'port' => 11211,
+                ),
+        ),
+
+    /*************************************************************************
+    /*------------------------------ ADDRESSBOOK ----------------------------*/
+    /************************************************************************/
+
+    /* AVAILABILITY MAP
+     * 'mapPanel': used in several files (among them,
+     * "ContactEditDialog.js", enables support to availability
+     * contact map.
     */
+    'mapPanel' => 0,
+
+    /*************************************************************************
+    /*--------------------------- DEVELOPMENT ------------------------------*/
+    /************************************************************************/
+    //APPLICATION LOG RESOURCE
+    /* 'active': if resource is enabled(booleano);
+     * 'priority': captured event detail level. How high
+     *             the level, more details (and data) will be inserted as
+     *             content of log file. Levels are:
+     *
+     *               0=EMERGENCY
+     *               1=ALERT
+     *               2=CRITICAL
+     *               3=ERROR
+     *               4=WARN
+     *               5=NOTICE
+     *               6=INFO
+     *               7=DEBUG
+     *               8=TRACE
+     *
+     * 'filename': where log file is.*/
+
+    'logger' =>
+        array (
+            'active' => true,
+            'priority' => 7,
+            'filename' => '',
+        ),
 
-    /* // optional logger
-    'logger' => array (
-        'active' => true,
-        'filename' => 'LOG FILE (NEEDS TO BE WRITEABLE BY WEBSERVER)',
-        'priority' => '7',
-    ),
+    //PROFILER RESOURCE SUPPORT
+    'profiler' =>
+        array (
+            'xhprof' => false,
+            'queryProfiles' => false,
+            'queryProfilesDetails' => false
+        ),
+    /*************************************************************************
+    /*---------------------------- MESSAGES --------------------------------*/
+    /************************************************************************/
+
+    //MESSAGE QUEUE VIA REDIS
+    'actionqueue' =>
+        array (
+            'active' => false,
+            'backend' => 'Redis',
+            'host' => 'localhost',
+            'port' => 6379,
+        ),
+
+    /*************************************************************************
+    /*------------------------------ SECURITY ------------------------------*/
+    /************************************************************************/
+
+    //MAXIMUM NUMBER OF USEFUL LOGIN TRIALS BEFORE LOCKING USER
+    'maxLoginFailures' => 20,
+
+    //CAPTCHA (ANTI ROBOT TOOL FOR AUTHENTICATION SCREEN)
+    'captcha' =>
+        array (
+            'count' => 3,
+        ),
+
+    /* CORS REQUEST COMPATIBILITY
+     * 'allowedJsonOrigins': used into "Config.php" e "Json.php".
+     * Define URLs/IPs that allow exchange of JSON in out of HTTP
+     * headers requests for complaining CORS.
     */
-);
+    'allowedJsonOrigins' =>
+        array (
+            0 => '',
+            1 => '',
+        ),
 
+    /* SESSION IP VALIDATION
+     * 'sessionIpValidation': used into some scripts, is
+     * responsible for validating user session by IP (access
+     * constraint to a logon).
+    */
+    'sessionIpValidation' =>
+        array (
+            'active' => false,
+            'source' => 'ip',
+        ),
+
+    /* DIGITAL CERTIFICATE
+     * 'certificate': used to definition of digital certificate.
+    */
+    'certificate' =>
+        array (
+            'active' => false,
+            'useKeyEscrow' => false,
+            'masterCertificate' => '',
+        ),
+    'modssl' =>
+        array (
+            'username_callback' => '',
+            'casfile' => '',
+            'crlspath' => '',
+        ),
+
+    /*************************************************************************
+    /*-------------------------- VISUALIZATION -----------------------------*/
+    /************************************************************************/
+
+    // USED THEME CONFIGURATIONS
+    'theme' => array(
+                'load' => true,
+                'path' => '',
+                'useBlueAsBase' => true
+        ),
+);