2
0

Zend_Gdata_Gapps.xml 32 KB

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