diff options
Diffstat (limited to 'webmail/plugins/carddav/cronjob/synchronize.php')
| -rw-r--r-- | webmail/plugins/carddav/cronjob/synchronize.php | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/webmail/plugins/carddav/cronjob/synchronize.php b/webmail/plugins/carddav/cronjob/synchronize.php new file mode 100644 index 0000000..52cfff9 --- /dev/null +++ b/webmail/plugins/carddav/cronjob/synchronize.php @@ -0,0 +1,136 @@ +<?php + +/** + * Roundcube CardDAV synchronization + * + * @author Christian Putzke <christian.putzke@graviox.de> + * @copyright Christian Putzke @ Graviox Studios + * @since 31.03.2012 + * @link http://www.graviox.de/ + * @link https://twitter.com/graviox/ + * @version 0.5 + * @license http://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later + * + */ +class carddav_synchronization_cronjob +{ + /** + * @var string $doc_root Roundcubes document root + */ + private $doc_root; + + /** + * @var string $rc_inset Roundcubes iniset script + */ + private $rc_iniset = 'program/include/iniset.php'; + + /** + * Init CardDAV synchronization cronjob + * + * @param boolean $init Initialization + */ + public function __construct($init = true) + { + if ($init === true) + { + $this->init(); + } + } + + /** + * Init CardDAV synchronization cronjob + * + * @return void + */ + public function init() + { + $this->detect_document_root(); + $this->include_rc_iniset(); + } + + /** + * Detect Roundcubes real document root + * + * @return void + */ + private function detect_document_root() + { + $dir = dirname(__FILE__); + $dir = str_replace('plugins\\carddav\\cronjob', null, $dir); + $this->doc_root = str_replace('plugins/carddav/cronjob', null, $dir); + define('INSTALL_PATH', $this->doc_root); + } + + /** + * Include Roundcubes initset so that the internal Roundcube functions can be used inside this cronjob + * + * @return void + */ + private function include_rc_iniset() + { + if (file_exists($this->doc_root . $this->rc_iniset)) + { + chdir($this->doc_root); + require_once $this->doc_root . '/program/include/iniset.php'; + } + else + { + die('Can\'t detect file path correctly! I got this as Roundcubes document root: '. $this->doc_root); + } + } + + /** + * Get all CardDAV servers + * + * @return array $servers CardDAV server array with label, url, username, password (encrypted) + */ + private function get_carddav_servers() + { + $servers = array(); + $rcmail = rcmail::get_instance(); + + $query = " + SELECT + * + FROM + ".get_table_name('carddav_server')." + "; + + $result = $rcmail->db->query($query); + + while($server = $rcmail->db->fetch_assoc($result)) + { + $servers[] = $server; + } + + return $servers; + } + + /** + * Synchronize all available CardDAV servers + * + * @return void + */ + public function synchronize() + { + $servers = $this->get_carddav_servers(); + $rcmail = rcmail::get_instance(); + + carddav::write_log('CRONJOB: Starting automatic CardDAV synchronization!'); + + if (!empty($servers)) + { + foreach ($servers as $server) + { + $rcmail->user->data['user_id'] = $server['user_id']; + $carddav_addressbook = new carddav_addressbook($server['carddav_server_id'], $server['label'], false); + $carddav_addressbook->carddav_addressbook_sync($server); + } + } + + carddav::write_log('CRONJOB: Automatic CardDAV synchronization finished!'); + } +} + +$cronjob = new carddav_synchronization_cronjob(); +$cronjob->synchronize();
\ No newline at end of file |
