]> git.donarmstrong.com Git - roundcube.git/blobdiff - plugins/squirrelmail_usercopy/squirrelmail_usercopy.php
Imported Upstream version 0.3
[roundcube.git] / plugins / squirrelmail_usercopy / squirrelmail_usercopy.php
diff --git a/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php b/plugins/squirrelmail_usercopy/squirrelmail_usercopy.php
new file mode 100644 (file)
index 0000000..4a14ff2
--- /dev/null
@@ -0,0 +1,94 @@
+<?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);
+                       }
+                       
+                       // mark identity as complete for following hooks
+                       $p['complete'] = 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