diff --git a/src/IDF/EmailAddress.php b/src/IDF/EmailAddress.php new file mode 100644 index 0000000..34b6e68 --- /dev/null +++ b/src/IDF/EmailAddress.php @@ -0,0 +1,96 @@ +_a['table'] = 'idf_emailaddresses'; + $this->_a['model'] = __CLASS__; + $this->_a['cols'] = array( + // It is mandatory to have an "id" column. + 'id' => + array( + 'type' => 'Pluf_DB_Field_Sequence', + //It is automatically added. + 'blank' => true, + ), + 'user' => + array( + 'type' => 'Pluf_DB_Field_Foreignkey', + 'model' => 'Pluf_User', + 'blank' => false, + 'verbose' => __('user'), + ), + 'address' => + array( + 'type' => 'Pluf_DB_Field_Email', + 'blank' => false, + 'verbose' => __('email'), + 'unique' => true, + ), + ); + // WARNING: Not using getSqlTable on the Pluf_User object to + // avoid recursion. + $t_users = $this->_con->pfx.'users'; + $this->_a['views'] = array( + 'join_user' => + array( + 'join' => 'LEFT JOIN '.$t_users + .' ON '.$t_users.'.id='.$this->_con->qn('user'), + 'select' => $this->getSelect().', ' + .$t_users.'.login AS login', + 'props' => array('login' => 'login'), + ) + ); + } + + function get_email_addresses_for_user($user) + { + $addr = $user->get_idf_emailaddress_list(); + $addr[] = (object)array("address" => $user->email, "id" => -1, "user" => $user); + return $addr; + } + + function get_user_for_email_address($email) + { + $sql = new Pluf_SQL('email=%s', array($email)); + $users = Pluf::factory('Pluf_User')->getList(array('filter'=>$sql->gen())); + if ($users->count() > 0) { + return $users[0]; + } + $sql = new Pluf_SQL('address=%s', array($email)); + $matches = Pluf::factory('IDF_EmailAddress')->getList(array('filter'=>$sql->gen())); + if ($matches->count() > 0) { + return new Pluf_User($matches[0]->user); + } + return null; + } +} + diff --git a/src/IDF/Migrations/16AddUserMail.php b/src/IDF/Migrations/16AddUserMail.php new file mode 100644 index 0000000..9856339 --- /dev/null +++ b/src/IDF/Migrations/16AddUserMail.php @@ -0,0 +1,43 @@ +model = new IDF_EmailAddress(); + $schema->createTables(); +} + +function IDF_Migrations_16AddUserMail_down($params=null) +{ + $db = Pluf::db(); + $schema = new Pluf_DB_Schema($db); + $schema->model = new IDF_EmailAddress(); + $schema->dropTables(); +} diff --git a/src/IDF/relations.php b/src/IDF/relations.php index ffc2376..ea89d8d 100644 --- a/src/IDF/relations.php +++ b/src/IDF/relations.php @@ -44,6 +44,7 @@ $m['IDF_Commit'] = array('relate_to' => array('IDF_Project', 'Pluf_User')); $m['IDF_Scm_Cache_Git'] = array('relate_to' => array('IDF_Project')); $m['IDF_UserData'] = array('relate_to' => array('Pluf_User')); +$m['IDF_EmailAddress'] = array('relate_to' => array('Pluf_User')); Pluf_Signal::connect('Pluf_Template_Compiler::construct_template_tags_modifiers', array('IDF_Middleware', 'updateTemplateTagsModifiers'));