From fc0fe2d88ffc0b30161f32e3aa3349c103ea036d Mon Sep 17 00:00:00 2001
From: Gunnar Wrobel
Date: Tue, 14 Apr 2009 10:06:59 +0200
Subject: [PATCH] Added a handler for german bank account information.
---
.../Server/Object/Kolabgermanbankarrangement.php | 155 +++++++++++++++++
.../Server/KolabgermanbankarrangementTest.php | 193 +++++++++++++++++++++
2 files changed, 348 insertions(+)
create mode 100644 framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolabgermanbankarrangement.php
create mode 100644 framework/Kolab_Server/test/Horde/Kolab/Server/KolabgermanbankarrangementTest.php
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolabgermanbankarrangement.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolabgermanbankarrangement.php
new file mode 100644
index 000000000..3e75cf93c
--- /dev/null
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolabgermanbankarrangement.php
@@ -0,0 +1,155 @@
+
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=Kolab_Server
+ */
+
+/**
+ * This class provides a representation of german bank account
+ * information.
+ *
+ * Copyright 2008-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Kolab
+ * @package Kolab_Server
+ * @author Gunnar Wrobel
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=Kolab_Server
+ */
+class Horde_Kolab_Server_Object_Kolabgermanbankarrangement extends Horde_Kolab_Server_Object
+{
+ /** Define attributes specific to this object type */
+
+ /** The number of the account */
+ const ATTRIBUTE_NUMBER = 'kolabGermanBankAccountNumber';
+
+ /** The numeric ID of the bank */
+ const ATTRIBUTE_BANKCODE = 'kolabGermanBankCode';
+
+ /** Account holder */
+ const ATTRIBUTE_HOLDER = 'kolabGermanBankAccountHolder';
+
+ /** Name of the bank */
+ const ATTRIBUTE_BANKNAME = 'kolabGermanBankName';
+
+ /** Additional information */
+ const ATTRIBUTE_INFO = 'kolabGermanBankAccountInfo';
+
+ /** The uid of the owner of this account */
+ const ATTRIBUTE_OWNERUID = 'kolabGermanBankAccountOwnerUid';
+
+ /** The specific object class of this object type */
+ const OBJECTCLASS_KOLABGERMANBANKARRANGEMENT = 'kolabGermanBankArrangement';
+
+ /**
+ * A structure to initialize the attribute structure for this class.
+ *
+ * @var array
+ */
+ static public $init_attributes = array(
+ 'defined' => array(
+ self::ATTRIBUTE_NUMBER,
+ self::ATTRIBUTE_BANKCODE,
+ self::ATTRIBUTE_HOLDER,
+ self::ATTRIBUTE_BANKNAME,
+ self::ATTRIBUTE_INFO,
+ ),
+ 'derived' => array(
+ self::ATTRIBUTE_OWNERUID => array(
+ 'method' => 'getParentUid',
+ ),
+ ),
+ 'required' => array(
+ self::ATTRIBUTE_NUMBER,
+ self::ATTRIBUTE_BANKCODE,
+ ),
+ 'object_classes' => array(
+ self::OBJECTCLASS_KOLABGERMANBANKARRANGEMENT,
+ ),
+ );
+
+ /**
+ * Generates an ID for the given information.
+ *
+ * @param array $info The data of the object.
+ *
+ * @static
+ *
+ * @return string|PEAR_Error The ID.
+ */
+ public function generateId(&$info)
+ {
+ if (!isset($info[self::ATTRIBUTE_OWNERUID])) {
+ throw new Horde_Kolab_Server_Exception(_("No parent object provided!"),
+ Horde_Kolab_Server_Exception::INVALID_INFORMATION);
+ }
+
+ if (is_array($info[self::ATTRIBUTE_OWNERUID])) {
+ $uid = $info[self::ATTRIBUTE_OWNERUID][0];
+ } else {
+ $uid = $info[self::ATTRIBUTE_OWNERUID];
+ }
+
+ $object = $this->server->fetch($uid);
+ if (!$object->exists()) {
+ throw new Horde_Kolab_Server_Exception(sprintf(_("The parent object %s does not exist!"),
+ $uid),
+ Horde_Kolab_Server_Exception::INVALID_INFORMATION);
+ }
+ if (!isset($info[self::ATTRIBUTE_NUMBER])) {
+ throw new Horde_Kolab_Server_Exception(_("No account number given!"),
+ Horde_Kolab_Server_Exception::INVALID_INFORMATION);
+ }
+
+ if (is_array($info[self::ATTRIBUTE_NUMBER])) {
+ $number = $info[self::ATTRIBUTE_NUMBER][0];
+ } else {
+ $number = $info[self::ATTRIBUTE_NUMBER];
+ }
+
+ $base = substr($uid, 0, strpos($uid, $this->server->getBaseUid()) - 1);
+
+ return self::ATTRIBUTE_NUMBER . '=' . $this->server->structure->quoteForUid($number) . ',' . $base;
+ }
+
+ /**
+ * Returns the set of search operations supported by this object type.
+ *
+ * @return array An array of supported search operations.
+ */
+ static public function getSearchOperations()
+ {
+ $searches = array(
+ 'accountsForMail',
+ );
+ return $searches;
+ }
+
+ /**
+ * Returns the UIDs of the bank accounts for the user with the given mail
+ * address.
+ *
+ * @param Horde_Kolab_Server $server The server to query.
+ * @param string $mail Search objects with this mail alias.
+ *
+ * @return mixed The UIDs or false if there was no result.
+ *
+ * @throws Horde_Kolab_Server_Exception
+ */
+ static public function accountsForMail($server, $mail)
+ {
+ $uid = $server->uidForMail($mail, Horde_Kolab_Server_Object::RESULT_SINGLE);
+ return self::objectsForUid($server, $uid, self::OBJECTCLASS_KOLABGERMANBANKARRANGEMENT);
+ }
+
+}
\ No newline at end of file
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/KolabgermanbankarrangementTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/KolabgermanbankarrangementTest.php
new file mode 100644
index 000000000..17949b124
--- /dev/null
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/KolabgermanbankarrangementTest.php
@@ -0,0 +1,193 @@
+
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=Kolab_Server
+ */
+
+/**
+ * The Autoloader allows us to omit "require/include" statements.
+ */
+require_once 'Horde/Autoloader.php';
+
+/**
+ * Test the kolabGermanBankArrangement object.
+ *
+ * Copyright 2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Kolab
+ * @package Kolab_Server
+ * @author Gunnar Wrobel
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=Kolab_Server
+ */
+class Horde_Kolab_Server_KolabgermanbankarrangementTest extends Horde_Kolab_Test_Server
+{
+ /**
+ * Objects used within this test
+ *
+ * @var array
+ */
+ private $objects = array(
+ /* Default bank account owner */
+ array(
+ 'type' => 'Horde_Kolab_Server_Object_Kolabinetorgperson',
+ Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_GIVENNAME => 'Frank',
+ Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_SN => 'Mustermann',
+ Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_OrgPersonTest_123',
+ ),
+ /* Default account */
+ array(
+ 'type' => 'Horde_Kolab_Server_Object_Kolabgermanbankarrangement',
+ Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_NUMBER => '0123456789',
+ Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_BANKCODE => '1111111',
+ ),
+ );
+
+ /**
+ * Provide different server types.
+ *
+ * @return array The different server types.
+ */
+ public function &provideServers()
+ {
+ $servers = array();
+ /**
+ * We always use the test server
+ */
+ $servers[] = array($this->prepareEmptyKolabServer());
+ if (false) {
+ $real = $this->prepareLdapKolabServer();
+ if (!empty($real)) {
+ $servers[] = array($real);
+ }
+ }
+ return $servers;
+ }
+
+ /**
+ * Test ID generation for a person.
+ *
+ * @dataProvider provideServers
+ *
+ * @return NULL
+ */
+ public function testGenerateId($server)
+ {
+ $person = $this->assertAdd($server, $this->objects[0],
+ array(Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_SID => ''));
+ $account_data = $this->objects[1];
+ $account_data[Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_OWNERUID] = $person->getUid();
+ $a = new Horde_Kolab_Server_Object_Kolabgermanbankarrangement($server, null, $account_data);
+ $this->assertContains(Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_NUMBER . '=' . $this->objects[1][Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_NUMBER],
+ $a->get(Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_UID));
+ }
+
+ /**
+ * Test adding an invalid Account.
+ *
+ * @dataProvider provideServers
+ * @expectedException Horde_Kolab_Server_Exception
+ *
+ * @return NULL
+ */
+ public function testAddInvalidAccount($server)
+ {
+ $result = $server->add($this->objects[1]);
+ }
+
+ /**
+ * Test handling easy attributes.
+ *
+ * @dataProvider provideServers
+ *
+ * @return NULL
+ */
+ public function testEasyAttributes($server)
+ {
+ $person = $this->assertAdd($server, $this->objects[0],
+ array(Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_SID => ''));
+ $account_data = $this->objects[1];
+ $account_data[Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_OWNERUID] = $person->getUid();
+ $account = $this->assertAdd($server, $account_data,
+ array(Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_OWNERUID => $person->getUid()));
+ $this->assertEasyAttributes($account, $server,
+ array(
+ Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_BANKCODE => array(
+ '01234567890123456789',
+ '0',
+ '101',
+ null,
+ '',
+ array('101', '202'),
+ ),
+ Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_HOLDER => array(
+ 'something',
+ 'somewhere',
+ null,
+ array('a', 'b'),
+ '',
+ ),
+ Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_BANKNAME => array(
+ 'something',
+ 'somewhere',
+ null,
+ array('a', 'b'),
+ '',
+ ),
+ Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_INFO => array(
+ 'something',
+ 'somewhere',
+ null,
+ array('a', 'b'),
+ '',
+ ),
+ )
+ );
+ }
+
+ /**
+ * Test modifying the account number of an account. This should have an
+ * effect on the UID of the object and needs to rename the object.
+ *
+ * @dataProvider provideServers
+ *
+ * @return NULL
+ */
+ public function testModifyAccountNumber($server)
+ {
+ $person = $this->assertAdd($server, $this->objects[0],
+ array(Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_SID => ''));
+ $account_data = $this->objects[1];
+ $account_data[Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_OWNERUID] = $person->getUid();
+ $account = $server->add($account_data);
+ $this->assertNoError($account);
+
+ $account = $server->fetch($account->getUid());
+ $this->assertNoError($account);
+
+ $this->assertEquals($this->objects[1][Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_NUMBER],
+ $account->get(Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_NUMBER));
+
+ $result = $account->save(array(Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_NUMBER => '66666666'));
+ $this->assertNoError($result);
+
+ $account = $server->fetch($account->getUid());
+ $this->assertNoError($account);
+
+ $this->assertEquals($account->get(Horde_Kolab_Server_Object_Kolabgermanbankarrangement::ATTRIBUTE_NUMBER),
+ '66666666');
+
+ $result = $server->delete($account->getUid());
+ $this->assertNoError($result);
+ }
+}
--
2.11.0