- #6584: generates a new application from templates with script bin\tn.php
authorFlávio Gomes da Silva Lisboa <flavio.lisboa@serpro.gov.br>
Mon, 13 May 2013 14:41:44 +0000 (11:41 -0300)
committerPhilipp Schüle <p.schuele@metaways.de>
Wed, 5 Jun 2013 13:58:30 +0000 (15:58 +0200)
Change-Id: Ia49dbcf32ecb1aaf7e4f06fb3299b9f4f14463b5
Reviewed-on: https://gerrit.tine20.org/tine20/2050
Tested-by: jenkins user
Reviewed-by: Philipp Schüle <p.schuele@metaways.de>
Tested-by: Philipp Schüle <p.schuele@metaways.de>
38 files changed:
bin/tn.php [new file with mode: 0644]
tine20/Tool/Application/templates/Backend/ExampleRecord.php [new file with mode: 0644]
tine20/Tool/Application/templates/Config.php [new file with mode: 0644]
tine20/Tool/Application/templates/Controller.php [new file with mode: 0644]
tine20/Tool/Application/templates/Controller/ExampleRecord.php [new file with mode: 0644]
tine20/Tool/Application/templates/ExampleApplication.jsb2 [new file with mode: 0644]
tine20/Tool/Application/templates/Exception.php [new file with mode: 0644]
tine20/Tool/Application/templates/Frontend/Cli.php [new file with mode: 0644]
tine20/Tool/Application/templates/Frontend/Http.php [new file with mode: 0644]
tine20/Tool/Application/templates/Frontend/Json.php [new file with mode: 0644]
tine20/Tool/Application/templates/Model/ExampleRecord.php [new file with mode: 0644]
tine20/Tool/Application/templates/Model/ExampleRecordFilter.php [new file with mode: 0644]
tine20/Tool/Application/templates/Model/Status.php [new file with mode: 0644]
tine20/Tool/Application/templates/Preference.php [new file with mode: 0644]
tine20/Tool/Application/templates/Setup/Initialize.php [new file with mode: 0644]
tine20/Tool/Application/templates/Setup/setup.xml [new file with mode: 0644]
tine20/Tool/Application/templates/css/ExampleApplication.css [new file with mode: 0644]
tine20/Tool/Application/templates/js/ExampleRecordDetailsPanel.js [new file with mode: 0644]
tine20/Tool/Application/templates/js/ExampleRecordEditDialog.js [new file with mode: 0644]
tine20/Tool/Application/templates/js/ExampleRecordGridPanel.js [new file with mode: 0644]
tine20/Tool/Application/templates/translations/bg.po [new file with mode: 0644]
tine20/Tool/Application/templates/translations/ca.po [new file with mode: 0644]
tine20/Tool/Application/templates/translations/cs.po [new file with mode: 0644]
tine20/Tool/Application/templates/translations/de.po [new file with mode: 0644]
tine20/Tool/Application/templates/translations/en.po [new file with mode: 0644]
tine20/Tool/Application/templates/translations/es.po [new file with mode: 0644]
tine20/Tool/Application/templates/translations/fr.po [new file with mode: 0644]
tine20/Tool/Application/templates/translations/hu.po [new file with mode: 0644]
tine20/Tool/Application/templates/translations/it.po [new file with mode: 0644]
tine20/Tool/Application/templates/translations/ja.po [new file with mode: 0644]
tine20/Tool/Application/templates/translations/nb.po [new file with mode: 0644]
tine20/Tool/Application/templates/translations/pl.po [new file with mode: 0644]
tine20/Tool/Application/templates/translations/ru.po [new file with mode: 0644]
tine20/Tool/Application/templates/translations/template.pot [new file with mode: 0644]
tine20/Tool/Application/templates/translations/zh_CN.po [new file with mode: 0644]
tine20/Tool/Application/templates/translations/zh_TW.po [new file with mode: 0644]
tine20/Tool/CodeGenerator/Application.php [new file with mode: 0644]
tine20/Tool/CodeGenerator/Interface.php [new file with mode: 0644]

diff --git a/bin/tn.php b/bin/tn.php
new file mode 100644 (file)
index 0000000..b03c5c5
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Script for code generation
+ *
+ * @package     Tine_Tool
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Flávio Gomes da Silva Lisboa <flavio.lisboa@serpro.gov.br>
+ * @copyright   Copyright (c) 2013 Metaways Infosystems GmbH (http://www.metaways.de)
+ * @version     $Id$ 
+ */
+
+define('APPLICATION','Application');
+
+main();
+
+function main()
+{
+       prepareEnvironment();
+       
+       try {
+               $opts = new Zend_Console_Getopt(array(
+                               'create application|a=s'=>'create application option with required string parameter',
+                               'help'=>'help option with no required parameter'
+               )
+               );
+               $opts->parse();
+       } catch (Zend_Console_Getopt_Exception $e) {
+               echo $e->getUsageMessage();
+               exit;
+       }
+
+       if ($applicationName = $opts->getOption('a'))
+       {
+               create(APPLICATION, array($applicationName));
+               echo "Application $applicationName was created successfully into tine20 folder! \n";
+               exit;
+       }
+       echo $e->getUsageMessage();
+       exit;
+}
+
+/**
+ * Sets the include path and loads autoloader classes
+ */
+function prepareEnvironment()
+{
+       $paths = array(
+                       realpath(dirname(__FILE__) . '/../tine20'),
+                       realpath(dirname(__FILE__) . '/../tine20/library'),
+                       get_include_path()
+       );
+       set_include_path(implode(PATH_SEPARATOR, $paths));
+
+       require_once 'Zend/Loader/Autoloader.php';
+       $autoloader = Zend_Loader_Autoloader::getInstance();
+       $autoloader->setFallbackAutoloader(true);
+       Tinebase_Autoloader::initialize($autoloader);
+}
+
+/**
+ * Creates an instance of a class that knows how to build the requested structure
+ * @param string $builder
+ */
+function create($builder, array $args)
+{      
+       // last argument is path of Tine 2.0
+       $args[] = realpath(dirname(__FILE__) . '/../tine20');
+
+       $className = 'Tool_CodeGenerator_' . $builder;
+       $tcg = new $className();
+       $tcg->build($args);
+}
\ No newline at end of file
diff --git a/tine20/Tool/Application/templates/Backend/ExampleRecord.php b/tine20/Tool/Application/templates/Backend/ExampleRecord.php
new file mode 100644 (file)
index 0000000..1978667
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Tine 2.0
+ *
+ * @package     ExampleApplication
+ * @subpackage  Backend
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Philipp Schüle <p.schuele@metaways.de>
+ * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
+ */
+
+
+/**
+ * backend for ExampleRecords
+ *
+ * @package     ExampleApplication
+ * @subpackage  Backend
+ */
+class ExampleApplication_Backend_ExampleRecord extends Tinebase_Backend_Sql_Abstract
+{
+    /**
+     * Table name without prefix
+     *
+     * @var string
+     */
+    protected $_tableName = 'example_application_record';
+    
+    /**
+     * Model name
+     *
+     * @var string
+     */
+    protected $_modelName = 'ExampleApplication_Model_ExampleRecord';
+
+    /**
+     * if modlog is active, we add 'is_deleted = 0' to select object in _getSelect()
+     *
+     * @var boolean
+     */
+    protected $_modlogActive = TRUE;
+}
diff --git a/tine20/Tool/Application/templates/Config.php b/tine20/Tool/Application/templates/Config.php
new file mode 100644 (file)
index 0000000..e551617
--- /dev/null
@@ -0,0 +1,91 @@
+<?php
+/**
+ * @package     ExampleApplication
+ * @subpackage  Config
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Philipp Schüle <p.schuele@metaways.de>
+ * @copyright   Copyright (c) 2011 Metaways Infosystems GmbH (http://www.metaways.de)
+ */
+
+/**
+ * ExampleApplication config class
+ * 
+ * @package     ExampleApplication
+ * @subpackage  Config
+ */
+class ExampleApplication_Config extends Tinebase_Config_Abstract
+{
+    /**
+     * ExampleApplication Status
+     * 
+     * @var string
+     */
+    const EXAMPLE_STATUS = 'exampleStatus';
+    
+    /**
+     * (non-PHPdoc)
+     * @see tine20/Tinebase/Config/Definition::$_properties
+     */
+    protected static $_properties = array(
+        self::EXAMPLE_STATUS => array(
+                                   //_('Status Available')
+            'label'                 => 'Status Available',
+                                   //_('Possible status. Please note that additional status might impact other ExampleApplication systems on export or syncronisation.')
+            'description'           => 'Possible status. Please note that additional status might impact other ExampleApplication systems on export or syncronisation.',
+            'type'                  => 'keyFieldConfig',
+            'options'               => array('recordModel' => 'ExampleApplication_Model_Status'),
+            'clientRegistryInclude' => TRUE,
+            'default'               => 'IN-PROCESS'
+        ),
+    );
+    
+    /**
+     * (non-PHPdoc)
+     * @see tine20/Tinebase/Config/Abstract::$_appName
+     */
+    protected $_appName = 'ExampleApplication';
+    
+    /**
+     * holds the instance of the singleton
+     *
+     * @var Tinebase_Config
+     */
+    private static $_instance = NULL;
+    
+    /**
+     * the constructor
+     *
+     * don't use the constructor. use the singleton 
+     */    
+    private function __construct() {}
+    
+    /**
+     * the constructor
+     *
+     * don't use the constructor. use the singleton 
+     */    
+    private function __clone() {}
+    
+    /**
+     * Returns instance of Tinebase_Config
+     *
+     * @return Tinebase_Config
+     */
+    public static function getInstance() 
+    {
+        if (self::$_instance === NULL) {
+            self::$_instance = new self();
+        }
+        
+        return self::$_instance;
+    }
+    
+    /**
+     * (non-PHPdoc)
+     * @see tine20/Tinebase/Config/Abstract::getProperties()
+     */
+    public static function getProperties()
+    {
+        return self::$_properties;
+    }
+}
diff --git a/tine20/Tool/Application/templates/Controller.php b/tine20/Tool/Application/templates/Controller.php
new file mode 100644 (file)
index 0000000..63bf14b
--- /dev/null
@@ -0,0 +1,113 @@
+<?php
+/**
+ * Tine 2.0
+ * 
+ * @package     ExampleApplication
+ * @subpackage  Controller
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Cornelius Weiss <c.weiss@metaways.de>
+ * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
+ *
+ */
+
+/**
+ * ExampleApplication Controller (composite)
+ * 
+ * The ExampleApplication 2.0 Controller manages access (acl) to the different backends and supports
+ * a common interface to the servers/views
+ * 
+ * @package ExampleApplication
+ * @subpackage  Controller
+ */
+class ExampleApplication_Controller extends Tinebase_Controller_Event implements Tinebase_Container_Interface
+{
+    /**
+     * holds the default Model of this application
+     * @var string
+     */
+    protected static $_defaultModel = 'ExampleApplication_Model_ExampleRecord';
+    
+    /**
+     * the constructor
+     *
+     * don't use the constructor. use the singleton 
+     */
+    private function __construct() {
+        $this->_applicationName = 'ExampleApplication';
+    }
+    
+    /**
+     * don't clone. Use the singleton.
+     *
+     */
+    private function __clone() 
+    {
+    }
+    
+    /**
+     * holds self
+     * @var ExampleApplication_Controller
+     */
+    private static $_instance = NULL;
+    
+    /**
+     * singleton
+     *
+     * @return ExampleApplication_Controller
+     */
+    public static function getInstance() 
+    {
+        if (self::$_instance === NULL) {
+            self::$_instance = new ExampleApplication_Controller();
+        }
+        return self::$_instance;
+    }
+    
+    /**
+     * creates the initial folder for new accounts
+     *
+     * @param mixed[int|Tinebase_Model_User] $_account   the accountd object
+     * @return Tinebase_Record_RecordSet                            of subtype Tinebase_Model_Container
+     */
+    public function createPersonalFolder($_accountId)
+    {
+        $translation = Tinebase_Translation::getTranslation('ExampleApplication');
+        
+        $account = Tinebase_User::getInstance()->getUserById($_accountId);
+        
+        $newContainer = new Tinebase_Model_Container(array(
+            'name'              => sprintf($translation->_("%s's personal example records"), $account->accountFullName),
+            'type'              => Tinebase_Model_Container::TYPE_PERSONAL,
+            'owner_id'          => $_accountId,
+            'backend'           => 'Sql',
+            'application_id'    => Tinebase_Application::getInstance()->getApplicationByName('ExampleApplication')->getId(),
+            'model'             => static::$_defaultModel
+        ));
+        
+        $personalContainer = Tinebase_Container::getInstance()->addContainer($newContainer);
+        $container = new Tinebase_Record_RecordSet('Tinebase_Model_Container', array($personalContainer));
+        
+        return $container;
+    }
+
+    /**
+     * event handler function
+     * 
+     * all events get routed through this function
+     *
+     * @param Tinebase_Event_Abstract $_eventObject the eventObject
+     */
+    protected function _handleEvent(Tinebase_Event_Abstract $_eventObject)
+    {
+        if (Tinebase_Core::isLogLevel(Zend_Log::TRACE)) Tinebase_Core::getLogger()->trace(__METHOD__ . ' (' . __LINE__ . ') handle event of type ' . get_class($_eventObject));
+        
+        switch(get_class($_eventObject)) {
+            case 'Admin_Event_AddAccount':
+                $this->createPersonalFolder($_eventObject->account);
+                break;
+            case 'Admin_Event_DeleteAccount':
+                #$this->deletePersonalFolder($_eventObject->account);
+                break;
+        }
+    }
+}
diff --git a/tine20/Tool/Application/templates/Controller/ExampleRecord.php b/tine20/Tool/Application/templates/Controller/ExampleRecord.php
new file mode 100644 (file)
index 0000000..e94ddd3
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+/**
+ * ExampleRecord controller for ExampleApplication application
+ * 
+ * @package     ExampleApplication
+ * @subpackage  Controller
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Philipp Schüle <p.schuele@metaways.de>
+ * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
+ *
+ */
+
+/**
+ * ExampleRecord controller class for ExampleApplication application
+ * 
+ * @package     ExampleApplication
+ * @subpackage  Controller
+ */
+class ExampleApplication_Controller_ExampleRecord extends Tinebase_Controller_Record_Abstract
+{
+    /**
+     * the constructor
+     *
+     * don't use the constructor. use the singleton 
+     */
+    private function __construct() {
+        $this->_applicationName = 'ExampleApplication';
+        $this->_backend = new ExampleApplication_Backend_ExampleRecord();
+        $this->_modelName = 'ExampleApplication_Model_ExampleRecord';
+        $this->_purgeRecords = FALSE;
+        // activate this if you want to use containers
+        $this->_doContainerACLChecks = FALSE;
+        $this->_resolveCustomFields = TRUE;
+    }
+    
+    /**
+     * holds the instance of the singleton
+     *
+     * @var ExampleApplication_Controller_ExampleRecord
+     */
+    private static $_instance = NULL;
+    
+    /**
+     * the singleton pattern
+     *
+     * @return ExampleApplication_Controller_ExampleRecord
+     */
+    public static function getInstance() 
+    {
+        if (self::$_instance === NULL) {
+            self::$_instance = new ExampleApplication_Controller_ExampleRecord();
+        }
+        
+        return self::$_instance;
+    }        
+
+    /****************************** overwritten functions ************************/    
+    
+}
diff --git a/tine20/Tool/Application/templates/ExampleApplication.jsb2 b/tine20/Tool/Application/templates/ExampleApplication.jsb2
new file mode 100644 (file)
index 0000000..55583bf
--- /dev/null
@@ -0,0 +1,40 @@
+{
+  "projectName": "Tine 2.0 - ExampleApplication",
+  "deployDir": "ExampleApplication",
+  "licenseText": "Tine 2.0 - ExampleApplication \nCopyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)\nhttp://www.gnu.org/licenses/agpl.html AGPL Version 3",
+  "resources": [
+    
+  ],
+  "pkgs": [
+    {
+      "name": "ExampleApplication FAT Client",
+      "file": "js/ExampleApplication-FAT.js",
+      "isDebug": true,
+      "fileIncludes": [
+        {
+          "text": "ExampleRecordEditDialog.js",
+          "path": "js/"
+        },
+        {
+          "text": "ExampleRecordDetailsPanel.js",
+          "path": "js/"
+        },
+        {
+          "text": "ExampleRecordGridPanel.js",
+          "path": "js/"
+        }
+      ]
+    },
+    {
+      "name": "ExampleApplication FAT Client",
+      "file": "css/ExampleApplication-FAT.css",
+      "isDebug": true,
+      "fileIncludes": [
+        {
+          "text": "ExampleApplication.css",
+          "path": "css/"
+        }
+      ]
+    }
+  ]
+}
\ No newline at end of file
diff --git a/tine20/Tool/Application/templates/Exception.php b/tine20/Tool/Application/templates/Exception.php
new file mode 100644 (file)
index 0000000..881a206
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Tine 2.0
+ * 
+ * @package     ExampleApplication
+ * @subpackage  Exception
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
+ * @author      Philipp Schüle <p.schuele@metaways.de>
+ *
+ */
+
+/**
+ * ExampleApplication exception
+ * 
+ * @package     ExampleApplication
+ * @subpackage  Exception
+ */
+class ExampleApplication_Exception extends Exception
+{
+}
diff --git a/tine20/Tool/Application/templates/Frontend/Cli.php b/tine20/Tool/Application/templates/Frontend/Cli.php
new file mode 100644 (file)
index 0000000..16fc633
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+/**
+ * Tine 2.0
+ * @package     ExampleApplication
+ * @subpackage  Frontend
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Cornelius Weiss <c.weiss@metaways.de>
+ * @copyright   Copyright (c) 2009 Metaways Infosystems GmbH (http://www.metaways.de)
+ */
+
+/**
+ * cli server for timetracker
+ *
+ * This class handles cli requests for the timetracker
+ *
+ * @package     ExampleApplication
+ * @subpackage  Frontend
+ */
+class ExampleApplication_Frontend_Cli
+{
+    /**
+     * the internal name of the application
+     *
+     * @var string
+     */
+    protected $_applicationName = 'ExampleApplication';
+    
+    /**
+     * help array with function names and param descriptions
+     */
+    protected $_help = array(
+        /*
+        'functionName' => array(
+            'description'   => 'function description',
+            'params'        => array()
+            )
+        ),
+        */
+    );
+    
+    /**
+     * echos usage information
+     *
+     */
+    public function getHelp()
+    {
+        foreach ($this->_help as $functionHelp) {
+            echo $functionHelp['description']."\n";
+            echo "parameters:\n";
+            foreach ($functionHelp['params'] as $param => $description) {
+                echo "$param \t $description \n";
+            }
+        }
+    }
+}
diff --git a/tine20/Tool/Application/templates/Frontend/Http.php b/tine20/Tool/Application/templates/Frontend/Http.php
new file mode 100644 (file)
index 0000000..1822d6f
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Tine 2.0
+ *
+ * @package     ExampleApplication
+ * @subpackage  Frontend
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Philipp Schüle <p.schuele@metaways.de>
+ * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
+ */
+
+/**
+ * This class handles all Http requests for the ExampleApplication application
+ *
+ * @package     ExampleApplication
+ * @subpackage  Frontend
+ */
+class ExampleApplication_Frontend_Http extends Tinebase_Frontend_Http_Abstract
+{
+    protected $_applicationName = 'ExampleApplication';
+}
diff --git a/tine20/Tool/Application/templates/Frontend/Json.php b/tine20/Tool/Application/templates/Frontend/Json.php
new file mode 100644 (file)
index 0000000..bd06ede
--- /dev/null
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Tine 2.0
+ * @package     ExampleApplication
+ * @subpackage  Frontend
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Philipp Schüle <p.schuele@metaways.de>
+ * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
+ * 
+ */
+
+/**
+ *
+ * This class handles all Json requests for the ExampleApplication application
+ *
+ * @package     ExampleApplication
+ * @subpackage  Frontend
+ */
+class ExampleApplication_Frontend_Json extends Tinebase_Frontend_Json_Abstract
+{
+    /**
+     * the controller
+     *
+     * @var ExampleApplication_Controller_ExampleRecord
+     */
+    protected $_controller = NULL;
+    
+    /**
+     * the models handled by this frontend
+     * @var array
+     */
+    protected $_models = array('ExampleRecord');
+
+    /**
+     * the constructor
+     *
+     */
+    public function __construct()
+    {
+        $this->_applicationName = 'ExampleApplication';
+        $this->_controller = ExampleApplication_Controller_ExampleRecord::getInstance();
+    }
+    
+    /**
+     * Search for records matching given arguments
+     *
+     * @param  array $filter
+     * @param  array $paging
+     * @return array
+     */
+    public function searchExampleRecords($filter, $paging)
+    {
+        return $this->_search($filter, $paging, $this->_controller, 'ExampleApplication_Model_ExampleRecordFilter', TRUE);
+    }
+    
+    /**
+     * Return a single record
+     *
+     * @param   string $id
+     * @return  array record data
+     */
+    public function getExampleRecord($id)
+    {
+        return $this->_get($id, $this->_controller);
+    }
+
+    /**
+     * creates/updates a record
+     *
+     * @param  array $recordData
+     * @return array created/updated record
+     */
+    public function saveExampleRecord($recordData)
+    {
+        return $this->_save($recordData, $this->_controller, 'ExampleRecord');
+    }
+    
+    /**
+     * deletes existing records
+     *
+     * @param  array  $ids 
+     * @return string
+     */
+    public function deleteExampleRecords($ids)
+    {
+        return $this->_delete($ids, $this->_controller);
+    }    
+
+    /**
+     * Returns registry data
+     * 
+     * @return array
+     */
+    public function getRegistryData()
+    {
+        $defaultContainerArray = Tinebase_Container::getInstance()->getDefaultContainer('ExampleApplication_Model_ExampleRecord', NULL, 'defaultExampleRecordContainer')->toArray();
+        $defaultContainerArray['account_grants'] = Tinebase_Container::getInstance()->getGrantsOfAccount(Tinebase_Core::getUser(), $defaultContainerArray['id'])->toArray();#
+        return array(
+            'defaultExampleRecordContainer' => $defaultContainerArray
+        );
+    }
+}
diff --git a/tine20/Tool/Application/templates/Model/ExampleRecord.php b/tine20/Tool/Application/templates/Model/ExampleRecord.php
new file mode 100644 (file)
index 0000000..3c70d0c
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+/**
+ * class to hold ExampleRecord data
+ * 
+ * @package     ExampleApplication
+ * @subpackage  Model
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Philipp Schüle <p.schuele@metaways.de>
+ * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
+ * 
+ */
+
+/**
+ * class to hold ExampleRecord data
+ * 
+ * @package     ExampleApplication
+ * @subpackage  Model
+ */
+class ExampleApplication_Model_ExampleRecord extends Tinebase_Record_Abstract
+{
+    /**
+     * application the record belongs to
+     *
+     * @var string
+     */
+    protected $_application = 'ExampleApplication';
+    
+    /**
+     * array with meta information about the model (like models.js)
+     * @var array
+     */
+    protected static $_meta = array(
+        'idProperty'        => 'id',
+        'titleProperty'     => 'name',
+        'recordName'        => 'example record', // _('example record')
+        'recordsName'       => 'example records', // _('example records')
+        'containerProperty' => 'container_id',
+        'containerName'     => 'example record list', // _('example record list')
+        'containersName'    => 'example record lists', // _('example record lists')
+        'defaultFilter'     => 'query',
+        'hasRelations'      => true,
+        'hasCustomFields'   => true,
+        'hasNotes'          => true,
+        'hasTags'           => true,
+        'useModlog'         => true,
+    );
+    
+    /**
+     * fields for auto start
+     * @var array
+     */
+    protected static $_fields = array(
+        'id'     => array(
+            'validators' => array(Zend_Filter_Input::ALLOW_EMPTY => true),
+            'label' => NULL
+        ),
+        'name'   => array(
+            'validators' => array(Zend_Filter_Input::ALLOW_EMPTY => true),
+            'label' => 'Name',    // _('Name')
+            ),
+        'status' => array(
+            'validators' => array(Zend_Filter_Input::ALLOW_EMPTY => true),
+            'label' => 'Status',    // _('Status')
+            'type' => 'keyfield',
+            'name' => 'exampleStatus'
+            )
+        );
+}
diff --git a/tine20/Tool/Application/templates/Model/ExampleRecordFilter.php b/tine20/Tool/Application/templates/Model/ExampleRecordFilter.php
new file mode 100644 (file)
index 0000000..c1ef874
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Tine 2.0
+ * 
+ * @package     ExampleApplication
+ * @subpackage  Model
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Philipp Schüle <p.schuele@metaways.de>
+ * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
+ *
+ */
+
+/**
+ * ExampleRecord filter Class
+ * 
+ * @package     ExampleApplication
+ * @subpackage  Model
+ */
+class ExampleApplication_Model_ExampleRecordFilter extends Tinebase_Model_Filter_FilterGroup 
+{
+    /**
+     * @var string class name of this filter group
+     *      this is needed to overcome the static late binding
+     *      limitation in php < 5.3
+     */
+    protected $_className = 'ExampleApplication_Model_ExampleRecordFilter';
+    
+    /**
+     * @var string application of this filter group
+     */
+    protected $_applicationName = 'ExampleApplication';
+    
+    /**
+     * @var string name of model this filter group is designed for
+     */
+    protected $_modelName = 'ExampleApplication_Model_ExampleRecord';
+    
+    protected $_defaultFilter = 'query';
+    
+    /**
+     * @var array filter model fieldName => definition
+     */
+    protected $_filterModel = array(
+        'query'          => array('filter' => 'Tinebase_Model_Filter_Query', 'options' => array('fields' => array('name', /*'...'*/))),
+        'id'             => array('filter' => 'Tinebase_Model_Filter_Id'),
+        'status'         => array('filter' => 'Tinebase_Model_Filter_Text'),
+        'name'           => array('filter' => 'Tinebase_Model_Filter_Text'),
+    );
+}
diff --git a/tine20/Tool/Application/templates/Model/Status.php b/tine20/Tool/Application/templates/Model/Status.php
new file mode 100644 (file)
index 0000000..fd953fd
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Tine 2.0
+ * 
+ * @package     ExampleApplication
+ * @subpackage  Model
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Philipp Schüle <p.schuele@metaways.de>
+ * @copyright   Copyright (c) 2011 Metaways Infosystems GmbH (http://www.metaways.de)
+ *
+ */
+
+/**
+ * Status Record Class
+ * 
+ * @package     ExampleApplication
+ * @subpackage  Model
+ */
+class ExampleApplication_Model_Status extends Tinebase_Config_KeyFieldRecord
+{
+    /**
+     * application the record belongs to
+     *
+     * @var string
+     */
+    protected $_application = 'ExampleApplication';
+    
+    /**
+     * (non-PHPdoc)
+     * @see tine20/Tinebase/Record/Abstract::$_validators
+     */
+    protected $_validators = array(
+        // tine record fields
+        'id'                   => array('allowEmpty' => true,         ),
+        'created_by'           => array('allowEmpty' => true,         ),
+        'creation_time'        => array('allowEmpty' => true          ),
+        'last_modified_by'     => array('allowEmpty' => true          ),
+        'last_modified_time'   => array('allowEmpty' => true          ),
+        'is_deleted'           => array('allowEmpty' => true          ),
+        'deleted_time'         => array('allowEmpty' => true          ),
+        'deleted_by'           => array('allowEmpty' => true          ),
+        'seq'                  => array('allowEmpty' => true,  'Int'  ),
+    
+        // key field record specific
+        'value'                => array('allowEmpty' => false         ),
+        'icon'                 => array('allowEmpty' => true          ),
+        'system'               => array('allowEmpty' => true,  'Int'  ),
+        'is_open'              => array('allowEmpty' => true,  'Int'  ),
+    );
+}
diff --git a/tine20/Tool/Application/templates/Preference.php b/tine20/Tool/Application/templates/Preference.php
new file mode 100644 (file)
index 0000000..d235971
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Tine 2.0
+ * 
+ * @package     ExampleApplication
+ * @subpackage  Preference
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Alexander Stintzing <a.stintzing@metaways.de>
+ * @copyright   Copyright (c) 2012 Metaways Infosystems GmbH (http://www.metaways.de)
+ */
+
+
+/**
+ * backend for ExampleApplication preferences
+ *
+ * @package     ExampleApplication
+ * @subpackage  Preference
+ */
+class ExampleApplication_Preference extends Tinebase_Preference_Abstract
+{
+    /**************************** application preferences/settings *****************/
+    
+    /**
+     * default container for example record
+     */
+    const DEFAULT_EXAMPLERECORD_CONTAINER = 'defaultExampleRecordContainer';
+    
+    /**
+     * @var string application
+     */
+    protected $_application = 'ExampleApplication';
+        
+    /**************************** public functions *********************************/
+    
+    /**
+     * get all possible application prefs
+     *
+     * @return  array   all application prefs
+     */
+    public function getAllApplicationPreferences()
+    {
+        $allPrefs = array(
+            self::DEFAULT_EXAMPLERECORD_CONTAINER,
+        );
+            
+        return $allPrefs;
+    }
+    
+    /**
+     * get translated right descriptions
+     * 
+     * @return  array with translated descriptions for this applications preferences
+     */
+    public function getTranslatedPreferences()
+    {
+        $translate = Tinebase_Translation::getTranslation($this->_application);
+
+        $prefDescriptions = array(
+            self::DEFAULT_EXAMPLERECORD_CONTAINER  => array(
+                'label'         => $translate->_('Default Example Record Container'),
+                'description'   => $translate->_('The default container for new records'),
+            )
+        );
+        return $prefDescriptions;
+    }
+    
+    /**
+     * get preference defaults if no default is found in the database
+     *
+     * @param string $_preferenceName
+     * @param string|Tinebase_Model_User $_accountId
+     * @param string $_accountType
+     * @return Tinebase_Model_Preference
+     */
+    public function getApplicationPreferenceDefaults($_preferenceName, $_accountId = NULL, $_accountType = Tinebase_Acl_Rights::ACCOUNT_TYPE_USER)
+    {
+        $preference = $this->_getDefaultBasePreference($_preferenceName);
+        
+        switch($_preferenceName) {
+            case self::DEFAULT_EXAMPLERECORD_CONTAINER:
+                $this->_getDefaultContainerPreferenceDefaults($preference, $_accountId);
+                break;
+            default:
+                throw new Tinebase_Exception_NotFound('Default preference with name ' . $_preferenceName . ' not found.');
+        }
+        
+        return $preference;
+    }
+}
diff --git a/tine20/Tool/Application/templates/Setup/Initialize.php b/tine20/Tool/Application/templates/Setup/Initialize.php
new file mode 100644 (file)
index 0000000..3fa2bc8
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Tine 2.0
+ * 
+ * @package     ExampleApplication
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Jonas Fischer <j.fischer@metaways.de>
+ * @copyright   Copyright (c) 2008-2011 Metaways Infosystems GmbH (http://www.metaways.de)
+ *
+ */
+
+/**
+ * class for ExampleApplication initialization
+ * 
+ * @package     Setup
+ */
+class ExampleApplication_Setup_Initialize extends Setup_Initialize
+{
+    /**
+     * init key fields
+     */
+    protected function _initializeKeyFields()
+    {
+        // create status config
+        $cb = new Tinebase_Backend_Sql(array(
+            'modelName' => 'Tinebase_Model_Config', 
+            'tableName' => 'config',
+        ));
+        
+        $statusConfig = array(
+            'name'    => ExampleApplication_Config::EXAMPLE_STATUS,
+            'records' => array(
+                array('id' => 'COMPLETED',    'value' => 'Completed',   'is_open' => 0, 'icon' => 'images/oxygen/16x16/actions/ok.png',                   'system' => true), //_('Completed')
+                array('id' => 'CANCELLED',    'value' => 'Cancelled',   'is_open' => 0, 'icon' => 'images/oxygen/16x16/actions/dialog-cancel.png',        'system' => true), //_('Cancelled')
+                array('id' => 'IN-PROCESS',   'value' => 'In process',  'is_open' => 1, 'icon' => 'images/oxygen/16x16/actions/view-refresh.png',         'system' => true), //_('In process')
+            ),
+        );
+        
+        $cb->create(new Tinebase_Model_Config(array(
+            'application_id'    => Tinebase_Application::getInstance()->getApplicationByName('ExampleApplication')->getId(),
+            'name'              => ExampleApplication_Config::EXAMPLE_STATUS,
+            'value'             => json_encode($statusConfig),
+        )));
+    }    
+}
diff --git a/tine20/Tool/Application/templates/Setup/setup.xml b/tine20/Tool/Application/templates/Setup/setup.xml
new file mode 100644 (file)
index 0000000..d4e1e8a
--- /dev/null
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<application>
+    <name>ExampleApplication</name>
+    <!-- gettext('ExampleApplication') -->   
+    <version>0.1</version>
+    <order>60</order>
+    <status>disabled</status>
+    <tables>
+        <table>
+            <name>example_application_record</name>
+            <version>1</version>
+            <declaration>
+                <field>
+                    <name>id</name>
+                    <type>text</type>
+                    <length>40</length>
+                    <notnull>true</notnull>
+                </field>
+                <field>
+                    <name>container_id</name>
+                    <type>integer</type>
+                    <notnull>false</notnull>
+                </field>
+                <field>
+                    <name>name</name>
+                    <type>text</type>
+                    <length>255</length>
+                    <notnull>true</notnull>
+                </field>
+                <!-- keyfield 'status' -->
+                <field>
+                    <name>status</name>
+                    <type>text</type>
+                    <length>40</length>
+                    <default>IN-PROCESS</default>
+                    <notnull>true</notnull>
+                </field>
+                <!-- add more fields here -->
+                <!-- defaults for tine system -->
+                <field>
+                    <name>created_by</name>
+                    <type>text</type>
+                    <length>40</length>
+                </field>
+                <field>
+                    <name>creation_time</name>
+                    <type>datetime</type>
+                </field> 
+                <field>
+                    <name>last_modified_by</name>
+                    <type>text</type>
+                    <length>40</length>
+                </field>
+                <field>
+                    <name>last_modified_time</name>
+                    <type>datetime</type>
+                </field>
+                <field>
+                    <name>is_deleted</name>
+                    <type>boolean</type>
+                    <default>false</default>
+                </field>
+                <field>
+                    <name>deleted_by</name>
+                    <type>text</type>
+                    <length>40</length>
+                </field>
+                <field>
+                    <name>deleted_time</name>
+                    <type>datetime</type>
+                </field>
+                <field>
+                    <name>seq</name>
+                    <type>integer</type>
+                    <notnull>true</notnull>
+                    <default>0</default>
+                </field>
+                <index>
+                    <name>id</name>
+                    <primary>true</primary>
+                    <field>
+                        <name>id</name>
+                    </field>
+                </index>
+                <index>
+                    <name>container_id</name>
+                    <field>
+                        <name>container_id</name>
+                    </field>
+                </index>
+            </declaration>
+        </table>
+    </tables>
+</application>
diff --git a/tine20/Tool/Application/templates/css/ExampleApplication.css b/tine20/Tool/Application/templates/css/ExampleApplication.css
new file mode 100644 (file)
index 0000000..e6bbe6b
--- /dev/null
@@ -0,0 +1,19 @@
+/**
+ * Tine 2.0
+ * 
+ * @package     ExampleApplication
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Philipp Schüle <p.schuele@metaways.de>
+ * @copyright   Copyright (c) 2007-2011 Metaways Infosystems GmbH (http://www.metaways.de)
+ *
+ */
+.ExampleApplicationIconCls {
+    background-image:url(../../images/oxygen/16x16/actions/document-open-recent.png) !important;
+}
+.x-btn-medium .ExampleApplicationIconCls {
+    background-image:url(../../images/oxygen/22x22/actions/document-open-recent.png) !important;
+}
+.x-btn-large .ExampleApplicationIconCls {
+    background-image:url(../../images/oxygen/32x32/actions/document-open-recent.png) !important;
+}
\ No newline at end of file
diff --git a/tine20/Tool/Application/templates/js/ExampleRecordDetailsPanel.js b/tine20/Tool/Application/templates/js/ExampleRecordDetailsPanel.js
new file mode 100644 (file)
index 0000000..7e6dec1
--- /dev/null
@@ -0,0 +1,122 @@
+/* 
+ * Tine 2.0
+ * 
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Alexander Stintzing <a.stintzing@metaways.de>
+ * @copyright   Copyright (c) 2012 Metaways Infosystems GmbH (http://www.metaways.de)
+ */
+Ext.ns('Tine.ExampleApplication');
+
+/**
+ * @class     Tine.ExampleApplication.ExampleRecordDetailsPanel
+ * @namespace ExampleApplication
+ * @extends   Tine.widgets.grid.DetailsPanel
+ * @author    Alexander Stintzing <a.stintzing@metaways.de>
+ */
+
+Tine.ExampleApplication.ExampleRecordDetailsPanel = Ext.extend(Tine.widgets.grid.DetailsPanel, {
+    
+    app: null,
+    
+    /**
+     * @cfg {Number} defaultHeight
+     * default Heights
+     */
+    defaultHeight: 100,
+    
+    initComponent: function() {
+        this.summaryRecord = new Ext.data.Record({
+            count: 0
+        }, 0);
+        
+        Tine.ExampleApplication.ExampleRecordDetailsPanel.superclass.initComponent.call(this);
+    },
+    
+    /**
+     * default panel w.o. data
+     * 
+     * @return {Ext.ux.display.DisplayPanel}
+     */
+    getDefaultInfosPanel: function() {
+        return this.getMultiRecordsPanel();
+    },
+    
+    /**
+     * get panel for multi selection aggregates/information
+     * 
+     * @return {Ext.Panel}
+     */
+    getMultiRecordsPanel: function() {
+        if (! this.multiRecordsPanel) {
+            this.multiRecordsPanel = new Ext.ux.display.DisplayPanel(
+                this.wrapPanel([{
+                    xtype: 'ux.displayfield',
+                    name: 'count',
+                    fieldLabel: this.app.i18n._('Total Example Records')
+                }], 160)
+            );
+        }
+        return this.multiRecordsPanel;
+    },
+    
+    /**
+     * main example record details panel
+     * 
+     * @return {Ext.ux.display.DisplayPanel}
+     */
+    getSingleRecordPanel: function() {
+        if (! this.singleRecordPanel) {
+            this.singleRecordPanel = new Ext.ux.display.DisplayPanel(
+                this.wrapPanel([{
+                    xtype: 'ux.displayfield',
+                    name: 'name',
+                    fieldLabel: this.app.i18n._('Name')
+                }, {
+                    xtype: 'ux.displayfield',
+                    name: 'status',
+                    fieldLabel: this.app.i18n._('Status'),
+                    renderer: Tine.Tinebase.widgets.keyfield.Renderer.get('ExampleApplication', 'exampleStatus', 'text')
+                }], 80)
+            );
+        }
+        return this.singleRecordPanel;
+    },
+    
+    /**
+     * update example record details panel
+     * 
+     * @param {Tine.Tinebase.data.Record} record
+     * @param {Mixed} body
+     */
+    updateDetails: function(record, body) {
+        this.getSingleRecordPanel().loadRecord.defer(100, this.getSingleRecordPanel(), [record]);
+    },
+    
+    /**
+     * show default template
+     * 
+     * @param {Mixed} body
+     */
+    showDefault: function(body) {
+        this.showMulti(this.grid.getSelectionModel());
+    },
+    
+    /**
+     * show template for multiple rows
+     * 
+     * @param {Ext.grid.RowSelectionModel} sm
+     * @param {Mixed} body
+     */
+    showMulti: function(sm, body) {
+        if (sm.getCount() === 0) {
+            var count = this.grid.store.proxy.jsonReader.jsonData.totalcount;
+        } else {
+            var count = sm.getCount();
+        }
+        
+        this.summaryRecord.set('count', count);
+        
+        this.getMultiRecordsPanel().loadRecord.defer(100, this.getMultiRecordsPanel(), [this.summaryRecord]);
+    }
+});
diff --git a/tine20/Tool/Application/templates/js/ExampleRecordEditDialog.js b/tine20/Tool/Application/templates/js/ExampleRecordEditDialog.js
new file mode 100644 (file)
index 0000000..1df5834
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * Tine 2.0
+ * 
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Cornelius Weiss <c.weiss@metaways.de>
+ * @copyright   Copyright (c) 2007-2012 Metaways Infosystems GmbH (http://www.metaways.de)
+ */
+Ext.ns('Tine.ExampleApplication');
+
+/**
+ * @namespace   Tine.ExampleApplication
+ * @class       Tine.ExampleApplication.ExampleRecordEditDialog
+ * @extends     Tine.widgets.dialog.EditDialog
+ * 
+ * <p>ExampleRecord Compose Dialog</p>
+ * <p></p>
+ * 
+ *  @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Cornelius Weiss <c.weiss@metaways.de>
+ * @copyright   Copyright (c) 2007-2008 Metaways Infosystems GmbH (http://www.metaways.de)
+ * 
+ * @param       {Object} config
+ * @constructor
+ * Create a new Tine.ExampleApplication.ExampleRecordEditDialog
+ */
+Tine.ExampleApplication.ExampleRecordEditDialog = Ext.extend(Tine.widgets.dialog.EditDialog, {
+    
+    /**
+     * @private
+     */
+    appName: 'ExampleApplication',
+    modelName: 'ExampleRecord',
+    
+    windowHeight: 470,
+    windowWidth: 800,
+    
+    /**
+     * returns dialog
+     * 
+     * NOTE: when this method gets called, all initalisation is done.
+     * 
+     * @return {Object}
+     * @private
+     */
+    getFormItems: function() {
+        return {
+            xtype: 'tabpanel',
+            border: false,
+            plain:true,
+            activeTab: 0,
+            border: false,
+            items:[{
+                title: this.app.i18n._('ExampleRecord'),
+                autoScroll: true,
+                border: false,
+                frame: true,
+                layout: 'border',
+                items: [{
+                    region: 'center',
+                    xtype: 'columnform',
+                    labelAlign: 'top',
+                    formDefaults: {
+                        xtype:'textfield',
+                        anchor: '100%',
+                        labelSeparator: '',
+                        columnWidth: .333
+                    },
+                    items: [[{
+                        columnWidth: 1,
+                        fieldLabel: this.app.i18n._('Name'),
+                        name: 'name',
+                        allowBlank: false
+                        }], [new Tine.Tinebase.widgets.keyfield.ComboBox({
+                            app: 'ExampleApplication',
+                            keyFieldName: 'exampleStatus',
+                            fieldLabel: this.app.i18n._('Status'),
+                            name: 'status',
+                            columnWidth: 0.5
+                        })]
+                    ] 
+                }, {
+                    // activities and tags
+                    layout: 'accordion',
+                    animate: true,
+                    region: 'east',
+                    width: 210,
+                    split: true,
+                    collapsible: true,
+                    collapseMode: 'mini',
+                    header: false,
+                    margins: '0 5 0 5',
+                    border: true,
+                    items: [
+                    new Tine.widgets.activities.ActivitiesPanel({
+                        app: 'ExampleApplication',
+                        showAddNoteForm: false,
+                        border: false,
+                        bodyStyle: 'border:1px solid #B5B8C8;'
+                    }),
+                    new Tine.widgets.tags.TagPanel({
+                        app: 'ExampleApplication',
+                        border: false,
+                        bodyStyle: 'border:1px solid #B5B8C8;'
+                    })]
+                }]
+            }, new Tine.widgets.activities.ActivitiesTabPanel({
+                app: this.appName,
+                record_id: this.record.id,
+                record_model: this.appName + '_Model_' + this.recordClass.getMeta('modelName')
+            })]
+        };
+    }
+});
diff --git a/tine20/Tool/Application/templates/js/ExampleRecordGridPanel.js b/tine20/Tool/Application/templates/js/ExampleRecordGridPanel.js
new file mode 100644 (file)
index 0000000..3edf053
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Tine 2.0
+ * 
+ * @package     ExampleApplication
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Alexander Stintzing <a.stintzing@metaways.de>
+ * @copyright   Copyright (c) 2012 Metaways Infosystems GmbH (http://www.metaways.de)
+ *
+ */
+Ext.namespace('Tine.ExampleApplication');
+
+/**
+ * ExampleRecord grid panel
+ * 
+ * @namespace   Tine.ExampleApplication
+ * @class       Tine.ExampleApplication.ExampleRecordGridPanel
+ * @extends     Tine.widgets.grid.GridPanel
+ * 
+ * <p>ExampleRecord Grid Panel</p>
+ * <p><pre>
+ * </pre></p>
+ * 
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Alexander Stintzing <a.stintzing@metaways.de>
+ * 
+ * @param       {Object} config
+ * @constructor
+ * Create a new Tine.ExampleApplication.ExampleRecordGridPanel
+ */
+Tine.ExampleApplication.ExampleRecordGridPanel = Ext.extend(Tine.widgets.grid.GridPanel, {
+
+    initComponent: function() {
+        this.initDetailsPanel();
+        Tine.ExampleApplication.ExampleRecordGridPanel.superclass.initComponent.call(this);
+    },
+    
+    /**
+     * @private
+     */
+    initDetailsPanel: function() {
+        this.detailsPanel = new Tine.ExampleApplication.ExampleRecordDetailsPanel({
+            grid : this,
+            app: this.app
+        });
+    }
+});
diff --git a/tine20/Tool/Application/templates/translations/bg.po b/tine20/Tool/Application/templates/translations/bg.po
new file mode 100644 (file)
index 0000000..3a766e9
--- /dev/null
@@ -0,0 +1,110 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Tine 2.0 - ExampleApplication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2012-02-10 14:03+0000\n"
+"Last-Translator: Cornelius Weiss <c.weiss@metaways.de>\n"
+"Language-Team: Tine 2.0 Translators\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Launchpad-Export-Date: 2012-03-02 09:32+0000\n"
+"X-Generator: Launchpad (build 14886)\n"
+"X-Poedit-Country: \n"
+"X-Poedit-Language: Bulgarian\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Config.php:31
+msgid "Status Available"
+msgstr ""
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+
+#: Controller.php:74
+#, python-format
+msgid "%s's personal example records"
+msgstr ""
+
+#: js/ExampleApplication.js:24
+msgid "Example Application test"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:87
+msgid "ExampleRecord"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:104 js/ExampleRecordGridPanel.js:83
+msgid "Name"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:110 js/ExampleRecordGridPanel.js:89
+#: js/Model.js:71
+msgid "Status"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:96
+msgid "Title"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:102
+msgid "Budget"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:126
+msgid "Show closed"
+msgstr ""
+
+#: js/Model.js:31
+msgid "example record"
+msgid_plural "example records"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:35
+msgid "example record list"
+msgid_plural "example record lists"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:69
+msgid "Quick search"
+msgstr ""
+
+#: js/Model.js:79
+msgid "Last modified"
+msgstr ""
+
+#: js/Model.js:80
+msgid "Last modifier"
+msgstr ""
+
+#: js/Model.js:81
+msgid "Creation Time"
+msgstr ""
+
+#: js/Model.js:82
+msgid "Creator"
+msgstr ""
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr ""
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr ""
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr ""
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr ""
diff --git a/tine20/Tool/Application/templates/translations/ca.po b/tine20/Tool/Application/templates/translations/ca.po
new file mode 100644 (file)
index 0000000..7c60382
--- /dev/null
@@ -0,0 +1,110 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Tine 2.0 - ExampleApplication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2012-02-10 14:03+0000\n"
+"Last-Translator: Cornelius Weiss <c.weiss@metaways.de>\n"
+"Language-Team: Tine 2.0 Translators\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Launchpad-Export-Date: 2012-03-02 09:32+0000\n"
+"X-Generator: Launchpad (build 14886)\n"
+"X-Poedit-Country: NOT SPECIFIED / ANY\n"
+"X-Poedit-Language: Catalan\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Config.php:31
+msgid "Status Available"
+msgstr ""
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+
+#: Controller.php:74
+#, python-format
+msgid "%s's personal example records"
+msgstr ""
+
+#: js/ExampleApplication.js:24
+msgid "Example Application test"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:87
+msgid "ExampleRecord"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:104 js/ExampleRecordGridPanel.js:83
+msgid "Name"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:110 js/ExampleRecordGridPanel.js:89
+#: js/Model.js:71
+msgid "Status"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:96
+msgid "Title"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:102
+msgid "Budget"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:126
+msgid "Show closed"
+msgstr ""
+
+#: js/Model.js:31
+msgid "example record"
+msgid_plural "example records"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:35
+msgid "example record list"
+msgid_plural "example record lists"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:69
+msgid "Quick search"
+msgstr ""
+
+#: js/Model.js:79
+msgid "Last modified"
+msgstr ""
+
+#: js/Model.js:80
+msgid "Last modifier"
+msgstr ""
+
+#: js/Model.js:81
+msgid "Creation Time"
+msgstr ""
+
+#: js/Model.js:82
+msgid "Creator"
+msgstr ""
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr ""
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr ""
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr ""
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr ""
diff --git a/tine20/Tool/Application/templates/translations/cs.po b/tine20/Tool/Application/templates/translations/cs.po
new file mode 100644 (file)
index 0000000..d36e4dc
--- /dev/null
@@ -0,0 +1,150 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Tine 2.0 - ExampleApplication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2012-03-02 12:56+0000\n"
+"Last-Translator: Michal Sladek <Unknown>\n"
+"Language-Team: Tine 2.0 Translators\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Launchpad-Export-Date: 2012-03-03 05:53+0000\n"
+"X-Generator: Launchpad (build 14886)\n"
+"X-Poedit-Language: Czech\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Config.php:31
+msgid "Status Available"
+msgstr ""
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+
+#: Controller.php:74
+#, python-format
+msgid "%s's personal example records"
+msgstr "Osobní ukázkové záznamy uživatele %s"
+
+#: js/ExampleApplication.js:24
+msgid "Example Application test"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:87
+msgid "ExampleRecord"
+msgstr "Ukázkový záznam"
+
+#: js/ExampleRecordEditDialog.js:104 js/ExampleRecordGridPanel.js:83
+msgid "Name"
+msgstr "Název"
+
+#: js/ExampleRecordEditDialog.js:110 js/ExampleRecordGridPanel.js:89
+#: js/Model.js:71
+msgid "Status"
+msgstr "Stav"
+
+#: js/ExampleRecordGridPanel.js:96
+msgid "Title"
+msgstr "Název"
+
+#: js/ExampleRecordGridPanel.js:102
+msgid "Budget"
+msgstr "Rozpočet"
+
+#: js/ExampleRecordGridPanel.js:126
+msgid "Show closed"
+msgstr "Zobrazit uzavřené"
+
+#: js/Model.js:31
+msgid "example record"
+msgid_plural "example records"
+msgstr[0] "ukázkový záznam"
+msgstr[1] "ukázkové záznamy"
+msgstr[2] "ukázkových záznamů"
+
+#: js/Model.js:35
+msgid "example record list"
+msgid_plural "example record lists"
+msgstr[0] "seznam ukázkových záznamů"
+msgstr[1] "seznamy ukázkových záznamů"
+msgstr[2] "seznamů ukázkových záznamů"
+
+#: js/Model.js:69
+msgid "Quick search"
+msgstr "Rychlé hledání"
+
+#: js/Model.js:79
+msgid "Last modified"
+msgstr ""
+
+#: js/Model.js:80
+msgid "Last modifier"
+msgstr ""
+
+#: js/Model.js:81
+msgid "Creation Time"
+msgstr ""
+
+#: js/Model.js:82
+msgid "Creator"
+msgstr ""
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr ""
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr ""
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr ""
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr "Ukázková aplikace"
+
+msgid "Example Application"
+msgstr "Ukázková aplikace"
+
+msgid "ExampleRecords"
+msgstr "Ukázkové záznamy"
+
+msgid "All ExampleRecords"
+msgstr "Všechny ukázkové záznamy"
+
+msgid "Unit"
+msgstr "Jednotka"
+
+msgid "Unit Price"
+msgstr "Jednotková cena"
+
+msgid "Timesheets are billable"
+msgstr "Pracovní výkazy lze účtovat"
+
+msgid "closed"
+msgstr "uzavřený"
+
+msgid "open"
+msgstr "otevřený"
+
+msgid "Billed"
+msgstr "Účtovaný"
+
+msgid "not yet billed"
+msgstr "zatím neúčtovaný"
+
+msgid "to bill"
+msgstr "k účtování"
+
+msgid "billed"
+msgstr "účtovaný"
+
+msgid "Description"
+msgstr "Popis"
diff --git a/tine20/Tool/Application/templates/translations/de.po b/tine20/Tool/Application/templates/translations/de.po
new file mode 100644 (file)
index 0000000..a3ce994
--- /dev/null
@@ -0,0 +1,158 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Tine 2.0 - ExampleApplication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2012-03-02 12:57+0000\n"
+"Last-Translator: ph_il <p.schuele@metaways.de>\n"
+"Language-Team: Tine 2.0 Translators\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Launchpad-Export-Date: 2012-03-03 05:53+0000\n"
+"X-Generator: Launchpad (build 14886)\n"
+"X-Poedit-Language: German\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Config.php:31
+msgid "Status Available"
+msgstr "Verfügbare Status"
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+"Mögliche Statuswerte. Bitte beachten Sie, dass Änderungen an dieser Stelle "
+"Auswirkungen auf Export und Synchronisation haben können."
+
+#: Controller.php:74
+#, python-format
+msgid "%s's personal example records"
+msgstr "%s persönliche Beispieleinträge"
+
+#: js/ExampleApplication.js:24
+msgid "Example Application test"
+msgstr "Beispiel Anwendung Test"
+
+#: js/ExampleRecordEditDialog.js:87
+msgid "ExampleRecord"
+msgstr "BeispielEintrag"
+
+#: js/ExampleRecordEditDialog.js:104 js/ExampleRecordGridPanel.js:83
+msgid "Name"
+msgstr "Name"
+
+#: js/ExampleRecordEditDialog.js:110 js/ExampleRecordGridPanel.js:89
+#: js/Model.js:71
+msgid "Status"
+msgstr "Status"
+
+#: js/ExampleRecordGridPanel.js:96
+msgid "Title"
+msgstr "Titel"
+
+#: js/ExampleRecordGridPanel.js:102
+msgid "Budget"
+msgstr "Budget"
+
+#: js/ExampleRecordGridPanel.js:126
+msgid "Show closed"
+msgstr "Zeige geschlossene"
+
+#: js/Model.js:31
+msgid "example record"
+msgid_plural "example records"
+msgstr[0] "Beispieleintrag"
+msgstr[1] "Beispieleinträge"
+
+#: js/Model.js:35
+msgid "example record list"
+msgid_plural "example record lists"
+msgstr[0] "Liste von Beispieleinträgen"
+msgstr[1] "Listen von Beispieleinträgen"
+
+#: js/Model.js:69
+msgid "Quick search"
+msgstr "Schnellsuche"
+
+#: js/Model.js:79
+msgid "Last modified"
+msgstr "Letzte Bearbeitung"
+
+#: js/Model.js:80
+msgid "Last modifier"
+msgstr "Letzter Bearbeiter"
+
+#: js/Model.js:81
+msgid "Creation Time"
+msgstr "Erstelldatum"
+
+#: js/Model.js:82
+msgid "Creator"
+msgstr "Ersteller"
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr "Abgeschlossen"
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr "Abgebrochen"
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr "In Bearbeitung"
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr "BeispielAnwendung"
+
+msgid "Example Application"
+msgstr "Beispielanwendung"
+
+msgid "ExampleRecords"
+msgstr "BeispielEinträge"
+
+msgid "All ExampleRecords"
+msgstr "Alle BeispielEinträge"
+
+msgid "Description"
+msgstr "Beschreibung"
+
+msgid "record list"
+msgid_plural "record lists"
+msgstr[0] "Eintrags Liste"
+msgstr[1] "Eintrags Listen"
+
+msgid "Number"
+msgstr "Zahl"
+
+msgid "Unit"
+msgstr "Einheit"
+
+msgid "Unit Price"
+msgstr "Preis pro Einheit"
+
+msgid "Timesheets are billable"
+msgstr "Stundenzettel sind abrechenbar"
+
+msgid "closed"
+msgstr "geschlossen"
+
+msgid "open"
+msgstr "offen"
+
+msgid "Billed"
+msgstr "Berechnet"
+
+msgid "not yet billed"
+msgstr "noch nicht berechnet"
+
+msgid "to bill"
+msgstr "zu berechnen"
+
+msgid "billed"
+msgstr "berechnet"
diff --git a/tine20/Tool/Application/templates/translations/en.po b/tine20/Tool/Application/templates/translations/en.po
new file mode 100644 (file)
index 0000000..55d2cec
--- /dev/null
@@ -0,0 +1,112 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Tine 2.0 - ExampleApplication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2012-02-10 14:18+0000\n"
+"Last-Translator: Cornelius Weiss <c.weiss@metaways.de>\n"
+"Language-Team: Tine 2.0 Translators\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Launchpad-Export-Date: 2012-03-02 09:32+0000\n"
+"X-Generator: Launchpad (build 14886)\n"
+"X-Poedit-Country: GB\n"
+"X-Poedit-Language: en\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Config.php:31
+msgid "Status Available"
+msgstr "Status Available"
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+
+#: Controller.php:74
+#, python-format
+msgid "%s's personal example records"
+msgstr "%s's personal example records"
+
+#: js/ExampleApplication.js:24
+msgid "Example Application test"
+msgstr "Example Application test"
+
+#: js/ExampleRecordEditDialog.js:87
+msgid "ExampleRecord"
+msgstr "ExampleRecord"
+
+#: js/ExampleRecordEditDialog.js:104 js/ExampleRecordGridPanel.js:83
+msgid "Name"
+msgstr "Name"
+
+#: js/ExampleRecordEditDialog.js:110 js/ExampleRecordGridPanel.js:89
+#: js/Model.js:71
+msgid "Status"
+msgstr "Status"
+
+#: js/ExampleRecordGridPanel.js:96
+msgid "Title"
+msgstr "Title"
+
+#: js/ExampleRecordGridPanel.js:102
+msgid "Budget"
+msgstr "Budget"
+
+#: js/ExampleRecordGridPanel.js:126
+msgid "Show closed"
+msgstr "Show closed"
+
+#: js/Model.js:31
+msgid "example record"
+msgid_plural "example records"
+msgstr[0] "example record"
+msgstr[1] "example records"
+
+#: js/Model.js:35
+msgid "example record list"
+msgid_plural "example record lists"
+msgstr[0] "example record list"
+msgstr[1] "example record lists"
+
+#: js/Model.js:69
+msgid "Quick search"
+msgstr "Quick search"
+
+#: js/Model.js:79
+msgid "Last modified"
+msgstr "Last modified"
+
+#: js/Model.js:80
+msgid "Last modifier"
+msgstr "Last modifier"
+
+#: js/Model.js:81
+msgid "Creation Time"
+msgstr "Creation Time"
+
+#: js/Model.js:82
+msgid "Creator"
+msgstr "Creator"
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr "Completed"
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr "Cancelled"
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr "In process"
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr "ExampleApplication"
diff --git a/tine20/Tool/Application/templates/translations/es.po b/tine20/Tool/Application/templates/translations/es.po
new file mode 100644 (file)
index 0000000..3624095
--- /dev/null
@@ -0,0 +1,124 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Tine 2.0 - ExampleApplication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2012-03-02 13:01+0000\n"
+"Last-Translator: Cornelius Weiss <c.weiss@metaways.de>\n"
+"Language-Team: Tine 2.0 Translators\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Launchpad-Export-Date: 2012-03-03 05:53+0000\n"
+"X-Generator: Launchpad (build 14886)\n"
+"X-Poedit-Country: NOT SPECIFIED / ANY\n"
+"X-Poedit-Language: Spanish\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Config.php:31
+msgid "Status Available"
+msgstr ""
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+
+#: Controller.php:74
+#, python-format
+msgid "%s's personal example records"
+msgstr ""
+
+#: js/ExampleApplication.js:24
+msgid "Example Application test"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:87
+msgid "ExampleRecord"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:104 js/ExampleRecordGridPanel.js:83
+msgid "Name"
+msgstr "Nombre"
+
+#: js/ExampleRecordEditDialog.js:110 js/ExampleRecordGridPanel.js:89
+#: js/Model.js:71
+msgid "Status"
+msgstr "Estado"
+
+#: js/ExampleRecordGridPanel.js:96
+msgid "Title"
+msgstr "Título"
+
+#: js/ExampleRecordGridPanel.js:102
+msgid "Budget"
+msgstr "Presupuesto"
+
+#: js/ExampleRecordGridPanel.js:126
+msgid "Show closed"
+msgstr "Función Cerrada"
+
+#: js/Model.js:31
+msgid "example record"
+msgid_plural "example records"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:35
+msgid "example record list"
+msgid_plural "example record lists"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:69
+msgid "Quick search"
+msgstr "Búsqueda Rápida"
+
+#: js/Model.js:79
+msgid "Last modified"
+msgstr ""
+
+#: js/Model.js:80
+msgid "Last modifier"
+msgstr ""
+
+#: js/Model.js:81
+msgid "Creation Time"
+msgstr ""
+
+#: js/Model.js:82
+msgid "Creator"
+msgstr ""
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr ""
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr ""
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr ""
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr "AplicaciónDeEjemplo"
+
+msgid "ExampleRecords"
+msgstr "RegistrosDeEjemplo"
+
+msgid "All ExampleRecords"
+msgstr "Todos los RegistrosDeEjemplo"
+
+msgid "Description"
+msgstr "Descripción"
+
+msgid "record list"
+msgid_plural "record lists"
+msgstr[0] "listado de registro"
+msgstr[1] "listado de registros"
diff --git a/tine20/Tool/Application/templates/translations/fr.po b/tine20/Tool/Application/templates/translations/fr.po
new file mode 100644 (file)
index 0000000..1d072dc
--- /dev/null
@@ -0,0 +1,110 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Tine 2.0 - ExampleApplication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2012-02-10 14:03+0000\n"
+"Last-Translator: Cornelius Weiss <c.weiss@metaways.de>\n"
+"Language-Team: Tine 2.0 Translators\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Launchpad-Export-Date: 2012-03-02 09:32+0000\n"
+"X-Generator: Launchpad (build 14886)\n"
+"X-Poedit-Country: \n"
+"X-Poedit-Language: French\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Config.php:31
+msgid "Status Available"
+msgstr ""
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+
+#: Controller.php:74
+#, python-format
+msgid "%s's personal example records"
+msgstr ""
+
+#: js/ExampleApplication.js:24
+msgid "Example Application test"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:87
+msgid "ExampleRecord"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:104 js/ExampleRecordGridPanel.js:83
+msgid "Name"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:110 js/ExampleRecordGridPanel.js:89
+#: js/Model.js:71
+msgid "Status"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:96
+msgid "Title"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:102
+msgid "Budget"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:126
+msgid "Show closed"
+msgstr ""
+
+#: js/Model.js:31
+msgid "example record"
+msgid_plural "example records"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:35
+msgid "example record list"
+msgid_plural "example record lists"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:69
+msgid "Quick search"
+msgstr ""
+
+#: js/Model.js:79
+msgid "Last modified"
+msgstr ""
+
+#: js/Model.js:80
+msgid "Last modifier"
+msgstr ""
+
+#: js/Model.js:81
+msgid "Creation Time"
+msgstr ""
+
+#: js/Model.js:82
+msgid "Creator"
+msgstr ""
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr ""
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr ""
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr ""
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr ""
diff --git a/tine20/Tool/Application/templates/translations/hu.po b/tine20/Tool/Application/templates/translations/hu.po
new file mode 100644 (file)
index 0000000..95bf467
--- /dev/null
@@ -0,0 +1,115 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2012-03-02 12:53+0000\n"
+"Last-Translator: Faragó Tamás <Unknown>\n"
+"Language-Team: gump <admin@kemenyfem.hu>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Launchpad-Export-Date: 2012-03-03 05:53+0000\n"
+"X-Generator: Launchpad (build 14886)\n"
+"X-Poedit-Country: HUNGARY\n"
+"X-Poedit-Language: Hungarian\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Config.php:31
+msgid "Status Available"
+msgstr "Állapot elérhető"
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+"Lehetséges állapot. Kérlek jegyezd meg, hogy a további állapotok ütközhetnek "
+"a más Példa Alkalmazás rendszerekkel exportálások vagy szinkronizáláskor."
+
+#: Controller.php:74
+#, python-format
+msgid "%s's personal example records"
+msgstr "%s személyes példa rekordjai"
+
+#: js/ExampleApplication.js:24
+msgid "Example Application test"
+msgstr "Példa Alkalmazás teszt"
+
+#: js/ExampleRecordEditDialog.js:87
+msgid "ExampleRecord"
+msgstr "PéldaRekord"
+
+#: js/ExampleRecordEditDialog.js:104 js/ExampleRecordGridPanel.js:83
+msgid "Name"
+msgstr "Név"
+
+#: js/ExampleRecordEditDialog.js:110 js/ExampleRecordGridPanel.js:89
+#: js/Model.js:71
+msgid "Status"
+msgstr "Státusz"
+
+#: js/ExampleRecordGridPanel.js:96
+msgid "Title"
+msgstr "Beosztás"
+
+#: js/ExampleRecordGridPanel.js:102
+msgid "Budget"
+msgstr "Költség"
+
+#: js/ExampleRecordGridPanel.js:126
+msgid "Show closed"
+msgstr "Mutasd a lezártakat"
+
+#: js/Model.js:31
+msgid "example record"
+msgid_plural "example records"
+msgstr[0] "példa rekord"
+msgstr[1] "példa rekordok"
+
+#: js/Model.js:35
+msgid "example record list"
+msgid_plural "example record lists"
+msgstr[0] "példa rekord lista"
+msgstr[1] "példa rekord listák"
+
+#: js/Model.js:69
+msgid "Quick search"
+msgstr "Gyors keresés"
+
+#: js/Model.js:79
+msgid "Last modified"
+msgstr "Utoljára módosítva"
+
+#: js/Model.js:80
+msgid "Last modifier"
+msgstr "Utoljára módosította"
+
+#: js/Model.js:81
+msgid "Creation Time"
+msgstr "Készítés ideje"
+
+#: js/Model.js:82
+msgid "Creator"
+msgstr "Készítő"
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr "Teljesítve"
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr "Lemondva"
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr "Feldolgozás alatt"
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr "PéldaAlkalmazás"
+
+msgid "Example Application"
+msgstr "Példa Alkalmazás"
diff --git a/tine20/Tool/Application/templates/translations/it.po b/tine20/Tool/Application/templates/translations/it.po
new file mode 100644 (file)
index 0000000..d0aab6e
--- /dev/null
@@ -0,0 +1,110 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Tine 2.0 - ExampleApplication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2012-02-10 14:03+0000\n"
+"Last-Translator: Cornelius Weiss <c.weiss@metaways.de>\n"
+"Language-Team: Tine 2.0 Translators\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Launchpad-Export-Date: 2012-03-02 09:32+0000\n"
+"X-Generator: Launchpad (build 14886)\n"
+"X-Poedit-Country: \n"
+"X-Poedit-Language: Italian\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Config.php:31
+msgid "Status Available"
+msgstr ""
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+
+#: Controller.php:74
+#, python-format
+msgid "%s's personal example records"
+msgstr ""
+
+#: js/ExampleApplication.js:24
+msgid "Example Application test"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:87
+msgid "ExampleRecord"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:104 js/ExampleRecordGridPanel.js:83
+msgid "Name"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:110 js/ExampleRecordGridPanel.js:89
+#: js/Model.js:71
+msgid "Status"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:96
+msgid "Title"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:102
+msgid "Budget"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:126
+msgid "Show closed"
+msgstr ""
+
+#: js/Model.js:31
+msgid "example record"
+msgid_plural "example records"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:35
+msgid "example record list"
+msgid_plural "example record lists"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:69
+msgid "Quick search"
+msgstr ""
+
+#: js/Model.js:79
+msgid "Last modified"
+msgstr ""
+
+#: js/Model.js:80
+msgid "Last modifier"
+msgstr ""
+
+#: js/Model.js:81
+msgid "Creation Time"
+msgstr ""
+
+#: js/Model.js:82
+msgid "Creator"
+msgstr ""
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr ""
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr ""
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr ""
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr ""
diff --git a/tine20/Tool/Application/templates/translations/ja.po b/tine20/Tool/Application/templates/translations/ja.po
new file mode 100644 (file)
index 0000000..e9940ba
--- /dev/null
@@ -0,0 +1,110 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Tine 2.0 - ExampleApplication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2012-02-10 14:03+0000\n"
+"Last-Translator: Cornelius Weiss <c.weiss@metaways.de>\n"
+"Language-Team: Tine 2.0 Translators\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Launchpad-Export-Date: 2012-03-02 09:32+0000\n"
+"X-Generator: Launchpad (build 14886)\n"
+"X-Poedit-Country: NOT SPECIFIED / ANY\n"
+"X-Poedit-Language: Japanese\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Config.php:31
+msgid "Status Available"
+msgstr ""
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+
+#: Controller.php:74
+#, python-format
+msgid "%s's personal example records"
+msgstr ""
+
+#: js/ExampleApplication.js:24
+msgid "Example Application test"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:87
+msgid "ExampleRecord"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:104 js/ExampleRecordGridPanel.js:83
+msgid "Name"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:110 js/ExampleRecordGridPanel.js:89
+#: js/Model.js:71
+msgid "Status"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:96
+msgid "Title"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:102
+msgid "Budget"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:126
+msgid "Show closed"
+msgstr ""
+
+#: js/Model.js:31
+msgid "example record"
+msgid_plural "example records"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:35
+msgid "example record list"
+msgid_plural "example record lists"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:69
+msgid "Quick search"
+msgstr ""
+
+#: js/Model.js:79
+msgid "Last modified"
+msgstr ""
+
+#: js/Model.js:80
+msgid "Last modifier"
+msgstr ""
+
+#: js/Model.js:81
+msgid "Creation Time"
+msgstr ""
+
+#: js/Model.js:82
+msgid "Creator"
+msgstr ""
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr ""
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr ""
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr ""
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr ""
diff --git a/tine20/Tool/Application/templates/translations/nb.po b/tine20/Tool/Application/templates/translations/nb.po
new file mode 100644 (file)
index 0000000..134142a
--- /dev/null
@@ -0,0 +1,154 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Tine 2.0 - ExampleApplication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2012-03-02 13:01+0000\n"
+"Last-Translator: Cirion <Unknown>\n"
+"Language-Team: Tine 2.0 Translators\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Launchpad-Export-Date: 2012-03-03 05:53+0000\n"
+"X-Generator: Launchpad (build 14886)\n"
+"X-Poedit-Country: NOT SPECIFIED / ANY\n"
+"X-Poedit-Language: Norwegian Bokmål\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Config.php:31
+msgid "Status Available"
+msgstr ""
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+
+#: Controller.php:74
+#, python-format
+msgid "%s's personal example records"
+msgstr ""
+
+#: js/ExampleApplication.js:24
+msgid "Example Application test"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:87
+msgid "ExampleRecord"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:104 js/ExampleRecordGridPanel.js:83
+msgid "Name"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:110 js/ExampleRecordGridPanel.js:89
+#: js/Model.js:71
+msgid "Status"
+msgstr "Status"
+
+#: js/ExampleRecordGridPanel.js:96
+msgid "Title"
+msgstr "Tittel"
+
+#: js/ExampleRecordGridPanel.js:102
+msgid "Budget"
+msgstr "Budsjett"
+
+#: js/ExampleRecordGridPanel.js:126
+msgid "Show closed"
+msgstr "Vis lukket"
+
+#: js/Model.js:31
+msgid "example record"
+msgid_plural "example records"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:35
+msgid "example record list"
+msgid_plural "example record lists"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:69
+msgid "Quick search"
+msgstr "Hurtig Søk"
+
+#: js/Model.js:79
+msgid "Last modified"
+msgstr ""
+
+#: js/Model.js:80
+msgid "Last modifier"
+msgstr ""
+
+#: js/Model.js:81
+msgid "Creation Time"
+msgstr ""
+
+#: js/Model.js:82
+msgid "Creator"
+msgstr ""
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr ""
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr ""
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr ""
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr "EksempelApplikasjon"
+
+msgid "ExampleRecords"
+msgstr "EksempelPoster"
+
+msgid "All ExampleRecords"
+msgstr "Alle EksempelPoster"
+
+msgid "Description"
+msgstr "Beskrivelse"
+
+msgid "record list"
+msgid_plural "record lists"
+msgstr[0] "lagre liste"
+msgstr[1] "lagre lister"
+
+msgid "Number"
+msgstr "Nummer"
+
+msgid "Unit"
+msgstr "Enhet"
+
+msgid "Unit Price"
+msgstr "Enhets Pris"
+
+msgid "Timesheets are billable"
+msgstr "Tidskjemaer er fakturerbare"
+
+msgid "closed"
+msgstr "lukket"
+
+msgid "open"
+msgstr "åpen"
+
+msgid "Billed"
+msgstr "Fakturert"
+
+msgid "not yet billed"
+msgstr "ikke fakturert enda"
+
+msgid "to bill"
+msgstr "å fakturere"
+
+msgid "billed"
+msgstr "fakturert"
diff --git a/tine20/Tool/Application/templates/translations/pl.po b/tine20/Tool/Application/templates/translations/pl.po
new file mode 100644 (file)
index 0000000..eac453f
--- /dev/null
@@ -0,0 +1,162 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Tine 2.0 - ExampleApplication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2012-03-02 13:06+0000\n"
+"Last-Translator: Wojciech Kaczmarek <Unknown>\n"
+"Language-Team: Tine 2.0 Translators\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2;\n"
+"X-Launchpad-Export-Date: 2012-03-03 05:53+0000\n"
+"X-Generator: Launchpad (build 14886)\n"
+"X-Poedit-Language: Polish\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Config.php:31
+msgid "Status Available"
+msgstr "Status Dostępny"
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+"Możliwy status. Zauważ proszę, że dodatkowy status może wpływać w innych "
+"przykładowych aplikacjach na eksport albo synchronizację."
+
+#: Controller.php:74
+#, python-format
+msgid "%s's personal example records"
+msgstr "%s przykładowe, osobiste wiersze"
+
+#: js/ExampleApplication.js:24
+msgid "Example Application test"
+msgstr "Test przykładowej aplikacji"
+
+#: js/ExampleRecordEditDialog.js:87
+msgid "ExampleRecord"
+msgstr "Przykładowy wiersz"
+
+#: js/ExampleRecordEditDialog.js:104 js/ExampleRecordGridPanel.js:83
+msgid "Name"
+msgstr "Nazwa"
+
+#: js/ExampleRecordEditDialog.js:110 js/ExampleRecordGridPanel.js:89
+#: js/Model.js:71
+msgid "Status"
+msgstr "Status"
+
+#: js/ExampleRecordGridPanel.js:96
+msgid "Title"
+msgstr "Tytuł"
+
+#: js/ExampleRecordGridPanel.js:102
+msgid "Budget"
+msgstr "Budżet"
+
+#: js/ExampleRecordGridPanel.js:126
+msgid "Show closed"
+msgstr "Pokaż zakończone"
+
+#: js/Model.js:31
+msgid "example record"
+msgid_plural "example records"
+msgstr[0] "Przykładowy wiersz"
+msgstr[1] "przykładowe wiersze"
+msgstr[2] "przykładowe wiersze"
+
+#: js/Model.js:35
+msgid "example record list"
+msgid_plural "example record lists"
+msgstr[0] "Lista przykładowych wierszy"
+msgstr[1] "listy przykładowych wierszy"
+msgstr[2] "listy przykładowych wierszy"
+
+#: js/Model.js:69
+msgid "Quick search"
+msgstr "Szybkie wyszukiwanie"
+
+#: js/Model.js:79
+msgid "Last modified"
+msgstr "Ostatnio modyfikowane"
+
+#: js/Model.js:80
+msgid "Last modifier"
+msgstr "Ostatnio modyfikował/a"
+
+#: js/Model.js:81
+msgid "Creation Time"
+msgstr "Czas utworzenia"
+
+#: js/Model.js:82
+msgid "Creator"
+msgstr "Autor"
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr "Zakończone"
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr "Anulowane"
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr "W opracowaniu"
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr "Przykładowa aplikacja"
+
+msgid "Example Application"
+msgstr "Przykładowa aplikacja"
+
+msgid "ExampleRecords"
+msgstr "Przykładowe wiersze"
+
+msgid "All ExampleRecords"
+msgstr "Wszystkie przykładowe wiersze"
+
+msgid "Description"
+msgstr "Opis"
+
+msgid "record list"
+msgid_plural "record lists"
+msgstr[0] "lista aplikacji"
+msgstr[1] "listy aplikacji"
+msgstr[2] "list aplikacji"
+
+msgid "Number"
+msgstr "Ilość"
+
+msgid "Unit"
+msgstr "Jednostka"
+
+msgid "Unit Price"
+msgstr "Cena jednostkowa"
+
+msgid "Timesheets are billable"
+msgstr "Karty godzin gotowe do przeliczenia"
+
+msgid "closed"
+msgstr "zakończone"
+
+msgid "open"
+msgstr "otwarte"
+
+msgid "Billed"
+msgstr "Przeliczone"
+
+msgid "not yet billed"
+msgstr "jeszcze nie przeliczone"
+
+msgid "to bill"
+msgstr "przelicz"
+
+msgid "billed"
+msgstr "przeliczone"
diff --git a/tine20/Tool/Application/templates/translations/ru.po b/tine20/Tool/Application/templates/translations/ru.po
new file mode 100644 (file)
index 0000000..8dbb390
--- /dev/null
@@ -0,0 +1,155 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Tine 2.0 - ExampleApplication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2012-03-02 13:03+0000\n"
+"Last-Translator: Nkolay Parukhin <Unknown>\n"
+"Language-Team: Tine 2.0 Translators\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Launchpad-Export-Date: 2012-03-03 05:53+0000\n"
+"X-Generator: Launchpad (build 14886)\n"
+"X-Poedit-Language: Russian\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Config.php:31
+msgid "Status Available"
+msgstr ""
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+
+#: Controller.php:74
+#, python-format
+msgid "%s's personal example records"
+msgstr ""
+
+#: js/ExampleApplication.js:24
+msgid "Example Application test"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:87
+msgid "ExampleRecord"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:104 js/ExampleRecordGridPanel.js:83
+msgid "Name"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:110 js/ExampleRecordGridPanel.js:89
+#: js/Model.js:71
+msgid "Status"
+msgstr "Статус"
+
+#: js/ExampleRecordGridPanel.js:96
+msgid "Title"
+msgstr "Заголовок"
+
+#: js/ExampleRecordGridPanel.js:102
+msgid "Budget"
+msgstr "Бюджет"
+
+#: js/ExampleRecordGridPanel.js:126
+msgid "Show closed"
+msgstr "Показать закрытые"
+
+#: js/Model.js:31
+msgid "example record"
+msgid_plural "example records"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:35
+msgid "example record list"
+msgid_plural "example record lists"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:69
+msgid "Quick search"
+msgstr ""
+
+#: js/Model.js:79
+msgid "Last modified"
+msgstr ""
+
+#: js/Model.js:80
+msgid "Last modifier"
+msgstr ""
+
+#: js/Model.js:81
+msgid "Creation Time"
+msgstr ""
+
+#: js/Model.js:82
+msgid "Creator"
+msgstr ""
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr ""
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr ""
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr ""
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr "ПриложениеПример"
+
+msgid "ExampleRecords"
+msgstr "ЗаписиПримеры"
+
+msgid "All ExampleRecords"
+msgstr "Все ЗаписиПримеры"
+
+msgid "Description"
+msgstr "Описание"
+
+msgid "record list"
+msgid_plural "record lists"
+msgstr[0] "список записей"
+msgstr[1] "списка записей"
+msgstr[2] "списков записей"
+
+msgid "Number"
+msgstr "Номер"
+
+msgid "Unit"
+msgstr "Единица"
+
+msgid "Unit Price"
+msgstr "Цена за единицу"
+
+msgid "Timesheets are billable"
+msgstr "Табели оплачиваемы"
+
+msgid "closed"
+msgstr "закрыт"
+
+msgid "open"
+msgstr "открыт"
+
+msgid "Billed"
+msgstr "Оплачен"
+
+msgid "not yet billed"
+msgstr "ещё не оплачен"
+
+msgid "to bill"
+msgstr "к оплате"
+
+msgid "billed"
+msgstr "оплачен"
diff --git a/tine20/Tool/Application/templates/translations/template.pot b/tine20/Tool/Application/templates/translations/template.pot
new file mode 100644 (file)
index 0000000..c9e4aad
--- /dev/null
@@ -0,0 +1,87 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Tine 2.0 - ExampleApplication\n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2008-07-29 21:14+0100\n"
+"Last-Translator: Cornelius Weiss <c.weiss@metaways.de>\n"
+"Language-Team: Tine 2.0 Translators\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Language: en\n"
+"X-Poedit-Country: GB\n"
+"X-Poedit-SourceCharset: utf-8\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: Controller.php:79
+#, python-format
+msgid "%s's personal example records"
+msgstr ""
+
+#: Model/ExampleRecord.php:35
+msgid "example record"
+msgstr ""
+
+#: Model/ExampleRecord.php:36
+msgid "example records"
+msgstr ""
+
+#: Model/ExampleRecord.php:38
+msgid "example record list"
+msgstr ""
+
+#: Model/ExampleRecord.php:39
+msgid "example record lists"
+msgstr ""
+
+#: Model/ExampleRecord.php:59 js/ExampleRecordEditDialog.js:70
+#: js/ExampleRecordDetailsPanel.js:74
+msgid "Name"
+msgstr ""
+
+#: Model/ExampleRecord.php:63 js/ExampleRecordEditDialog.js:76
+#: js/ExampleRecordDetailsPanel.js:78
+msgid "Status"
+msgstr ""
+
+#: Config.php:31
+msgid "Status Available"
+msgstr ""
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr ""
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr ""
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr ""
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr ""
+
+#: Preference.php:60
+msgid "Default Example Record Container"
+msgstr ""
+
+#: Preference.php:61
+msgid "The default container for new records"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:53
+msgid "ExampleRecord"
+msgstr ""
+
+#: js/ExampleRecordDetailsPanel.js:56
+msgid "Total Example Records"
+msgstr ""
diff --git a/tine20/Tool/Application/templates/translations/zh_CN.po b/tine20/Tool/Application/templates/translations/zh_CN.po
new file mode 100644 (file)
index 0000000..0df0ff3
--- /dev/null
@@ -0,0 +1,110 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Tine 2.0 - ExampleApplication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2012-02-10 14:03+0000\n"
+"Last-Translator: Cornelius Weiss <c.weiss@metaways.de>\n"
+"Language-Team: Tine 2.0 Translators\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Launchpad-Export-Date: 2012-03-02 09:32+0000\n"
+"X-Generator: Launchpad (build 14886)\n"
+"X-Poedit-Country: CHINA\n"
+"X-Poedit-Language: Chinese\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Config.php:31
+msgid "Status Available"
+msgstr ""
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+
+#: Controller.php:74
+#, python-format
+msgid "%s's personal example records"
+msgstr ""
+
+#: js/ExampleApplication.js:24
+msgid "Example Application test"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:87
+msgid "ExampleRecord"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:104 js/ExampleRecordGridPanel.js:83
+msgid "Name"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:110 js/ExampleRecordGridPanel.js:89
+#: js/Model.js:71
+msgid "Status"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:96
+msgid "Title"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:102
+msgid "Budget"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:126
+msgid "Show closed"
+msgstr ""
+
+#: js/Model.js:31
+msgid "example record"
+msgid_plural "example records"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:35
+msgid "example record list"
+msgid_plural "example record lists"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:69
+msgid "Quick search"
+msgstr ""
+
+#: js/Model.js:79
+msgid "Last modified"
+msgstr ""
+
+#: js/Model.js:80
+msgid "Last modifier"
+msgstr ""
+
+#: js/Model.js:81
+msgid "Creation Time"
+msgstr ""
+
+#: js/Model.js:82
+msgid "Creator"
+msgstr ""
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr ""
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr ""
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr ""
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr ""
diff --git a/tine20/Tool/Application/templates/translations/zh_TW.po b/tine20/Tool/Application/templates/translations/zh_TW.po
new file mode 100644 (file)
index 0000000..8e6e73e
--- /dev/null
@@ -0,0 +1,110 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: Tine 2.0 - ExampleApplication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-05-17 22:12+0100\n"
+"PO-Revision-Date: 2012-02-10 14:03+0000\n"
+"Last-Translator: Cornelius Weiss <c.weiss@metaways.de>\n"
+"Language-Team: Tine 2.0 Translators\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Launchpad-Export-Date: 2012-03-02 09:32+0000\n"
+"X-Generator: Launchpad (build 14886)\n"
+"X-Poedit-Country: TAIWAN\n"
+"X-Poedit-Language: Chinese\n"
+"X-Poedit-SourceCharset: utf-8\n"
+
+#: Config.php:31
+msgid "Status Available"
+msgstr ""
+
+#: Config.php:33
+msgid ""
+"Possible status. Please note that additional status might impact other "
+"ExampleApplication systems on export or syncronisation."
+msgstr ""
+
+#: Controller.php:74
+#, python-format
+msgid "%s's personal example records"
+msgstr ""
+
+#: js/ExampleApplication.js:24
+msgid "Example Application test"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:87
+msgid "ExampleRecord"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:104 js/ExampleRecordGridPanel.js:83
+msgid "Name"
+msgstr ""
+
+#: js/ExampleRecordEditDialog.js:110 js/ExampleRecordGridPanel.js:89
+#: js/Model.js:71
+msgid "Status"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:96
+msgid "Title"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:102
+msgid "Budget"
+msgstr ""
+
+#: js/ExampleRecordGridPanel.js:126
+msgid "Show closed"
+msgstr ""
+
+#: js/Model.js:31
+msgid "example record"
+msgid_plural "example records"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:35
+msgid "example record list"
+msgid_plural "example record lists"
+msgstr[0] ""
+msgstr[1] ""
+
+#: js/Model.js:69
+msgid "Quick search"
+msgstr ""
+
+#: js/Model.js:79
+msgid "Last modified"
+msgstr ""
+
+#: js/Model.js:80
+msgid "Last modifier"
+msgstr ""
+
+#: js/Model.js:81
+msgid "Creation Time"
+msgstr ""
+
+#: js/Model.js:82
+msgid "Creator"
+msgstr ""
+
+#: Setup/Initialize.php:33
+msgid "Completed"
+msgstr ""
+
+#: Setup/Initialize.php:34
+msgid "Cancelled"
+msgstr ""
+
+#: Setup/Initialize.php:35
+msgid "In process"
+msgstr ""
+
+#: Setup/setup.xml:4
+msgid "ExampleApplication"
+msgstr ""
diff --git a/tine20/Tool/CodeGenerator/Application.php b/tine20/Tool/CodeGenerator/Application.php
new file mode 100644 (file)
index 0000000..83caa48
--- /dev/null
@@ -0,0 +1,178 @@
+<?php
+/**
+ * Application Generator
+ *
+ * @package     Tool
+ * @subpackage  CodeGenerator
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Flávio Gomes da Silva Lisboa <flavio.lisboa@serpro.gov.br>
+ * @copyright   Copyright (c) 2013 Metaways Infosystems GmbH (http://www.metaways.de)
+ * @version     $Id$
+ */
+class Tool_CodeGenerator_Application implements Tool_CodeGenerator_Interface
+{
+    const APPLICATION_NAME = '[APPLICATION_NAME]';
+    const DS = DIRECTORY_SEPARATOR;
+
+    /**
+     * List of source and target files
+     * @var array
+     */
+    protected $_sourceAndTargets = array();
+
+    /**
+     * List of files to be created
+     * @var array
+    */
+    protected $_folders = array(
+            'Backend',
+            'Controller',
+            'css',
+            'Frontend',
+            'js',
+            'translations',
+            'Model',
+            'Setup'
+    );
+
+    protected $recursiveSources = array(
+            'translations'
+    );
+
+    protected $_applicationFolder = null;
+
+    protected $_applicationName = null;
+
+    protected $_rootFolder = null;
+
+    public function __construct()
+    {
+        $applicationName = self::APPLICATION_NAME;
+
+        $this->_sourceAndTargets =  array(
+            'Backend/ExampleRecord.php' => "Backend/{$applicationName}Record.php",
+            'Controller/ExampleRecord.php' => "/Controller/{$applicationName}Record.php",
+            'css/ExampleApplication.css' => "/css/{$applicationName}.css",
+            'Frontend/Cli.php' => 'Frontend/Cli.php',
+            'Frontend/Http.php' => 'Frontend/Http.php',
+            'Frontend/Json.php' => 'Frontend/Json.php',
+            'js/ExampleRecordDetailsPanel.js' => "js/{$applicationName}RecordDetailsPanel.js",
+            'js/ExampleRecordEditDialog.js' => "js/{$applicationName}RecordEditDialog.js",
+            'js/ExampleRecordGridPanel.js' => "js/{$applicationName}RecordGridPanel.js",
+            'Model/ExampleRecord.php' => "Model/{$applicationName}Record.php",
+            'Model/ExampleRecordFilter.php' => "Model/{$applicationName}RecordFilter.php",
+            'Model/Status.php' => "Model/Status.php",
+            'Setup/Initialize.php' => 'Setup/Initialize.php',
+            'Setup/setup.xml' => 'Setup/setup.xml',
+            'translations' => 'translations',
+            'Config.php' => 'Config.php',
+            'Controller.php' => 'Controller.php',
+            'ExampleApplication.jsb2' => $applicationName . '.jsb2',
+            'Exception.php' => 'Exception.php',
+            'Preference.php' => 'Preference.php'
+        );
+    }
+
+    public function build(array $args)
+    {
+        try {
+            $this->_applicationName = $args[0];
+
+            // creates application folder
+            $this->_applicationFolder = $args[count($args)-1] . self::DS . $args[0];
+                    
+            $this->_rootFolder = $args[count($args)-1];
+                    
+            $this->_createFolders();
+
+            $this->_copyFiles();
+                    
+        } catch (Exception $e) {
+            echo $e->getMessage();
+        }
+
+    }
+
+    /**
+     * Creates application folders
+     */
+    protected function _createFolders()
+    {
+        mkdir($this->fsOsSintax($this->_applicationFolder));
+
+        foreach ($this->_folders as $folder)
+        {
+            mkdir($this->fsOsSintax($this->_applicationFolder . self::DS . $folder));
+        }
+    }
+
+    /**
+     * Copy template files to target folders
+     */
+    protected function _copyFiles()
+    {
+        $templateFolder = $this->_rootFolder . self::DS . 'Tool/Application/templates';
+
+        foreach($this->_sourceAndTargets as $source => $target) {
+            $target = str_replace(self::APPLICATION_NAME, $this->_applicationName, $target);
+
+            if (in_array($target, $this->recursiveSources)) {                
+                $directory = scandir($this->fsOsSintax($templateFolder . self::DS . $source));
+                unset($directory[0]); // this directory
+                unset($directory[1]); // parent directory
+                
+                foreach($directory as $file) {
+                    $sourcePath = $templateFolder . self::DS . $source . self::DS . $file;
+                    $targetPath = $this->_applicationFolder . self::DS . $target . self::DS . $file;
+                    $this->_copyFile($sourcePath, $targetPath);
+                }
+                
+            } else {
+                $sourcePath = $templateFolder . self::DS . $source;
+                $targetPath = $this->_applicationFolder . self::DS . $target;
+                $this->_copyFile($templateFolder . self::DS . $source, $targetPath);
+            }
+        }
+    }
+
+    /**
+     * Copy file $sourcePath to $targetPath
+     * @param string $sourcePath
+     * @param string $targetPath
+     */
+    protected function _copyFile($sourcePath, $targetPath)
+    {
+        copy($this->fsOsSintax($sourcePath), $this->fsOsSintax($targetPath));
+        $this->_changeFile($targetPath);
+    }
+
+    /**
+     * Change content of copied files
+     * @param string $targetPath
+     */
+    protected function _changeFile($targetPath)
+    {
+        $content = file_get_contents($this->fsOsSintax($targetPath));
+
+        $content = str_replace('ExampleApplication', $this->_applicationName, $content);
+        $content = str_replace('ExampleRecord', $this->_applicationName . 'Record', $content);
+        $content = str_replace('EXAMPLERECORD', strtoupper($this->_applicationName) . 'RECORD', $content);
+        $chainFilter = new Zend_Filter();
+        $chainFilter->addFilter(new Zend_Filter_Word_CamelCaseToUnderscore())
+                    ->addFilter(new Zend_Filter_StringToLower());
+        $content = str_replace('example_application_record', $chainFilter->filter($this->_applicationName) . '_record', $content);        
+
+        file_put_contents($targetPath, $content);
+    }
+    
+    /**
+     * Ensures that path is according to sintax of filesystem
+     * Try to use only in PHP core functions
+     * @param string $path
+     * @return string
+     */
+    protected function fsOsSintax($path)
+    {
+        return str_replace('/', self::DS, $path);
+    }    
+}
\ No newline at end of file
diff --git a/tine20/Tool/CodeGenerator/Interface.php b/tine20/Tool/CodeGenerator/Interface.php
new file mode 100644 (file)
index 0000000..cef217f
--- /dev/null
@@ -0,0 +1,15 @@
+<?php
+/**
+ * Interface for code generators
+ *
+ * @package     Tool
+ * @subpackage  CodeGenerator
+ * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
+ * @author      Flávio Gomes da Silva Lisboa <flavio.lisboa@serpro.gov.br>
+ * @copyright   Copyright (c) 2013 Metaways Infosystems GmbH (http://www.metaways.de)
+ * @version     $Id$ 
+ */
+interface Tool_CodeGenerator_Interface
+{
+    public function build(array $args);
+}