Zend_Gdata_Gapps.xml 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 14978 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.gdata.gapps">
  5. <title>Google Apps Provisionierung verwenden</title>
  6. <para>
  7. Google Apps ist ein Service der es Domain Administratoren erlaubt Ihren Benutzern einen gemanagten
  8. Zugriff auf Google Services wie Mail, Kalender und Dokumente &amp; Tabellenkalkulationen zu bieten.
  9. Die Provisionierungs API bietet ein programmmäßiges Interface um dieses Service zu konfigurieren.
  10. Im speziellen erlaubt es diese API den Administratoren Benutzerzugänge, Nicknamen und Email Listen
  11. zu erstellen, zu empfangen, zu verändern und zu löschen.
  12. </para>
  13. <para>
  14. Diese Bibliothek implementiert die Version 2.0 der Provisionierungs API. Zugriff zum eigenen Konto über
  15. die Provisionierungs API muß manuell für jede Domain aktiviert werden die das Google Apps Kontrollpanel
  16. verwendet. Nur bestimmte Kontotpen sind fähig dieses Feature einzuschalten.
  17. </para>
  18. <para>
  19. Für weitere Information zur Google Apps Provisionierungs API, inklusive Anleitungen für das einschalten
  20. des API Zugriffs, kann in die
  21. <ulink url="http://code.google.com/apis/calendar/overview.html">Provisionierungs API V2.0 Referenz</ulink>
  22. gesehen werden.
  23. </para>
  24. <note>
  25. <title>Authentifizierung</title>
  26. <para>
  27. Die Provisionierungs API unterstützt keine Authentifizierung über AuthSub und anonymer Zugriff ist
  28. nicht gestattet. Alle HTTP Verbindungen müssen mit Hilfe der ClientAuth Authentifizierung
  29. authentifiziert werden.
  30. </para>
  31. </note>
  32. <sect2 id="zend.gdata.gapps.domain">
  33. <title>Die aktuelle Domain setzen</title>
  34. <para>
  35. Um die Provisionierungs API zu verwenden muß die Domain, die administriert werden soll, in allen
  36. Anfrage URIs spezifiziert werden. Um die Entwicklung zu vereinfachen, wird diese Information sowohl
  37. im Gapps Service und den Abfrageklassen gespeichert um Sie zu verwenden wenn Abfragen erstellt werden.
  38. </para>
  39. <sect3 id="zend.gdata.gapps.domain.service">
  40. <title>Setzen der Domain für die Serviceklasse</title>
  41. <para>
  42. Um die Domain für die von der Serviceklasse durchgeführten Anfragen zu setzen kann entweder
  43. <code>setDomain()</code> aufgerufen oder die Domain bei der Instanzierung der Serviceklasse
  44. spezifiziert werden. Zum Beispiel:
  45. </para>
  46. <programlisting role="php"><![CDATA[
  47. $domain = "example.com";
  48. $gdata = new Zend_Gdata_Gapps($client, $domain);
  49. ]]>
  50. </programlisting>
  51. </sect3>
  52. <sect3 id="zend.gdata.gapps.domain.query">
  53. <title>Die Domain für die Abfrageklasse setzen</title>
  54. <para>
  55. Das Setzen der Domain für Anfrage die durch die Abfrageklasse durchgeführt werden ist ähnlich dem
  56. setzen für die Serviceklasse-entweder wird <code>setDomain()</code> aufgerufen, oder die Domain
  57. wird bei der Erstellung der Abfrage angegeben. Zum Beispiel:
  58. </para>
  59. <programlisting role="php"><![CDATA[
  60. $domain = "example.com";
  61. $query = new Zend_Gdata_Gapps_UserQuery($domain, $arg);
  62. ]]>
  63. </programlisting>
  64. <para>
  65. Wenn eine Serviceklassen Factorymethode verwendet wird um eine Abfrage zu erstellen, setzt
  66. die Serviceklasse die Domain der Abfrage automatisch so das Sie ihrer eigenen Domain entspricht.
  67. Als Ergebnis ist es nicht notwendig die Domain als Teil der Konstruktorargumente zu spezifizieren.
  68. </para>
  69. <programlisting role="php"><![CDATA[
  70. $domain = "example.com";
  71. $gdata = new Zend_Gdata_Gapps($client, $domain);
  72. $query = $gdata->newUserQuery($arg);
  73. ]]>
  74. </programlisting>
  75. </sect3>
  76. </sect2>
  77. <sect2 id="zend.gdata.gapps.users">
  78. <title>Interaktion mit Benutzern</title>
  79. <para>
  80. Jeder Benutzerzugang zu einer Google Apps gehosteten Domain wird als Instanz von
  81. <classname>Zend_Gdata_Gapps_UserEntry</classname> repräsentiert. Diese Klasse bietet Zugriff zu allen Zugangseigenschaften
  82. inklusive Name, Benutzername, Passwort, Zugriffsrehte und aktuellen Quoten.
  83. </para>
  84. <sect3 id="zend.gdata.gapps.users.creating">
  85. <title>Erstellen eines Benutzerzugangs</title>
  86. <para>
  87. Benutzerzugänge können durch den Aufruf der einfachen <code>createUser()</code> Methode erstellt
  88. werden:
  89. </para>
  90. <programlisting role="php"><![CDATA[
  91. $gdata->createUser('foo', 'Random', 'User', '••••••••');
  92. ]]>
  93. </programlisting>
  94. <para>
  95. Benutzer können durch das instanzieren eines UserEntry erstellt werden, indem ein Benutzername,
  96. ein Name, ein Familienname und ein Passwort angegeben werden und anschließend
  97. <code>insertUser()</code> am Serviceobjekt aufgerufen wird um den Eintrag zum Server zu laden.
  98. </para>
  99. <programlisting role="php"><![CDATA[
  100. $user = $gdata->newUserEntry();
  101. $user->login = $gdata->newLogin();
  102. $user->login->username = 'foo';
  103. $user->login->password = '••••••••';
  104. $user->name = $gdata->newName();
  105. $user->name->givenName = 'Irgendwer';
  106. $user->name->familyName = 'Benutzer';
  107. $user = $gdata->insertUser($user);
  108. ]]>
  109. </programlisting>
  110. <para>
  111. Das Passwort den Benutzers sollte normalerweise als Klartext angegeben werden. Operional kann
  112. das Passwort als SHA-1 Schlüssel angegeben werden wenn <code>login->passwordHashFunction</code>
  113. auf 'SHA-1' gesetzt ist.
  114. </para>
  115. </sect3>
  116. <sect3 id="zend.gdata.gapps.users.retrieving">
  117. <title>Einen Benutzerzugang erhalten</title>
  118. <para>
  119. Individuelle Benutzerzugänge kann man erhalten indem die einfache <code>retrieveUser()</code>
  120. Methode aufgerufen wird. Wenn der Benutzer nicht gefunden wird, wird <code>null</code>
  121. zurückgegeben.
  122. </para>
  123. <programlisting role="php"><![CDATA[
  124. $user = $gdata->retrieveUser('foo');
  125. echo 'Benutzername: ' . $user->login->userName . "\n";
  126. echo 'Name: ' . $user->login->givenName . "\n";
  127. echo 'Familienname: ' . $user->login->familyName . "\n";
  128. echo 'Unterbrochen: ' . ($user->login->suspended ? 'Ja' : 'Nein') . "\n";
  129. echo 'Administrator: ' . ($user->login->admin ? 'Ja' : 'Nein') . "\n"
  130. echo 'Muss das Passwort ändern: ' .
  131. ($user->login->changePasswordAtNextLogin ? 'Ja' : 'Nein') . "\n";
  132. echo 'Hat den Regeln zugestimmt: ' .
  133. ($user->login->agreedToTerms ? 'Ja' : 'Nein') . "\n";
  134. ]]>
  135. </programlisting>
  136. <para>
  137. Benutzer kann man auch erhalten indem eine Instanz von <classname>Zend_Gdata_Gapps_UserQuery</classname> erstellt wird,
  138. und dessen username Eigenschaft dem Benutzernamen des Benutzers entspricht den man erhalten will
  139. und <code>getUserEntry()</code> auf einem Serviceobjekt mit dieser Abfrage aufruft.
  140. </para>
  141. <programlisting role="php"><![CDATA[
  142. $query = $gdata->newUserQuery('foo');
  143. $user = $gdata->getUserEntry($query);
  144. echo 'Benutzername: ' . $user->login->userName . "\n";
  145. echo 'Name: ' . $user->login->givenName . "\n";
  146. echo 'Familien Name: ' . $user->login->familyName . "\n";
  147. echo 'Unterbrochen: ' . ($user->login->suspended ? 'Ja' : 'Nein') . "\n";
  148. echo 'Administrator: ' . ($user->login->admin ? 'Ja' : 'Nein') . "\n"
  149. echo 'Muss das Passwort ändern: ' .
  150. ($user->login->changePasswordAtNextLogin ? 'Ja' : 'Nein') . "\n";
  151. echo 'Hat den Regeln zugestimmt: ' .
  152. ($user->login->agreedToTerms ? 'Ja' : 'Nein') . "\n";
  153. ]]>
  154. </programlisting>
  155. <para>
  156. Wenn der spezifizierte Benutzer nicht gefunden werden kann wird eine ServiceException mit einem
  157. Fehlercode von <classname>Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST</classname> geworfen. ServiceExceptions werden
  158. in <xref linkend="zend.gdata.gapps.exceptions" /> behandelt.
  159. </para>
  160. </sect3>
  161. <sect3 id="zend.gdata.gapps.users.retrievingAll">
  162. <title>Alle Benutzer in einer Domain erhalten</title>
  163. <para>
  164. Um alle Benutzer in einer Domäne zu erhalten kann die einfache <code>retrieveAllUsers()</code>
  165. Methode aufgerufen werden.
  166. </para>
  167. <programlisting role="php"><![CDATA[
  168. $feed = $gdata->retrieveAllUsers();
  169. foreach ($feed as $user) {
  170. echo " * " . $user->login->username . ' (' . $user->name->givenName .
  171. ' ' . $user->name->familyName . ")\n";
  172. }
  173. ]]>
  174. </programlisting>
  175. <para>
  176. Das wird ein <classname>Zend_Gdata_Gapps_UserFeed</classname> Objekt erstellen welches jeden Benutzer dieser Domain
  177. enthält.
  178. </para>
  179. <para>
  180. Alternativ kann <code>getUserFeed()</code> ohne Optionen aufgerufen werden. Es ist zu beachten
  181. das dieser Feed bei größeren Domains durch den Server in Seiten ausgegeben werden kann. Über
  182. weitere Informationen der Ausgabe in Seiten siehe
  183. <xref linkend="zend.gdata.introduction.paging" />.
  184. </para>
  185. <programlisting role="php"><![CDATA[
  186. $feed = $gdata->getUserFeed();
  187. foreach ($feed as $user) {
  188. echo " * " . $user->login->username . ' (' . $user->name->givenName .
  189. ' ' . $user->name->familyName . ")\n";
  190. }
  191. ]]>
  192. </programlisting>
  193. </sect3>
  194. <sect3 id="zend.gdata.gapps.users.updating">
  195. <title>Einen Benutzerzugang aktualisieren</title>
  196. <para>
  197. Der einfachste Weg um einen Benutzerzugang zu aktualisieren ist es den Benutzer wie in der
  198. vorherigen Sektion beschrieben zu empfangen, jegliche gewünschte Änderungen durchzuführen und
  199. anschließend <code>save()</code> auf diesem Benutzer aufzurufen. Jede gemachte Änderung wird
  200. an den Server weitergegeben.
  201. </para>
  202. <programlisting role="php"><![CDATA[
  203. $user = $gdata->retrieveUser('foo');
  204. $user->name->givenName = 'Foo';
  205. $user->name->familyName = 'Bar';
  206. $user = $user->save();
  207. ]]>
  208. </programlisting>
  209. <sect4 id="zend.gdata.gapps.users.updating.resettingPassword">
  210. <title>Ein Benutzerpasswort resetieren</title>
  211. <para>
  212. Ein Benutzerpasswort kann zu einem neuen Wert resetiert werden indem die
  213. <code>login->password</code> Eigenschaft aktualisiert wird.
  214. </para>
  215. <programlisting role="php"><![CDATA[
  216. $user = $gdata->retrieveUser('foo');
  217. $user->login->password = '••••••••';
  218. $user = $user->save();
  219. ]]>
  220. </programlisting>
  221. <para>
  222. Es ist zu beachten das es nicht möglich ist ein Passwort auf diesem Weg wiederherzustellen da
  223. gespeicherte Passwörter aus Sicherheitsgründern nicht über die Provisionierungs API
  224. verfügbar gemacht werden.
  225. </para>
  226. </sect4>
  227. <sect4 id="zend.gdata.gapps.users.updating.forcingPasswordChange">
  228. <title>Einen Benutzer zwingen sein Passwort zu ändern</title>
  229. <para>
  230. Ein Benutzer kann dazu gezwungen werden sein Passwort bei seinem nächsten Login zu ändern,
  231. indem die <code>login->changePasswordAtNextLogin</code> Eigenschaft auf <code>true</code>
  232. gesetzt wird.
  233. </para>
  234. <programlisting role="php"><![CDATA[
  235. $user = $gdata->retrieveUser('foo');
  236. $user->login->changePasswordAtNextLogin = true;
  237. $user = $user->save();
  238. ]]>
  239. </programlisting>
  240. <para>
  241. Genauso kann das rückgängig gemacht werden indem die
  242. <code>login->changePasswordAtNextLogin</code> Eigenschaft auf <code>false</code> gesetzt wird.
  243. </para>
  244. </sect4>
  245. <sect4 id="zend.gdata.gapps.users.updating.suspendingAccount">
  246. <title>Einen Benutzerzugang unterbrechen</title>
  247. <para>
  248. Benutzer können daran gehindert werden sich anzumelden ohne das Ihr Benutzerzugang
  249. gelöscht wird indem Ihr Benutzerzugang <emphasis>unterbrochen</emphasis> wird. Zugänge
  250. können unterbrochen oder wiederhergestellt werden indem die einfachen
  251. <code>suspendUser()</code> und <code>restoreUser()</code> Methoden verwendet werden:
  252. </para>
  253. <programlisting role="php"><![CDATA[
  254. $gdata->suspendUser('foo');
  255. $gdata->restoreUser('foo');
  256. ]]>
  257. </programlisting>
  258. <para>
  259. Alternativ kann die Eigenschaft <code>login->suspended</code> des Benutzerzugangs auf
  260. <code>true</code> gesetzt werden.
  261. </para>
  262. <programlisting role="php"><![CDATA[
  263. $user = $gdata->retrieveUser('foo');
  264. $user->login->suspended = true;
  265. $user = $user->save();
  266. ]]>
  267. </programlisting>
  268. <para>
  269. Um den Benutzerzugang wiederherzustellen muß die <code>login->suspended</code> Eigenschaft
  270. auf <code>false</code> gesetzt werden.
  271. </para>
  272. </sect4>
  273. <sect4 id="zend.gdata.gapps.users.updating.grantingAdminRights">
  274. <title>Administrative Rechte vergeben</title>
  275. <para>
  276. Benutzern kann die Möglichkeit gegeben werden die Domain zu verwalten durch das setzen
  277. Ihrer <code>login->admin</code> Eigenschaft auf <code>true</code>.
  278. </para>
  279. <programlisting role="php"><![CDATA[
  280. $user = $gdata->retrieveUser('foo');
  281. $user->login->admin = true;
  282. $user = $user->save();
  283. ]]>
  284. </programlisting>
  285. <para>
  286. Und wie erwartet, entfernt das Setzen der Eigenschaft <code>login->admin</code>, des
  287. Benutzers auf <code>false</code>, dessen administrative Rechte.
  288. </para>
  289. </sect4>
  290. </sect3>
  291. <sect3 id="zend.gdata.gapps.users.deleting">
  292. <title>Löschen eines Benutzerzugangs</title>
  293. <para>
  294. Einen Benutzerzugang zu löschen zu dem man bereits ein UserEntry hat, ist so einfach wie der
  295. Aufruf von <code>delete()</code> auf diesem Eintrag.
  296. </para>
  297. <programlisting role="php"><![CDATA[
  298. $user = $gdata->retrieveUser('foo');
  299. $user->delete();
  300. ]]>
  301. </programlisting>
  302. <para>
  303. Wenn man keinen Zugriff auf ein UserEntry Objekt für einen Zugang hat, kann die einfache
  304. <code>deleteUser()</code> Methode verwendet werden.
  305. </para>
  306. <programlisting role="php"><![CDATA[
  307. $gdata->deleteUser('foo');
  308. ]]>
  309. </programlisting>
  310. </sect3>
  311. </sect2>
  312. <sect2 id="zend.gdata.gapps.nicknames">
  313. <title>Mit Spitznamen interagieren</title>
  314. <para>
  315. Spitznamen arbeiten als Email Aliase für bestehende Benutzer. Jeder Spitzname enthält genau zwei
  316. Schlüsseleigenschaften: Seinen Namen und seinen Eigentümer. Jede Email die zu einem Spitznamen
  317. adressiert wurde wird zu dem Benutzer weitergeleitet der diesen Spitznamen besitzt.
  318. </para>
  319. <para>
  320. Spitznamen werden repräsentiert als Instanz von <classname>Zend_Gdata_Gapps_NicknameEntry</classname>.
  321. </para>
  322. <sect3 id="zend.gdata.gapps.nicknames.creating">
  323. <title>Erstellen eines Spitznamens</title>
  324. <para>
  325. Spitznamen können durch den Aufruf der einfachen <code>createNickname()</code> Methode
  326. erstellt werden:
  327. </para>
  328. <programlisting role="php"><![CDATA[
  329. $gdata->createNickname('foo', 'bar');
  330. ]]>
  331. </programlisting>
  332. <para>
  333. Spitznamen können auch durch das instanzieren eines NichnameEntry erstellt werden, wobei der
  334. Spitzname mit einem Namen und einem Eigentümer ausgestattet wird, und dann
  335. <code>insertNickname()</code> auf einem Service Objekt aufgerufen wird, um den Eintrag zu einem
  336. Server hochzuladen.
  337. </para>
  338. <programlisting role="php"><![CDATA[
  339. $nickname = $gdata->newNicknameEntry();
  340. $nickname->login = $gdata->newLogin('foo');
  341. $nickname->nickname = $gdata->newNickname('bar');
  342. $nickname = $gdata->insertNickname($nickname);
  343. ]]>
  344. </programlisting>
  345. </sect3>
  346. <sect3 id="zend.gdata.gapps.nicknames.retrieving">
  347. <title>Einen Spitznamen empfangen</title>
  348. <para>
  349. Spitznamen können durch den Aufruf der bequemen <code>retrieveNickname()</code> Methode
  350. empfangen werden. Sie gibt <code>null</code> zurück wenn der Benutzer nicht gefunden wurde.
  351. </para>
  352. <programlisting role="php"><![CDATA[
  353. $nickname = $gdata->retrieveNickname('bar');
  354. echo 'Spitzname: ' . $nickname->nickname->name . "\n";
  355. echo 'Eigentümer: ' . $nickname->login->username . "\n";
  356. ]]>
  357. </programlisting>
  358. <para>
  359. Individuelle Spitznamen können durch Erstellung einer <classname>Zend_Gdata_Gapps_NicknameQuery</classname> Instanz
  360. erhalten werden, indem dessen nickname Eigenschaft dem Spitznamen gleichgesetzt wird der
  361. empfangen werden soll, und <code>getNicknameEntry()</code> auf einem Server Objekt mit dieser
  362. Abfrage aufgerufen wird.
  363. </para>
  364. <programlisting role="php"><![CDATA[
  365. $query = $gdata->newNicknameQuery('bar');
  366. $nickname = $gdata->getNicknameEntry($query);
  367. echo 'Spitzname: ' . $nickname->nickname->name . "\n";
  368. echo 'Eigentümer: ' . $nickname->login->username . "\n";
  369. ]]>
  370. </programlisting>
  371. <para>
  372. Genau wie bei den Benutzern wird eine ServiceException geworfen wenn kein entsprechender
  373. Spitzname gefunden wurde und ein Fehlercode von <classname>Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST</classname>
  374. zurückgegeben. Auch das wird in <xref linkend="zend.gdata.gapps.exceptions" /> beschrieben.
  375. </para>
  376. </sect3>
  377. <sect3 id="zend.gdata.gapps.nicknames.retrievingUser">
  378. <title>Alle Spitznamen eines Benutzers erhalten</title>
  379. <para>
  380. Um alle Spitznamen zu erhalten die einem angegebenen Benutzer assoziiert sind, kann die
  381. bequeme <code>retrieveNicknames()</code> Methode aufgerufen werden.
  382. </para>
  383. <programlisting role="php"><![CDATA[
  384. $feed = $gdata->retrieveNicknames('foo');
  385. foreach ($feed as $nickname) {
  386. echo ' * ' . $nickname->nickname->name . "\n";
  387. }
  388. ]]>
  389. </programlisting>
  390. <para>
  391. Das erzeugt ein <classname>Zend_Gdata_Gapps_NicknameFeed</classname> Objekt welches jeden mit dem spezifizierten
  392. Benutzer assoziierten Spitznamen enthält.
  393. </para>
  394. <para>
  395. Alternativ setzt das Erstellen einer neuen <classname>Zend_Gdata_Gapps_NicknameQuery</classname> dessen username
  396. Eigenschaft auf den gewünschten Benutzer, und überträgt die Abfrage durch den Aufruf von
  397. <code>getNicknameFeed()</code> auf dem Service Objekt.
  398. </para>
  399. <programlisting role="php"><![CDATA[
  400. $query = $gdata->newNicknameQuery();
  401. $query->setUsername('foo');
  402. $feed = $gdata->getNicknameFeed($query);
  403. foreach ($feed as $nickname) {
  404. echo ' * ' . $nickname->nickname->name . "\n";
  405. }
  406. ]]>
  407. </programlisting>
  408. </sect3>
  409. <sect3 id="zend.gdata.gapps.nicknames.retrievingAll">
  410. <title>Empfangen aller Spitznamen in einer Domain</title>
  411. <para>
  412. Um alle Spitznamen in einerm Feed zu empfangen, muß einfach die bequeme Methode
  413. <code>retrieveAllNicknames()</code> aufgerufen werden.
  414. </para>
  415. <programlisting role="php"><![CDATA[
  416. $feed = $gdata->retrieveAllNicknames();
  417. foreach ($feed as $nickname) {
  418. echo ' * ' . $nickname->nickname->name . ' => ' .
  419. $nickname->login->username . "\n";
  420. }
  421. ]]>
  422. </programlisting>
  423. <para>
  424. Das wird ein <classname>Zend_Gdata_Gapps_NicknameFeed</classname> Objekt erstellen welches jeden Spitznamen in der
  425. Domain enthält.
  426. </para>
  427. <para>
  428. Alternativ kann <code>getNicknameFeed()</code> auf einem Service Objekt ohne Argumente aufgerufen
  429. werden.
  430. </para>
  431. <programlisting role="php"><![CDATA[
  432. $feed = $gdata->getNicknameFeed();
  433. foreach ($feed as $nickname) {
  434. echo ' * ' . $nickname->nickname->name . ' => ' .
  435. $nickname->login->username . "\n";
  436. }
  437. ]]>
  438. </programlisting>
  439. </sect3>
  440. <sect3 id="zend.gdata.gapps.nicknames.deleting">
  441. <title>Löschen eines Spitznamens</title>
  442. <para>
  443. Um einen Spitznamen zu löschen zu dem man bereits einen NicknameEntry hält muß einfach nur
  444. <code>delete()</code> auf diesem Eintrag aufgerufen werden.
  445. </para>
  446. <programlisting role="php"><![CDATA[
  447. $nickname = $gdata->retrieveNickname('bar');
  448. $nickname->delete();
  449. ]]>
  450. </programlisting>
  451. <para>
  452. Für Spitznamen zu denen man keinen NicknameEntry hält, kann die bequeme
  453. <code>deleteNickname()</code> Methode verwendet werden.
  454. </para>
  455. <programlisting role="php"><![CDATA[
  456. $gdata->deleteNickname('bar');
  457. ]]>
  458. </programlisting>
  459. </sect3>
  460. </sect2>
  461. <sect2 id="zend.gdata.gapps.emailLists">
  462. <title>Mit Email Listen interagieren</title>
  463. <para>
  464. Email Listen erlauben verschiedenen Benutzern Emails zu empfangen die zu einer einzelnen Email
  465. Adresse adressiert sind. Benutzer müssen keine Teilnehmer dieser Domain sein um sich in eine
  466. Email Liste einzuschreiben, wen deren komplette Email Adresse (inklusive Domain) verwendet wird.
  467. </para>
  468. <para>
  469. Jede Email Liste einer Domain wird als Instanz von <classname>Zend_Gdata_Gapps_EmailListEntry</classname> repräsentiert.
  470. </para>
  471. <sect3 id="zend.gdata.gapps.emailLists.creating">
  472. <title>Erstellen einer Email Liste</title>
  473. <para>
  474. Email Listen können durch den Aufruf der bequemen <code>createEmailList()</code> Methode
  475. erstellt werden:
  476. </para>
  477. <programlisting role="php"><![CDATA[
  478. $gdata->createEmailList('friends');
  479. ]]>
  480. </programlisting>
  481. <para>
  482. Email Listen können auch durch die Instanzierung von EmailListEntry erstellt werden, indem
  483. ein Name für die Liste angegeben wird, und anschließend <code>insertEmailList()</code> auf
  484. dem Service Objekt aufgerufen wird um den Eintrag zum Server hochzuladen.
  485. </para>
  486. <programlisting role="php"><![CDATA[
  487. $list = $gdata->newEmailListEntry();
  488. $list->emailList = $gdata->newEmailList('friends');
  489. $list = $gdata->insertEmailList($list);
  490. ]]>
  491. </programlisting>
  492. </sect3>
  493. <sect3 id="zend.gdata.gapps.emailList.retrieve">
  494. <title>Empfangen aller Email Listen bei denen ein Empfänger eingeschrieben ist</title>
  495. <para>
  496. Um alle Email Lsiten zu denen ein spezieller Empfänger eingeschrieben ist zu empfangen, muß die
  497. bequeme <code>retrieveEmailLists()</code> Methode aufgerufen werden:
  498. </para>
  499. <programlisting role="php"><![CDATA[
  500. $feed = $gdata->retrieveEmailLists('baz@somewhere.com');
  501. foreach ($feed as $list) {
  502. echo ' * ' . $list->emailList->name . "\n";
  503. }
  504. ]]>
  505. </programlisting>
  506. <para>
  507. Das erstellt ein <classname>Zend_Gdata_Gapps_EmailListFeed</classname> Objekt welches jede Email Liste enthält die
  508. mit dem speziellen Empfänger assoziiert ist.
  509. </para>
  510. <para>
  511. Alternativ kann ein neues <classname>Zend_Gdata_Gapps_EmailListQuery</classname> erstellt werden, dessen recipient
  512. Eigenschaft auf die gewünschte Email Adresse gesetzt werden, und die Abfrage durch den Aufruf
  513. von <code>getEmailListFeed()</code> auf dem Service Objekt übermittelt werden.
  514. </para>
  515. <programlisting role="php"><![CDATA[
  516. $query = $gdata->newEmailListQuery();
  517. $query->setRecipient('baz@somewhere.com');
  518. $feed = $gdata->getEmailListFeed($query);
  519. foreach ($feed as $list) {
  520. echo ' * ' . $list->emailList->name . "\n";
  521. }
  522. ]]>
  523. </programlisting>
  524. </sect3>
  525. <sect3 id="zend.gdata.gapps.emailLists.retrievingAll">
  526. <title>Empfangen aller Email Listen in einer Domain</title>
  527. <para>
  528. Um alle Email Listen in einer Domain zu erhalten, muß die bequeme
  529. <code>retrieveAllEmailLists()</code> Methode aufgerufen werden.
  530. </para>
  531. <programlisting role="php"><![CDATA[
  532. $feed = $gdata->retrieveAllEmailLists();
  533. foreach ($feed as $list) {
  534. echo ' * ' . $list->emailList->name . "\n";
  535. }
  536. ]]>
  537. </programlisting>
  538. <para>
  539. Das erzeugt ein <classname>Zend_Gdata_Gapps_EmailListFeed</classname> Objekt welches jede Email Liste der Domain
  540. enthält.
  541. </para>
  542. <para>
  543. Alternativ kann <code>getEmailListFeed()</code> auf dem Service Objekt ohne Argumente aufgerufen
  544. werden.
  545. </para>
  546. <programlisting role="php"><![CDATA[
  547. $feed = $gdata->getEmailListFeed();
  548. foreach ($feed as $list) {
  549. echo ' * ' . $list->emailList->name . "\n";
  550. }
  551. ]]>
  552. </programlisting>
  553. </sect3>
  554. <sect3 id="zend.gdata.gapps.emailList.deleting">
  555. <title>Löschen einer Email Liste</title>
  556. <para>
  557. Um eine Email Liste zu löschen, muß die bequeme deleteEmailList() Methode aufgerufen werden:
  558. </para>
  559. <programlisting role="php"><![CDATA[
  560. $gdata->deleteEmailList('friends');
  561. ]]>
  562. </programlisting>
  563. </sect3>
  564. </sect2>
  565. <sect2 id="zend.gdata.gapps.emailListRecipients">
  566. <title>Mit den Empfängern von Email Listen interagieren</title>
  567. <para>
  568. Jeder Empfänger der bei einer Email Liste eingeschrieben ist, wird durch eine Instanz von
  569. <classname>Zend_Gdata_Gapps_EmailListRecipient</classname> repräsentiert. Durch diese Klasse können individuelle
  570. Empfänger hinzugefügt und von Email Listen entfernt werden.
  571. </para>
  572. <sect3 id="zend.gdata.gapps.emailListRecipients.adding">
  573. <title>Einen Empfängern zu einer Email Liste hinzufügen</title>
  574. <para>
  575. Um einen Empfänger zu einer Email Liste hinzuzufügen, muß einfach die bequeme
  576. <code>addRecipientToEmailList()</code> Methode aufgerufen werden:
  577. </para>
  578. <programlisting role="php"><![CDATA[
  579. $gdata->addRecipientToEmailList('bar@somewhere.com', 'friends');
  580. ]]>
  581. </programlisting>
  582. </sect3>
  583. <sect3 id="zend.gdata.gapps.emailListRecipients.retrieving">
  584. <title>Eine Liste von Empfängern einer Email Liste erhalten</title>
  585. <para>
  586. Die bequeme <code>retrieveAllRecipients()</code> Methode kann verwendet werden um die Liste
  587. der Empfänger einer Email Liste zu erhalten:
  588. </para>
  589. <programlisting role="php"><![CDATA[
  590. $feed = $gdata->retrieveAllRecipients('friends');
  591. foreach ($feed as $recipient) {
  592. echo ' * ' . $recipient->who->email . "\n";
  593. }
  594. ]]>
  595. </programlisting>
  596. <para>
  597. Alternativ kann ein neuer EmailListRecipientQuery erstellt werdne, dessen emailListName
  598. Eigenschaft auf die gewünschte Email Liste gesetzt werden, und
  599. <code>getEmailListRecipientFeed()</code> auf dem Service Objekt aufgerufen werden.
  600. </para>
  601. <programlisting role="php"><![CDATA[
  602. $query = $gdata->newEmailListRecipientQuery();
  603. $query->setEmailListName('friends');
  604. $feed = $gdata->getEmailListRecipientFeed($query);
  605. foreach ($feed as $recipient) {
  606. echo ' * ' . $recipient->who->email . "\n";
  607. }
  608. ]]>
  609. </programlisting>
  610. <para>
  611. Das Erstellt ein <classname>Zend_Gdata_Gapps_EmailListRecipientFeed</classname> Objekt welche jeden Empfänger für die
  612. ausgewählte Email Liste enthält.
  613. </para>
  614. </sect3>
  615. <sect3 id="zend.gdata.gapps.emailListRecipients.removing">
  616. <title>Einen Empfänger von einer Email Liste entfernen</title>
  617. <para>
  618. Um einen Empfänger von einer Email Liste zu entfernen, muß die bequeme
  619. <code>removeRecipientFromEmailList()</code> Methode aufgerufen werden:
  620. method:
  621. </para>
  622. <programlisting role="php"><![CDATA[
  623. $gdata->removeRecipientFromEmailList('baz@somewhere.com', 'friends');
  624. ]]>
  625. </programlisting>
  626. </sect3>
  627. </sect2>
  628. <sect2 id="zend.gdata.gapps.exceptions">
  629. <title>Fehler handhaben</title>
  630. <para>
  631. Zusätzlich zur Standardsuite von Ausnahmen die von <classname>Zend_Gdata</classname> geworfen werden, können Anfragen die
  632. die Provisionierungs API verwenden auch eine <classname>Zend_Gdata_Gapps_ServiceException</classname>
  633. werfen. Diese Ausnahme zeigt das ein API spezieller Fehler aufgetreten ist welche verhindert das
  634. die Anfrage fertiggestellt werden kann.
  635. </para>
  636. <para>
  637. Jede ServiceException Instanz kann einen oder mehrere Fehler Objekte enthalten. Jedes dieser
  638. Objekte enthalten einen Fehlercode, Grund und (optional) die Eingave welche die Ausnahme
  639. getriggert hat. Eine komplette Liste von bekannten Fehlercodes wird in der Zend Framework API
  640. Dokumentation unter <classname>Zend_Gdata_Gapps_Error</classname> angeboten. Zusätzlich ist die maßgebliche
  641. Fehlerliste online unter <ulink
  642. url="http://code.google.com/apis/apps/gdata_provisioning_api_v2.0_reference.html#appendix_d">Google
  643. Apps Provisioning API V2.0 Reference: Appendix D</ulink> vorhanden.
  644. </para>
  645. <para>
  646. Wärend die komplette Liste von Fehler die empfangen wurden in ServiceException als Array vorhanden
  647. sind das man durch den Aufruf von <code>getErrors()</code> erhalten kann, ist es oft bequemer
  648. zu wissen ob ein spezieller Fehler aufgetreten ist. Für diese Fälle kann das Vorhandensein eines
  649. Fehler durch den Aufruf von <code>hasError()</code> erkannt werden.
  650. </para>
  651. <para>
  652. Das folgende Beispiel demonstriert wie erkannt werden kann ob eine angefragte Ressource nicht
  653. existiert und der Fehler korrekt behandelt werden kann:
  654. </para>
  655. <programlisting role="php"><![CDATA[
  656. function retrieveUser ($username) {
  657. $query = $gdata->newUserQuery($username);
  658. try {
  659. $user = $gdata->getUserEntry($query);
  660. } catch (Zend_Gdata_Gapps_ServiceException $e) {
  661. // Den Benutzer auf null setzen wen er nicht gefunden wurde
  662. if ($e->hasError(Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST)) {
  663. $user = null;
  664. } else {
  665. throw $e;
  666. }
  667. }
  668. return $user;
  669. }
  670. ]]>
  671. </programlisting>
  672. </sect2>
  673. </sect1>