0013312: install from dump with url
[tine20] / tine20 / Setup / Server / Cli.php
1 <?php
2 /**
3  * Tine 2.0
4  * 
5  * @package     Tinebase
6  * @subpackage  Server
7  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
8  * @copyright   Copyright (c) 2007-2012 Metaways Infosystems GmbH (http://www.metaways.de)
9  * @author      Philipp Schüle <p.schuele@metaways.de>
10  * 
11  */
12
13 /**
14  * Cli Server class with handle() function
15  * 
16  * @package     Tinebase
17  * @subpackage  Server
18  */
19 class Setup_Server_Cli implements Tinebase_Server_Interface
20 {
21     /**
22      * (non-PHPdoc)
23      * @see Tinebase_Server_Interface::handle()
24      */
25     public function handle(\Zend\Http\Request $request = null, $body = null)
26     {
27         try {
28             $opts = new Zend_Console_Getopt(
29             array(
30                 'help|h'                    => 'Display this help Message',
31                 'verbose|v'                 => 'Output messages',
32                 'config|c=s'                => 'Path to config.inc.php file',
33                 'setconfig'                 => 'Update config. To specify the key and value, append \' -- configkey="your_key" configValue="your config value"\'
34                          Examples:
35                            setup.php --setconfig -- configkey=sample1 configvalue=value11
36                            setup.php --setconfig -- configkey=sample2 configvalue=arrayKey1:Value1,arrayKey2:value2
37                           ',
38                 'getconfig'                 => 'Get Config value for a specify the key \' -- configkey="your_key"\'',
39                 'check_requirements'        => 'Check if all requirements are met to install and run tine20',
40                 'create_admin'              => 'Create new admin user (or reactivate if already exists)',
41                 'install-s'                 => 'Install applications [all if nothing installed yet] or comma separated list (use "all" as parameter to install all available apps);'
42                     . ' To specify the login name and login password of the admin user that is created during installation, append \' -- adminLoginName="admin" adminPassword="password"\''
43                     . ' To add imap or smtp settings, append (for example) \' -- imap="host:mail.example.org,port:143,dbmail_host:localhost" smtp="ssl:tls"\'',
44                 'update-s'                  => 'Update applications [All] or comma separated list',
45                 'uninstall-s'               => 'Uninstall application [All] or comma separated list',
46                 'install_dump'              => 'Install Tine from a backup
47                          Examples:
48                            setup.php --install_dump -- db=1 files=1 backupDir=/backup/tine20
49                            setup.php --install_dump -- db=1 files=1 backupUrl=https://username:password@example.org/mydump',
50                 'list-s'                    => 'List installed applications',
51                 'sync_accounts_from_ldap'   => 'Import user and groups from ldap',
52                     'dbmailldap'            => 'Only usable with sync_accounts_from_ldap. Fetches dbmail email user data from LDAP.',
53                     'onlyusers'             => 'Only usable with sync_accounts_from_ldap. Fetches only users and no groups from LDAP.',
54                     'syncdeletedusers'      => 'Only usable with sync_accounts_from_ldap. Removes users from Tine 2.0 DB that no longer exist in LDAP',
55                     'syncaccountstatus'     => 'Only usable with sync_accounts_from_ldap. Synchronizes current account status from LDAP',
56                     'syncontactphoto'       => 'Only usable with sync_accounts_from_ldap. Always syncs contact photo from ldap',
57                 'sync_passwords_from_ldap'  => 'Synchronize user passwords from ldap',
58                 'egw14import'               => 'Import user and groups from egw14
59                          Examples: 
60                           setup.php --egw14import /path/to/config.ini',
61                 'reset_demodata'            => 'reinstall applications and install Demodata (Needs Admin user)',
62                 'updateAllImportExportDefinitions' => 'update ImportExport definitions for all applications',
63                 'backup'                    => 'backup config and data
64                          Examples:
65                            setup.php --backup -- config=1 db=1 files=1 backupDir=/backup/tine20 noTimestamp=1',
66                 'restore'                   => 'restore config and data
67                          Examples:
68                            setup.php --restore -- config=1 db=1 files=1 backupDir=/backup/tine20',
69                 'compare'                   => 'compare schemas with another database
70                         Examples:
71                            setup.php --compare -- otherdb=tine20other',
72                 'setpassword'               => 'set system user password
73                         Examples:
74                            setup.php --setpassword -- username=myusername password=myrandompw',
75             ));
76             $opts->parse();
77         } catch (Zend_Console_Getopt_Exception $e) {
78             echo "Invalid usage: {$e->getMessage()}\n\n";
79             echo $e->getUsageMessage();
80             exit;
81         }
82
83         if (count($opts->toArray()) === 0 || $opts->h || 
84             (empty($opts->install) && 
85             empty($opts->install_dump) &&
86             empty($opts->update) &&
87             empty($opts->uninstall) &&
88             empty($opts->list) && 
89             empty($opts->sync_accounts_from_ldap) && 
90             empty($opts->sync_passwords_from_ldap) && 
91             empty($opts->egw14import) && 
92             empty($opts->check_requirements) && 
93             empty($opts->reset_demodata) &&
94             empty($opts->updateAllImportExportDefinitions) &&
95             empty($opts->create_admin) && 
96             empty($opts->setconfig) && 
97             empty($opts->backup) &&
98             empty($opts->restore) &&
99             empty($opts->compare) &&
100             empty($opts->setpassword) &&
101             empty($opts->getconfig)))
102         {
103             echo $opts->getUsageMessage();
104             exit;
105         }
106
107         if ($opts->config) {
108             // add path to config.inc.php to include path
109             $path = strstr($opts->config, 'config.inc.php') !== false ? dirname($opts->config) : $opts->config;
110             set_include_path($path . PATH_SEPARATOR . get_include_path());
111         }
112         
113         Setup_Core::initFramework();
114
115         if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__
116             . ' Is cli request. method: ' . $this->getRequestMethod());
117
118         $setupServer = new Setup_Frontend_Cli();
119         return $setupServer->handle($opts);
120     }
121     
122     /**
123     * returns request method
124     *
125     * @return string|NULL
126     */
127     public function getRequestMethod()
128     {
129         $opts = Tinebase_Core::get('opts');
130         return (isset($opts->mode)) ? $opts->mode : NULL;
131     }
132 }