Zend_Gdata_Gapps.xml 33 KB

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