summaryrefslogtreecommitdiff
path: root/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/squirrelmail_usercopy/squirrelmail_usercopy.php')
-rw-r--r--plugins/squirrelmail_usercopy/squirrelmail_usercopy.php91
1 files changed, 91 insertions, 0 deletions
diff --git a/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php b/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php
new file mode 100644
index 000000000..cc44f35e4
--- /dev/null
+++ b/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php
@@ -0,0 +1,91 @@
+<?php
+
+/**
+ * Copy a new users identity and settings from a nearby Squirrelmail installation
+ *
+ * Currently only file-based data storage of Squirrelmail is supported.
+ *
+ * @version 1.0
+ * @author Thomas Bruederli
+ */
+class squirrelmail_usercopy extends rcube_plugin
+{
+ private $prefs = null;
+ private $abook = array();
+
+ public function init()
+ {
+ $this->add_hook('create_user', array($this, 'create_user'));
+ $this->add_hook('create_identity', array($this, 'create_identity'));
+ }
+
+ public function create_user($p)
+ {
+ // read prefs and add email address
+ $this->read_squirrel_prefs($p['user']);
+ if ($this->prefs['email_address'])
+ $p['user_email'] = $this->prefs['email_address'];
+
+ return $p;
+ }
+
+ public function create_identity($p)
+ {
+ // only execute on login
+ if ($p['login'] && $this->prefs) {
+ if ($this->prefs['full_name'])
+ $p['record']['name'] = $this->prefs['full_name'];
+ if ($this->prefs['email_address'])
+ $p['record']['email'] = $this->prefs['email_address'];
+ if ($this->prefs['signature'])
+ $p['record']['signature'] = $this->prefs['signature'];
+
+ // copy address book
+ $rcmail = rcmail::get_instance();
+ $contacts = $rcmail->get_address_book(null, true);
+ if ($contacts && count($this->abook)) {
+ foreach ($this->abook as $rec)
+ $contacts->insert($rec, true);
+ }
+ }
+
+ return $p;
+ }
+
+ private function read_squirrel_prefs($uname)
+ {
+ $this->load_config();
+ $rcmail = rcmail::get_instance();
+
+ if ($srcdir = $rcmail->config->get('squirrelmail_data_dir')) {
+ $prefsfile = slashify($srcdir) . $uname . '.pref';
+ $abookfile = slashify($srcdir) . $uname . '.abook';
+ $sigfile = slashify($srcdir) . $uname . '.sig';
+
+ if (is_readable($prefsfile)) {
+ $this->prefs = array();
+ foreach (file($prefsfile) as $line) {
+ list($key, $value) = explode('=', $line);
+ $this->prefs[$key] = utf8_encode(rtrim($value));
+ }
+
+ // also read signature file if exists
+ if (is_readable($sigfile)) {
+ $this->prefs['signature'] = utf8_encode(file_get_contents($sigfile));
+ }
+
+ // parse addres book file
+ if (filesize($abookfile)) {
+ foreach(file($abookfile) as $line) {
+ list($rec['name'], $rec['firstname'], $rec['surname'], $rec['email']) = explode('|', utf8_encode(rtrim($line)));
+ if ($rec['name'] && $rec['email'])
+ $this->abook[] = $rec;
+ }
+ }
+ }
+ }
+ }
+
+}
+
+?> \ No newline at end of file