From 06f945f27840b53e57795dadbc38e76f7e11ab1c Mon Sep 17 00:00:00 2001 From: Horus3 Date: Mon, 24 Feb 2014 16:42:14 +0100 Subject: init --- .../core/en/coding-standard.coding-style.html | 843 ++ .../manual/core/en/coding-standard.html | 119 + .../en/coding-standard.naming-conventions.html | 371 + .../manual/core/en/coding-standard.overview.html | 155 + .../en/coding-standard.php-file-formatting.html | 152 + zend/documentation/manual/core/en/copyrights.html | 114 + .../core/en/doc-standard.file-formatting.html | 599 ++ .../documentation/manual/core/en/doc-standard.html | 116 + .../manual/core/en/doc-standard.overview.html | 125 + .../core/en/doc-standard.recommendations.html | 185 + .../documentation/manual/core/en/introduction.html | 111 + .../manual/core/en/introduction.installation.html | 196 + .../manual/core/en/introduction.overview.html | 138 + .../manual/core/en/learning.autoloading.html | 120 + .../manual/core/en/learning.form.decorators.html | 123 + zend/documentation/manual/core/en/learning.html | 134 + .../manual/core/en/learning.layout.html | 114 + .../manual/core/en/learning.lucene.html | 126 + .../manual/core/en/learning.multiuser.html | 117 + .../manual/core/en/learning.paginator.html | 117 + .../manual/core/en/learning.plugins.html | 114 + .../manual/core/en/learning.quickstart.html | 123 + .../manual/core/en/learning.view.placeholders.html | 117 + zend/documentation/manual/core/en/manual.html | 106 + .../documentation/manual/core/en/migration.06.html | 354 + .../documentation/manual/core/en/migration.08.html | 197 + .../documentation/manual/core/en/migration.09.html | 154 + .../documentation/manual/core/en/migration.10.html | 389 + .../manual/core/en/migration.110.html | 502 ++ .../manual/core/en/migration.112.html | 187 + .../documentation/manual/core/en/migration.15.html | 235 + .../documentation/manual/core/en/migration.16.html | 209 + .../documentation/manual/core/en/migration.17.html | 702 ++ .../documentation/manual/core/en/migration.18.html | 157 + .../documentation/manual/core/en/migration.19.html | 545 ++ zend/documentation/manual/core/en/migration.html | 129 + .../manual/core/en/performance.classloading.html | 441 + .../manual/core/en/performance.database.html | 202 + zend/documentation/manual/core/en/performance.html | 117 + .../manual/core/en/performance.introduction.html | 108 + .../manual/core/en/performance.localization.html | 222 + .../manual/core/en/performance.view.html | 454 + .../core/en/project-structure.filesystem.html | 129 + .../manual/core/en/project-structure.html | 119 + .../manual/core/en/project-structure.overview.html | 126 + .../manual/core/en/project-structure.project.html | 302 + .../manual/core/en/project-structure.rewrite.html | 215 + zend/documentation/manual/core/en/reference.html | 332 + .../documentation/manual/core/en/requirements.html | 110 + .../manual/core/en/requirements.introduction.html | 9066 ++++++++++++++++++++ zend/documentation/manual/core/en/zend.acl.html | 177 + zend/documentation/manual/core/en/zend.amf.html | 174 + .../manual/core/en/zend.application.html | 186 + zend/documentation/manual/core/en/zend.auth.html | 186 + .../documentation/manual/core/en/zend.barcode.html | 180 + zend/documentation/manual/core/en/zend.cache.html | 183 + .../documentation/manual/core/en/zend.captcha.html | 177 + zend/documentation/manual/core/en/zend.cloud.html | 184 + .../manual/core/en/zend.codegenerator.html | 177 + zend/documentation/manual/core/en/zend.config.html | 186 + .../manual/core/en/zend.config.writer.html | 171 + .../manual/core/en/zend.console.getopt.html | 180 + .../manual/core/en/zend.controller.html | 204 + .../manual/core/en/zend.currency.html | 198 + zend/documentation/manual/core/en/zend.date.html | 189 + zend/documentation/manual/core/en/zend.db.html | 195 + zend/documentation/manual/core/en/zend.debug.html | 171 + zend/documentation/manual/core/en/zend.dojo.html | 183 + zend/documentation/manual/core/en/zend.dom.html | 174 + .../manual/core/en/zend.event-manager.html | 171 + .../manual/core/en/zend.exception.html | 177 + zend/documentation/manual/core/en/zend.feed.html | 201 + zend/documentation/manual/core/en/zend.file.html | 177 + zend/documentation/manual/core/en/zend.filter.html | 186 + zend/documentation/manual/core/en/zend.form.html | 195 + .../manual/core/en/zend.gdata.analytics.html | 176 + .../manual/core/en/zend.gdata.authsub.html | 253 + .../manual/core/en/zend.gdata.books.html | 600 ++ .../manual/core/en/zend.gdata.calendar.html | 956 +++ .../manual/core/en/zend.gdata.clientlogin.html | 218 + .../manual/core/en/zend.gdata.docs.html | 266 + .../manual/core/en/zend.gdata.exception.html | 206 + .../manual/core/en/zend.gdata.gapps.html | 1287 +++ zend/documentation/manual/core/en/zend.gdata.html | 195 + .../manual/core/en/zend.gdata.photos.html | 959 +++ .../manual/core/en/zend.gdata.spreadsheets.html | 480 ++ .../manual/core/en/zend.gdata.youtube.html | 758 ++ zend/documentation/manual/core/en/zend.http.html | 207 + .../manual/core/en/zend.infocard.html | 171 + zend/documentation/manual/core/en/zend.json.html | 183 + zend/documentation/manual/core/en/zend.layout.html | 180 + zend/documentation/manual/core/en/zend.ldap.html | 189 + zend/documentation/manual/core/en/zend.loader.html | 195 + zend/documentation/manual/core/en/zend.locale.html | 183 + zend/documentation/manual/core/en/zend.log.html | 183 + zend/documentation/manual/core/en/zend.mail.html | 210 + zend/documentation/manual/core/en/zend.markup.html | 180 + .../documentation/manual/core/en/zend.measure.html | 183 + zend/documentation/manual/core/en/zend.memory.html | 177 + zend/documentation/manual/core/en/zend.mime.html | 177 + .../manual/core/en/zend.mobile.push.html | 180 + .../manual/core/en/zend.navigation.html | 177 + zend/documentation/manual/core/en/zend.oauth.html | 171 + zend/documentation/manual/core/en/zend.openid.html | 177 + .../manual/core/en/zend.paginator.html | 180 + zend/documentation/manual/core/en/zend.pdf.html | 192 + .../manual/core/en/zend.progressbar.html | 171 + zend/documentation/manual/core/en/zend.queue.html | 186 + .../manual/core/en/zend.reflection.html | 177 + .../manual/core/en/zend.registry.html | 171 + zend/documentation/manual/core/en/zend.rest.html | 177 + .../manual/core/en/zend.search.lucene.html | 198 + .../manual/core/en/zend.serializer.html | 175 + zend/documentation/manual/core/en/zend.server.html | 174 + .../documentation/manual/core/en/zend.service.html | 291 + .../documentation/manual/core/en/zend.session.html | 183 + zend/documentation/manual/core/en/zend.soap.html | 180 + zend/documentation/manual/core/en/zend.tag.html | 174 + zend/documentation/manual/core/en/zend.test.html | 177 + zend/documentation/manual/core/en/zend.text.html | 174 + .../manual/core/en/zend.timesync.html | 174 + .../manual/core/en/zend.tool.framework.html | 186 + zend/documentation/manual/core/en/zend.tool.html | 174 + .../manual/core/en/zend.tool.project.html | 180 + .../manual/core/en/zend.translate.html | 186 + zend/documentation/manual/core/en/zend.uri.html | 171 + .../manual/core/en/zend.validate.html | 183 + .../documentation/manual/core/en/zend.version.html | 171 + zend/documentation/manual/core/en/zend.view.html | 183 + .../manual/core/en/zend.wildfire.html | 171 + zend/documentation/manual/core/en/zend.xmlrpc.html | 177 + .../manual/core/en/zendx.console.process.unix.html | 169 + .../documentation/manual/core/en/zendx.jquery.html | 171 + 133 files changed, 39573 insertions(+) create mode 100644 zend/documentation/manual/core/en/coding-standard.coding-style.html create mode 100644 zend/documentation/manual/core/en/coding-standard.html create mode 100644 zend/documentation/manual/core/en/coding-standard.naming-conventions.html create mode 100644 zend/documentation/manual/core/en/coding-standard.overview.html create mode 100644 zend/documentation/manual/core/en/coding-standard.php-file-formatting.html create mode 100644 zend/documentation/manual/core/en/copyrights.html create mode 100644 zend/documentation/manual/core/en/doc-standard.file-formatting.html create mode 100644 zend/documentation/manual/core/en/doc-standard.html create mode 100644 zend/documentation/manual/core/en/doc-standard.overview.html create mode 100644 zend/documentation/manual/core/en/doc-standard.recommendations.html create mode 100644 zend/documentation/manual/core/en/introduction.html create mode 100644 zend/documentation/manual/core/en/introduction.installation.html create mode 100644 zend/documentation/manual/core/en/introduction.overview.html create mode 100644 zend/documentation/manual/core/en/learning.autoloading.html create mode 100644 zend/documentation/manual/core/en/learning.form.decorators.html create mode 100644 zend/documentation/manual/core/en/learning.html create mode 100644 zend/documentation/manual/core/en/learning.layout.html create mode 100644 zend/documentation/manual/core/en/learning.lucene.html create mode 100644 zend/documentation/manual/core/en/learning.multiuser.html create mode 100644 zend/documentation/manual/core/en/learning.paginator.html create mode 100644 zend/documentation/manual/core/en/learning.plugins.html create mode 100644 zend/documentation/manual/core/en/learning.quickstart.html create mode 100644 zend/documentation/manual/core/en/learning.view.placeholders.html create mode 100644 zend/documentation/manual/core/en/manual.html create mode 100644 zend/documentation/manual/core/en/migration.06.html create mode 100644 zend/documentation/manual/core/en/migration.08.html create mode 100644 zend/documentation/manual/core/en/migration.09.html create mode 100644 zend/documentation/manual/core/en/migration.10.html create mode 100644 zend/documentation/manual/core/en/migration.110.html create mode 100644 zend/documentation/manual/core/en/migration.112.html create mode 100644 zend/documentation/manual/core/en/migration.15.html create mode 100644 zend/documentation/manual/core/en/migration.16.html create mode 100644 zend/documentation/manual/core/en/migration.17.html create mode 100644 zend/documentation/manual/core/en/migration.18.html create mode 100644 zend/documentation/manual/core/en/migration.19.html create mode 100644 zend/documentation/manual/core/en/migration.html create mode 100644 zend/documentation/manual/core/en/performance.classloading.html create mode 100644 zend/documentation/manual/core/en/performance.database.html create mode 100644 zend/documentation/manual/core/en/performance.html create mode 100644 zend/documentation/manual/core/en/performance.introduction.html create mode 100644 zend/documentation/manual/core/en/performance.localization.html create mode 100644 zend/documentation/manual/core/en/performance.view.html create mode 100644 zend/documentation/manual/core/en/project-structure.filesystem.html create mode 100644 zend/documentation/manual/core/en/project-structure.html create mode 100644 zend/documentation/manual/core/en/project-structure.overview.html create mode 100644 zend/documentation/manual/core/en/project-structure.project.html create mode 100644 zend/documentation/manual/core/en/project-structure.rewrite.html create mode 100644 zend/documentation/manual/core/en/reference.html create mode 100644 zend/documentation/manual/core/en/requirements.html create mode 100644 zend/documentation/manual/core/en/requirements.introduction.html create mode 100644 zend/documentation/manual/core/en/zend.acl.html create mode 100644 zend/documentation/manual/core/en/zend.amf.html create mode 100644 zend/documentation/manual/core/en/zend.application.html create mode 100644 zend/documentation/manual/core/en/zend.auth.html create mode 100644 zend/documentation/manual/core/en/zend.barcode.html create mode 100644 zend/documentation/manual/core/en/zend.cache.html create mode 100644 zend/documentation/manual/core/en/zend.captcha.html create mode 100644 zend/documentation/manual/core/en/zend.cloud.html create mode 100644 zend/documentation/manual/core/en/zend.codegenerator.html create mode 100644 zend/documentation/manual/core/en/zend.config.html create mode 100644 zend/documentation/manual/core/en/zend.config.writer.html create mode 100644 zend/documentation/manual/core/en/zend.console.getopt.html create mode 100644 zend/documentation/manual/core/en/zend.controller.html create mode 100644 zend/documentation/manual/core/en/zend.currency.html create mode 100644 zend/documentation/manual/core/en/zend.date.html create mode 100644 zend/documentation/manual/core/en/zend.db.html create mode 100644 zend/documentation/manual/core/en/zend.debug.html create mode 100644 zend/documentation/manual/core/en/zend.dojo.html create mode 100644 zend/documentation/manual/core/en/zend.dom.html create mode 100644 zend/documentation/manual/core/en/zend.event-manager.html create mode 100644 zend/documentation/manual/core/en/zend.exception.html create mode 100644 zend/documentation/manual/core/en/zend.feed.html create mode 100644 zend/documentation/manual/core/en/zend.file.html create mode 100644 zend/documentation/manual/core/en/zend.filter.html create mode 100644 zend/documentation/manual/core/en/zend.form.html create mode 100644 zend/documentation/manual/core/en/zend.gdata.analytics.html create mode 100644 zend/documentation/manual/core/en/zend.gdata.authsub.html create mode 100644 zend/documentation/manual/core/en/zend.gdata.books.html create mode 100644 zend/documentation/manual/core/en/zend.gdata.calendar.html create mode 100644 zend/documentation/manual/core/en/zend.gdata.clientlogin.html create mode 100644 zend/documentation/manual/core/en/zend.gdata.docs.html create mode 100644 zend/documentation/manual/core/en/zend.gdata.exception.html create mode 100644 zend/documentation/manual/core/en/zend.gdata.gapps.html create mode 100644 zend/documentation/manual/core/en/zend.gdata.html create mode 100644 zend/documentation/manual/core/en/zend.gdata.photos.html create mode 100644 zend/documentation/manual/core/en/zend.gdata.spreadsheets.html create mode 100644 zend/documentation/manual/core/en/zend.gdata.youtube.html create mode 100644 zend/documentation/manual/core/en/zend.http.html create mode 100644 zend/documentation/manual/core/en/zend.infocard.html create mode 100644 zend/documentation/manual/core/en/zend.json.html create mode 100644 zend/documentation/manual/core/en/zend.layout.html create mode 100644 zend/documentation/manual/core/en/zend.ldap.html create mode 100644 zend/documentation/manual/core/en/zend.loader.html create mode 100644 zend/documentation/manual/core/en/zend.locale.html create mode 100644 zend/documentation/manual/core/en/zend.log.html create mode 100644 zend/documentation/manual/core/en/zend.mail.html create mode 100644 zend/documentation/manual/core/en/zend.markup.html create mode 100644 zend/documentation/manual/core/en/zend.measure.html create mode 100644 zend/documentation/manual/core/en/zend.memory.html create mode 100644 zend/documentation/manual/core/en/zend.mime.html create mode 100644 zend/documentation/manual/core/en/zend.mobile.push.html create mode 100644 zend/documentation/manual/core/en/zend.navigation.html create mode 100644 zend/documentation/manual/core/en/zend.oauth.html create mode 100644 zend/documentation/manual/core/en/zend.openid.html create mode 100644 zend/documentation/manual/core/en/zend.paginator.html create mode 100644 zend/documentation/manual/core/en/zend.pdf.html create mode 100644 zend/documentation/manual/core/en/zend.progressbar.html create mode 100644 zend/documentation/manual/core/en/zend.queue.html create mode 100644 zend/documentation/manual/core/en/zend.reflection.html create mode 100644 zend/documentation/manual/core/en/zend.registry.html create mode 100644 zend/documentation/manual/core/en/zend.rest.html create mode 100644 zend/documentation/manual/core/en/zend.search.lucene.html create mode 100644 zend/documentation/manual/core/en/zend.serializer.html create mode 100644 zend/documentation/manual/core/en/zend.server.html create mode 100644 zend/documentation/manual/core/en/zend.service.html create mode 100644 zend/documentation/manual/core/en/zend.session.html create mode 100644 zend/documentation/manual/core/en/zend.soap.html create mode 100644 zend/documentation/manual/core/en/zend.tag.html create mode 100644 zend/documentation/manual/core/en/zend.test.html create mode 100644 zend/documentation/manual/core/en/zend.text.html create mode 100644 zend/documentation/manual/core/en/zend.timesync.html create mode 100644 zend/documentation/manual/core/en/zend.tool.framework.html create mode 100644 zend/documentation/manual/core/en/zend.tool.html create mode 100644 zend/documentation/manual/core/en/zend.tool.project.html create mode 100644 zend/documentation/manual/core/en/zend.translate.html create mode 100644 zend/documentation/manual/core/en/zend.uri.html create mode 100644 zend/documentation/manual/core/en/zend.validate.html create mode 100644 zend/documentation/manual/core/en/zend.version.html create mode 100644 zend/documentation/manual/core/en/zend.view.html create mode 100644 zend/documentation/manual/core/en/zend.wildfire.html create mode 100644 zend/documentation/manual/core/en/zend.xmlrpc.html create mode 100644 zend/documentation/manual/core/en/zendx.console.process.unix.html create mode 100644 zend/documentation/manual/core/en/zendx.jquery.html (limited to 'zend/documentation/manual') diff --git a/zend/documentation/manual/core/en/coding-standard.coding-style.html b/zend/documentation/manual/core/en/coding-standard.coding-style.html new file mode 100644 index 0000000..bbf6cca --- /dev/null +++ b/zend/documentation/manual/core/en/coding-standard.coding-style.html @@ -0,0 +1,843 @@ + + + + + Coding Style - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Naming Conventions + + + + +
+
+

Coding Style

+ + +

PHP Code Demarcation

+ + +

+ PHP code must always be delimited by the full-form, standard + PHP tags: +

+ +
  1. <?php
  2. +
  3.  
  4. +
  5. ?>
+ + +

+ Short tags are never allowed. For files containing only PHP + code, the closing tag must always be omitted (See General standards). +

+
+ +

Strings

+ + +

String Literals

+ + +

+ When a string is literal (contains no variable substitutions), the apostrophe or + "single quote" should always be used to demarcate the string: +

+ +
  1. $a = 'Example String';
+ +
+ +

String Literals Containing Apostrophes

+ + +

+ When a literal string itself contains apostrophes, it is permitted to demarcate + the string with quotation marks or "double quotes". This is especially useful + for SQL statements: +

+ +
  1. $sql = "SELECT `id`, `name` from `people` "
  2. +
  3.      . "WHERE `name`='Fred' OR `name`='Susan'";
+ + +

+ This syntax is preferred over escaping apostrophes as it is much easier to read. +

+
+ +

Variable Substitution

+ + +

+ Variable substitution is permitted using either of these forms: +

+ +
  1. $greeting = "Hello $name, welcome back!";
  2. +
  3.  
  4. +
  5. $greeting = "Hello {$name}, welcome back!";
+ + +

+ For consistency, this form is not permitted: +

+ +
  1. $greeting = "Hello ${name}, welcome back!";
+ +
+ +

String Concatenation

+ + +

+ Strings must be concatenated using the "." operator. A space must always + be added before and after the "." operator to improve readability: +

+ +
  1. $company = 'Zend' . ' ' . 'Technologies';
+ + +

+ When concatenating strings with the "." operator, it is encouraged to + break the statement into multiple lines to improve readability. In these + cases, each successive line should be padded with white space such that the + "."; operator is aligned under the "=" operator: +

+ +
  1. $sql = "SELECT `id`, `name` FROM `people` "
  2. +
  3.      . "WHERE `name` = 'Susan' "
  4. +
  5.      . "ORDER BY `name` ASC ";
+ +
+
+ +

Arrays

+ + +

Numerically Indexed Arrays

+ + +

Negative numbers are not permitted as indices.

+ +

+ An indexed array may start with any non-negative number, however + all base indices besides 0 are discouraged. +

+ +

+ When declaring indexed arrays with the Array function, a trailing + space must be added after each comma delimiter to improve readability: +

+ +
  1. $sampleArray = array(1, 2, 3, 'Zend', 'Studio');
+ + +

+ It is permitted to declare multi-line indexed arrays using the "array" + construct. In this case, each successive line must be padded with spaces such + that beginning of each line is aligned: +

+ +
  1. $sampleArray = array(1, 2, 3, 'Zend', 'Studio',
  2. +
  3.                      $a, $b, $c,
  4. +
  5.                      56.44, $d, 500);
+ + +

+ Alternately, the initial array item may begin on the following line. If so, + it should be padded at one indentation level greater than the line containing + the array declaration, and all successive lines should have the same + indentation; the closing paren should be on a line by itself at the same + indentation level as the line containing the array declaration: +

+ +
  1. $sampleArray = array(
  2. +
  3.     1, 2, 3, 'Zend', 'Studio',
  4. +
  5.     $a, $b, $c,
  6. +
  7.     56.44, $d, 500,
  8. +
  9. );
+ + +

+ When using this latter declaration, we encourage using a trailing comma for + the last item in the array; this minimizes the impact of adding new items on + successive lines, and helps to ensure no parse errors occur due to a missing + comma. +

+
+ +

Associative Arrays

+ + +

+ When declaring associative arrays with the Array construct, + breaking the statement into multiple lines is encouraged. In this case, each + successive line must be padded with white space such that both the keys and the + values are aligned: +

+ +
  1. $sampleArray = array('firstKey'  => 'firstValue',
  2. +
  3.                      'secondKey' => 'secondValue');
+ + +

+ Alternately, the initial array item may begin on the following line. If so, + it should be padded at one indentation level greater than the line containing + the array declaration, and all successive lines should have the same + indentation; the closing paren should be on a line by itself at the same + indentation level as the line containing the array declaration. For + readability, the various "=>" assignment operators should be padded such that + they align. +

+ +
  1. $sampleArray = array(
  2. +
  3.     'firstKey'  => 'firstValue',
  4. +
  5.     'secondKey' => 'secondValue',
  6. +
  7. );
+ + +

+ When using this latter declaration, we encourage using a trailing comma for + the last item in the array; this minimizes the impact of adding new items on + successive lines, and helps to ensure no parse errors occur due to a missing + comma. +

+
+
+ +

Classes

+ + +

Class Declaration

+ + +

+ Classes must be named according to Zend Framework's naming conventions. +

+ +

+ The brace should always be written on the line underneath the class name. +

+ +

+ Every class must have a documentation block that conforms to the PHPDocumentor + standard. +

+ +

+ All code in a class must be indented with four spaces. +

+ +

+ Only one class is permitted in each PHP file. +

+ +

+ Placing additional code in class files is permitted but discouraged. + In such files, two blank lines must separate the class from any additional + PHP code in the class file. +

+ +

+ The following is an example of an acceptable class declaration: +

+ +
  1. /**
  2. +
  3. * Documentation Block Here
  4. +
  5. */
  6. +
  7. class SampleClass
  8. +
  9. {
  10. +
  11.     // all contents of class
  12. +
  13.     // must be indented four spaces
  14. +
  15. }
+ + +

+ Classes that extend other classes or which implement interfaces should + declare their dependencies on the same line when possible. +

+ +
  1. class SampleClass extends FooAbstract implements BarInterface
  2. +
  3. {
  4. +
  5. }
+ + +

+ If as a result of such declarations, the line length exceeds the maximum line + length, break the line before the "extends" and/or "implements" + keywords, and pad those lines by one indentation level. +

+ +
  1. class SampleClass
  2. +
  3.     extends FooAbstract
  4. +
  5.     implements BarInterface
  6. +
  7. {
  8. +
  9. }
+ + +

+ If the class implements multiple interfaces and the declaration exceeds the + maximum line length, break after each comma separating the interfaces, and + indent the interface names such that they align. +

+ +
  1. class SampleClass
  2. +
  3.     implements BarInterface,
  4. +
  5.                BazInterface
  6. +
  7. {
  8. +
  9. }
+ +
+ +

Class Member Variables

+ + +

+ Member variables must be named according to Zend Framework's variable naming + conventions. +

+ +

+ Any variables declared in a class must be listed at the top of the class, above + the declaration of any methods. +

+ +

+ The var construct is not permitted. Member variables always + declare their visibility by using one of the private, + protected, or public modifiers. Giving + access to member variables directly by declaring them as public is permitted but + discouraged in favor of accessor methods (set & get). +

+
+
+ +

Functions and Methods

+ + +

Function and Method Declaration

+ + +

+ Functions must be named according to Zend Framework's function naming + conventions. +

+ +

+ Methods inside classes must always declare their visibility by using + one of the private, protected, + or public modifiers. +

+ +

+ As with classes, the brace should always be written on the line underneath the + function name. Space between the function name and the opening parenthesis for + the arguments is not permitted. +

+ +

+ Functions in the global scope are strongly discouraged. +

+ +

+ The following is an example of an acceptable function declaration in a class: +

+ +
  1. /**
  2. +
  3. * Documentation Block Here
  4. +
  5. */
  6. +
  7. class Foo
  8. +
  9. {
  10. +
  11.     /**
  12. +
  13.      * Documentation Block Here
  14. +
  15.      */
  16. +
  17.     public function bar()
  18. +
  19.     {
  20. +
  21.         // all contents of function
  22. +
  23.         // must be indented four spaces
  24. +
  25.     }
  26. +
  27. }
+ + +

+ In cases where the argument list exceeds the maximum line + length, you may introduce line breaks. Additional arguments to the + function or method must be indented one additional level beyond the function + or method declaration. A line break should then occur before the closing + argument paren, which should then be placed on the same line as the opening + brace of the function or method with one space separating the two, and at the + same indentation level as the function or method declaration. The following is + an example of one such situation: +

+ +
  1. /**
  2. +
  3. * Documentation Block Here
  4. +
  5. */
  6. +
  7. class Foo
  8. +
  9. {
  10. +
  11.     /**
  12. +
  13.      * Documentation Block Here
  14. +
  15.      */
  16. +
  17.     public function bar($arg1, $arg2, $arg3,
  18. +
  19.         $arg4, $arg5, $arg6
  20. +
  21.     ) {
  22. +
  23.         // all contents of function
  24. +
  25.         // must be indented four spaces
  26. +
  27.     }
  28. +
  29. }
+ + +

Note: + + Pass-by-reference is the only parameter passing mechanism permitted in a + method declaration. +
+

+ +
  1. /**
  2. +
  3. * Documentation Block Here
  4. +
  5. */
  6. +
  7. class Foo
  8. +
  9. {
  10. +
  11.     /**
  12. +
  13.      * Documentation Block Here
  14. +
  15.      */
  16. +
  17.     public function bar(&$baz)
  18. +
  19.     {}
  20. +
  21. }
+ + +

+ Call-time pass-by-reference is strictly prohibited. +

+ +

+ The return value must not be enclosed in parentheses. This can hinder + readability, in additional to breaking code if a method is later changed to + return by reference. +

+ +
  1. /**
  2. +
  3. * Documentation Block Here
  4. +
  5. */
  6. +
  7. class Foo
  8. +
  9. {
  10. +
  11.     /**
  12. +
  13.      * WRONG
  14. +
  15.      */
  16. +
  17.     public function bar()
  18. +
  19.     {
  20. +
  21.         return($this->bar);
  22. +
  23.     }
  24. +
  25.  
  26. +
  27.     /**
  28. +
  29.      * RIGHT
  30. +
  31.      */
  32. +
  33.     public function bar()
  34. +
  35.     {
  36. +
  37.         return $this->bar;
  38. +
  39.     }
  40. +
  41. }
+ +
+ +

Function and Method Usage

+ + +

+ Function arguments should be separated by a single trailing space after the + comma delimiter. The following is an example of an acceptable invocation of a + function that takes three arguments: +

+ +
  1. threeArguments(1, 2, 3);
+ + +

+ Call-time pass-by-reference is strictly prohibited. See the function + declarations section for the proper way to pass function arguments by-reference. +

+ +

+ In passing arrays as arguments to a function, the function call may include the + "array" hint and may be split into multiple lines to improve readability. In + such cases, the normal guidelines for writing arrays still apply: +

+ +
  1. threeArguments(array(1, 2, 3), 2, 3);
  2. +
  3.  
  4. +
  5. threeArguments(array(1, 2, 3, 'Zend', 'Studio',
  6. +
  7.                      $a, $b, $c,
  8. +
  9.                      56.44, $d, 500), 2, 3);
  10. +
  11.  
  12. +
  13. threeArguments(array(
  14. +
  15.     1, 2, 3, 'Zend', 'Studio',
  16. +
  17.     $a, $b, $c,
  18. +
  19.     56.44, $d, 500
  20. +
  21. ), 2, 3);
+ +
+
+ +

Control Statements

+ + +

If/Else/Elseif

+ + +

+ Control statements based on the if and + elseif constructs must have a single space before the + opening parenthesis of the conditional and a single space after the closing + parenthesis. +

+ +

+ Within the conditional statements between the parentheses, operators must be + separated by spaces for readability. Inner parentheses are encouraged to improve + logical grouping for larger conditional expressions. +

+ +

+ The opening brace is written on the same line as the conditional statement. The + closing brace is always written on its own line. Any content within the braces + must be indented using four spaces. +

+ +
  1. if ($a != 2) {
  2. +
  3.     $a = 2;
  4. +
  5. }
+ + +

+ If the conditional statement causes the line length to exceed the maximum line + length and has several clauses, you may break the conditional into + multiple lines. In such a case, break the line prior to a logic operator, and + pad the line such that it aligns under the first character of the conditional + clause. The closing paren in the conditional will then be placed on a line with + the opening brace, with one space separating the two, at an indentation level + equivalent to the opening control statement. +

+ +
  1. if (($a == $b)
  2. +
  3.     && ($b == $c)
  4. +
  5.     || (Foo::CONST == $d)
  6. +
  7. ) {
  8. +
  9.     $a = $d;
  10. +
  11. }
+ + +

+ The intention of this latter declaration format is to prevent issues when + adding or removing clauses from the conditional during later revisions. +

+ +

+ For "if" statements that include "elseif" or "else", the formatting conventions + are similar to the "if" construct. The following examples demonstrate proper + formatting for "if" statements with "else" and/or "elseif" constructs: +

+ +
  1. if ($a != 2) {
  2. +
  3.     $a = 2;
  4. +
  5. } else {
  6. +
  7.     $a = 7;
  8. +
  9. }
  10. +
  11.  
  12. +
  13. if ($a != 2) {
  14. +
  15.     $a = 2;
  16. +
  17. } elseif ($a == 3) {
  18. +
  19.     $a = 4;
  20. +
  21. } else {
  22. +
  23.     $a = 7;
  24. +
  25. }
  26. +
  27.  
  28. +
  29. if (($a == $b)
  30. +
  31.     && ($b == $c)
  32. +
  33.     || (Foo::CONST == $d)
  34. +
  35. ) {
  36. +
  37.     $a = $d;
  38. +
  39. } elseif (($a != $b)
  40. +
  41.           || ($b != $c)
  42. +
  43. ) {
  44. +
  45.     $a = $c;
  46. +
  47. } else {
  48. +
  49.     $a = $b;
  50. +
  51. }
+ + +

+ PHP allows statements to be written without braces in some + circumstances. This coding standard makes no differentiation- all "if", + "elseif" or "else" statements must use braces. +

+
+ +

Switch

+ + +

+ Control statements written with the "switch" statement must have a single space + before the opening parenthesis of the conditional statement and after the + closing parenthesis. +

+ +

+ All content within the "switch" statement must be indented using four spaces. + Content under each "case" statement must be indented using an additional four + spaces. +

+ +
  1. switch ($numPeople) {
  2. +
  3.     case 1:
  4. +
  5.         break;
  6. +
  7.  
  8. +
  9.     case 2:
  10. +
  11.         break;
  12. +
  13.  
  14. +
  15.     default:
  16. +
  17.         break;
  18. +
  19. }
+ + +

+ The construct default should never be omitted from a + switch statement. +

+ +

Note: + + It is sometimes useful to write a case statement + which falls through to the next case by not including a + break or return within that + case. To distinguish these cases from bugs, any case + statement where break or return + are omitted should contain a comment indicating that the break was + intentionally omitted. +
+

+
+
+ +

Inline Documentation

+ + +

Documentation Format

+ + +

+ All documentation blocks ("docblocks") must be compatible with the phpDocumentor + format. Describing the phpDocumentor format is beyond the scope of this + document. For more information, visit: » http://phpdoc.org/ +

+ +

+ All class files must contain a "file-level" docblock at the top of each file and + a "class-level" docblock immediately above each class. Examples of such + docblocks can be found below. +

+
+ +

Files

+ + +

+ Every file that contains PHP code must have a docblock at + the top of the file that contains these phpDocumentor tags at a minimum: +

+ +
  1. /**
  2. +
  3. * Short description for file
  4. +
  5. *
  6. +
  7. * Long description for file (if any)...
  8. +
  9. *
  10. +
  11. * LICENSE: Some license information
  12. +
  13. *
  14. +
  15. * @category   Zend
  16. +
  17. * @package    Zend_Magic
  18. +
  19. * @subpackage Wand
  20. +
  21. * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
  22. +
  23. * @license    http://framework.zend.com/license   BSD License
  24. +
  25. * @version    $Id:$
  26. +
  27. * @link       http://framework.zend.com/package/PackageName
  28. +
  29. * @since      File available since Release 1.5.0
  30. +
  31. */
+ + +

+ The @category annotation must have a value of "Zend". +

+ +

+ The @package annotation must be assigned, and should be + equivalent to the component name of the class contained in the file; typically, + this will only have two segments, the "Zend" prefix, and the component name. +

+ +

+ The @subpackage annotation is optional. If provided, it + should be the subcomponent name, minus the class prefix. In the example above, + the assumption is that the class in the file is either + "Zend_Magic_Wand", or uses that classname as part of its + prefix. +

+
+ +

Classes

+ + +

+ Every class must have a docblock that contains these phpDocumentor tags at a + minimum: +

+ +
  1. /**
  2. +
  3. * Short description for class
  4. +
  5. *
  6. +
  7. * Long description for class (if any)...
  8. +
  9. *
  10. +
  11. * @category   Zend
  12. +
  13. * @package    Zend_Magic
  14. +
  15. * @subpackage Wand
  16. +
  17. * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
  18. +
  19. * @license    http://framework.zend.com/license   BSD License
  20. +
  21. * @version    Release: @package_version@
  22. +
  23. * @link       http://framework.zend.com/package/PackageName
  24. +
  25. * @since      Class available since Release 1.5.0
  26. +
  27. * @deprecated Class deprecated in Release 2.0.0
  28. +
  29. */
+ + +

+ The @category annotation must have a value of "Zend". +

+ +

+ The @package annotation must be assigned, and should be + equivalent to the component to which the class belongs; typically, this will + only have two segments, the "Zend" prefix, and the component name. +

+ +

+ The @subpackage annotation is optional. If provided, it + should be the subcomponent name, minus the class prefix. In the example above, + the assumption is that the class described is either + "Zend_Magic_Wand", or uses that classname as part of its + prefix. +

+
+ +

Functions

+ + +

+ Every function, including object methods, must have a docblock that contains at + a minimum: +

+ +
    +
  • A description of the function

  • +
  • All of the arguments

  • +
  • All of the possible return values

  • +
+ +

+ It is not necessary to use the "@access" tag because the access level is already + known from the "public", "private", or "protected" modifier used to declare the + function. +

+ +

+ If a function or method may throw an exception, use @throws for all known + exception classes: +

+ +
  1. @throws exceptionclass [description]
+ +
+
+
+
+ + + + + + + + + +
+ Naming Conventions + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/coding-standard.html b/zend/documentation/manual/core/en/coding-standard.html new file mode 100644 index 0000000..0dd3f0f --- /dev/null +++ b/zend/documentation/manual/core/en/coding-standard.html @@ -0,0 +1,119 @@ + + + + + Zend Framework Coding Standard for PHP - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Framework 0.6 + + + + +
+
+

Zend Framework Coding Standard for PHP

Table of Contents +
+ + + + + + + + + +
+
+ + + + + + + + + +
+ Zend Framework 0.6 + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/coding-standard.naming-conventions.html b/zend/documentation/manual/core/en/coding-standard.naming-conventions.html new file mode 100644 index 0000000..92c1804 --- /dev/null +++ b/zend/documentation/manual/core/en/coding-standard.naming-conventions.html @@ -0,0 +1,371 @@ + + + + + Naming Conventions - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ PHP File Formatting + + + + +
+
+

Naming Conventions

+ + +

Classes

+ + +

+ Zend Framework standardizes on a class naming convention whereby the names of the + classes directly map to the directories in which they are stored. The root level + directory of Zend Framework's standard library is the "Zend/" directory, whereas + the root level directory of Zend Framework's extras library is the "ZendX/" + directory. All Zend Framework classes are stored hierarchically under these root + directories.. +

+ +

+ Class names may only contain alphanumeric characters. Numbers are permitted + in class names but are discouraged in most cases. Underscores are only permitted in + place of the path separator; the filename "Zend/Db/Table.php" + must map to the class name "Zend_Db_Table". +

+ +

+ If a class name is comprised of more than one word, the first letter of each new + word must be capitalized. Successive capitalized letters are not allowed, e.g. + a class "Zend_PDF" is not allowed while "Zend_Pdf" is + acceptable. +

+ +

+ These conventions define a pseudo-namespace mechanism for Zend Framework. Zend + Framework will adopt the PHP namespace feature when it becomes + available and is feasible for our developers to use in their applications. +

+ +

+ See the class names in the standard and extras libraries for examples of this + classname convention. +

+ +

Note: + + Important: Code that must be deployed alongside + Zend Framework libraries but is not part of the standard or extras libraries + (e.g. application code or libraries that are not distributed by Zend) must + never start with "Zend_" or "ZendX_". +
+

+
+ +

Abstract Classes

+ + +

+ In general, abstract classes follow the same conventions as classes, + with one additional rule: abstract class names must end in the term, "Abstract", + and that term must not be preceded by an underscore. As an example, + Zend_Controller_Plugin_Abstract is considered an + invalid name, but Zend_Controller_PluginAbstract or + Zend_Controller_Plugin_PluginAbstract would be valid + names. +

+ +

Note: + + This naming convention is new with version 1.9.0 of Zend Framework. Classes + that pre-date that version may not follow this rule, but will be renamed in + the future in order to comply. +
+ + + The rationale for the change is due to namespace usage. As we look towards Zend + Framework 2.0 and usage of PHP 5.3, we will be using + namespaces. The easiest way to automate conversion to namespaces is to simply + convert underscores to the namespace separator -- but under the old naming + conventions, this leaves the classname as simply "Abstract" or "Interface" -- + both of which are reserved keywords in PHP. If we prepend the + (sub)component name to the classname, we can avoid these issues. +
+ + + To illustrate the situation, consider converting the class + Zend_Controller_Request_Abstract to use namespaces: +
+ +

  1. namespace Zend\Controller\Request;
  2. +
  3.  
  4. +
  5. abstract class Abstract
  6. +
  7. {
  8. +
  9.     // ...
  10. +
  11. }
+ + + + Clearly, this will not work. Under the new naming conventions, however, this + would become: +
+ +
  1. namespace Zend\Controller\Request;
  2. +
  3.  
  4. +
  5. abstract class RequestAbstract
  6. +
  7. {
  8. +
  9.     // ...
  10. +
  11. }
+ + + + We still retain the semantics and namespace separation, while omitting the + keyword issues; simultaneously, it better describes the abstract class. +
+

+
+ +

Interfaces

+ + +

+ In general, interfaces follow the same conventions as classes, + with one additional rule: interface names may optionally end in the term, + "Interface", but that term must not be preceded by an underscore. As an example, + Zend_Controller_Plugin_Interface is considered an + invalid name, but Zend_Controller_PluginInterface or + Zend_Controller_Plugin_PluginInterface would be valid + names. +

+ +

+ While this rule is not required, it is strongly recommended, as it provides a + good visual cue to developers as to which files contain interfaces rather than + classes. +

+ +

Note: + + This naming convention is new with version 1.9.0 of Zend Framework. Classes + that pre-date that version may not follow this rule, but will be renamed in + the future in order to comply. See the previous + section for more information on the rationale for this change. +
+

+
+ +

Filenames

+ + +

+ For all other files, only alphanumeric characters, underscores, and the dash + character ("-") are permitted. Spaces are strictly prohibited. +

+ +

+ Any file that contains PHP code should end with the extension + ".php", with the notable exception of view scripts. The + following examples show acceptable filenames for Zend Framework classes: +

+ +
  1. Zend/Db.php
  2. +
  3.  
  4. +
  5. Zend/Controller/Front.php
  6. +
  7.  
  8. +
  9. Zend/View/Helper/FormRadio.php
+ + +

+ File names must map to class names as described above. +

+
+ +

Functions and Methods

+ + +

+ Function names may only contain alphanumeric characters. Underscores are not + permitted. Numbers are permitted in function names but are discouraged in most + cases. +

+ +

+ Function names must always start with a lowercase letter. When a function name + consists of more than one word, the first letter of each new word must be + capitalized. This is commonly called "camelCase" formatting. +

+ +

+ Verbosity is generally encouraged. Function names should be as verbose as is + practical to fully describe their purpose and behavior. +

+ +

+ These are examples of acceptable names for functions: +

+ +
  1. filterInput()
  2. +
  3.  
  4. +
  5. getElementById()
  6. +
  7.  
  8. +
  9. widgetFactory()
+ + +

+ For object-oriented programming, accessors for instance or static variables should + always be prefixed with "get" or "set". In implementing design patterns, such as the + singleton or factory patterns, the name of the method should contain the pattern + name where practical to more thoroughly describe behavior. +

+ +

+ For methods on objects that are declared with the "private" or "protected" modifier, + the first character of the method name must be an underscore. This is the only + acceptable application of an underscore in a method name. Methods declared "public" + should never contain an underscore. +

+ +

+ Functions in the global scope (a.k.a "floating functions") are permitted but + discouraged in most cases. Consider wrapping these functions in a static class. +

+
+ +

Variables

+ + +

+ Variable names may only contain alphanumeric characters. Underscores are not + permitted. Numbers are permitted in variable names but are discouraged in most + cases. +

+ +

+ For instance variables that are declared with the "private" or "protected" modifier, + the first character of the variable name must be a single underscore. This is the + only acceptable application of an underscore in a variable name. Member variables + declared "public" should never start with an underscore. +

+ +

+ As with function names (see section 3.3) variable names must always start with a + lowercase letter and follow the "camelCaps" capitalization convention. +

+ +

+ Verbosity is generally encouraged. Variables should always be as verbose as + practical to describe the data that the developer intends to store in them. Terse + variable names such as "$i" and "$n" are + discouraged for all but the smallest loop contexts. If a loop contains more than + 20 lines of code, the index variables should have more descriptive names. +

+
+ +

Constants

+ + +

+ Constants may contain both alphanumeric characters and underscores. Numbers are + permitted in constant names. +

+ +

+ All letters used in a constant name must be capitalized, while all words in a + constant name must be separated by underscore characters. +

+ +

+ For example, EMBED_SUPPRESS_EMBED_EXCEPTION is permitted but + EMBED_SUPPRESSEMBEDEXCEPTION is not. +

+ +

+ Constants must be defined as class members with the "const" modifier. Defining + constants in the global scope with the "define" function is permitted but strongly + discouraged. +

+
+
+
+ + + + + + + + + +
+ PHP File Formatting + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/coding-standard.overview.html b/zend/documentation/manual/core/en/coding-standard.overview.html new file mode 100644 index 0000000..346973c --- /dev/null +++ b/zend/documentation/manual/core/en/coding-standard.overview.html @@ -0,0 +1,155 @@ + + + + + Overview - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Framework Coding Standard for PHP + + + + +
+
+

Overview

+ + +

Scope

+ + +

+ This document provides guidelines for code formatting and documentation to + individuals and teams contributing to Zend Framework. Many developers using Zend + Framework have also found these coding standards useful because their code's style + remains consistent with all Zend Framework code. It is also worth noting that it + requires significant effort to fully specify coding standards. +

+ +

Note: + + Sometimes developers consider the establishment of a standard more important + than what that standard actually suggests at the most detailed level of + design. The guidelines in Zend Framework's coding standards capture practices + that have worked well on the Zend Framework project. You may modify these + standards or use them as is in accordance with the terms of our » license. +
+

+ +

+ Topics covered in Zend Framework's coding standards include: +

+ +
    +
  • +

    PHP File Formatting

    +
  • + +
  • +

    Naming Conventions

    +
  • + +
  • +

    Coding Style

    +
  • + +
  • +

    Inline Documentation

    +
  • +
+
+ +

Goals

+ + +

+ Coding standards are important in any development project, but they are particularly + important when many developers are working on the same project. Coding standards + help ensure that the code is high quality, has fewer bugs, and can be easily + maintained. +

+
+
+
+ + + + + + + + + +
+ Zend Framework Coding Standard for PHP + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/coding-standard.php-file-formatting.html b/zend/documentation/manual/core/en/coding-standard.php-file-formatting.html new file mode 100644 index 0000000..107f92a --- /dev/null +++ b/zend/documentation/manual/core/en/coding-standard.php-file-formatting.html @@ -0,0 +1,152 @@ + + + + + PHP File Formatting - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Overview + + + + +
+
+

PHP File Formatting

+ + +

General

+ + +

+ For files that contain only PHP code, the closing tag ("?>") is + never permitted. It is not required by PHP, and omitting it´ + prevents the accidental injection of trailing white space into the response. +

+ +

Note: + + Important: Inclusion of arbitrary binary data as permitted + by __HALT_COMPILER() is prohibited from + PHP files in the Zend Framework project or files derived + from them. Use of this feature is only permitted for some installation scripts. +
+

+
+ +

Indentation

+ + +

Indentation should consist of 4 spaces. Tabs are not allowed.

+
+ +

Maximum Line Length

+ + +

+ The target line length is 80 characters. That is to say, Zend Framework developers + should strive keep each line of their code under 80 characters where possible and + practical. However, longer lines are acceptable in some circumstances. The maximum + length of any line of PHP code is 120 characters. +

+
+ +

Line Termination

+ + +

+ Line termination follows the Unix text file convention. Lines must end with a + single linefeed (LF) character. Linefeed characters are represented as ordinal 10, + or hexadecimal 0x0A. +

+ +

+ Note: Do not use carriage returns (CR) as is the convention in Apple OS's (0x0D) or + the carriage return - linefeed combination (CRLF) as is standard + for the Windows OS (0x0D, 0x0A). +

+
+
+
+ + + + + + + + + +
+ Overview + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/copyrights.html b/zend/documentation/manual/core/en/copyrights.html new file mode 100644 index 0000000..be991a9 --- /dev/null +++ b/zend/documentation/manual/core/en/copyrights.html @@ -0,0 +1,114 @@ + + + + + Copyright Information - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ View Rendering + + + + +
+
+

Copyright Information

+ + +

+ The following copyrights are applicable to portions of Zend Framework. +

+ +

+ Copyright © 2005- Zend Technologies Inc. + (http://www.zend.com) +

+
+
+ + + + + + + + + +
+ View Rendering + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/doc-standard.file-formatting.html b/zend/documentation/manual/core/en/doc-standard.file-formatting.html new file mode 100644 index 0000000..b395748 --- /dev/null +++ b/zend/documentation/manual/core/en/doc-standard.file-formatting.html @@ -0,0 +1,599 @@ + + + + + Documentation File Formatting - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Overview + + + + +
+
+

Documentation File Formatting

+ + +

XML Tags

+ + +

+ Each manual file must include the following XML declarations at + the top of the file: +

+ +
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. +
  3. <!-- Reviewed: no -->
+ + +

+ XML files from translated languages must also include a revision + tag containing the revision of the corresponding English-language file the + translation was based on. +

+ +
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. +
  3. <!-- EN-Revision: 14978 -->
  4. +
  5. <!-- Reviewed: no -->
+ +
+ +

Maximum Line Length

+ + +

+ The maximum line length, including tags, attributes, and indentation, is not to + exceed 100 characters. There is only one exception to this rule: attribute and value + pairs are allowed to exceed the 100 chars as they are not allowed to be separated. +

+
+ +

Indentation

+ + +

Indentation should consist of 4 spaces. Tabs are not allowed.

+

Tags which are at the same level must have the same indentation.

+ +
  1. <sect1>
  2. +
  3. </sect1>
  4. +
  5.  
  6. +
  7. <sect1>
  8. +
  9. </sect1>
+ + +

+ Tags which are one level under the previous tag must be indented with 4 additional + spaces. +

+ +
  1. <sect1>
  2. +
  3.     <sect2>
  4. +
  5.     </sect2>
  6. +
  7. </sect1>
+ + +

+ Multiple block tags within the same line are not allowed; multiple inline tags are + allowed, however. +

+ +
  1. <!-- NOT ALLOWED: -->
  2. +
  3. <sect1><sect2>
  4. +
  5. </sect2></sect1>
  6. +
  7.  
  8. +
  9. <!-- ALLOWED -->
  10. +
  11. <para>
  12. +
  13.     <classname>Zend_Magic</classname> does not exist. <classname>Zend_Acl</classname> does.
  14. +
  15. </para>
+ +
+ +

Line Termination

+ + +

+ Line termination follows the Unix text file convention. Lines must end with a + single linefeed (LF) character. Linefeed characters are represented as ordinal 10, + or hexadecimal 0x0A. +

+ +

+ Note: Do not use carriage returns (CR) as is the convention in + Apple OS's (0x0D) or the carriage return - linefeed combination + (CRLF) as is standard for the Windows OS (0x0D, 0x0A). +

+
+ +

Empty tags

+ + +

+ Empty tags are not allowed; all tags must contain text or child tags. +

+ +
  1. <!-- NOT ALLOWED -->
  2. +
  3. <para>
  4. +
  5.     Some text. <link></link>
  6. +
  7. </para>
  8. +
  9.  
  10. +
  11. <para>
  12. +
  13. </para>
+ +
+ +

Usage of whitespace within documents

+ + +

Whitespace within tags

+ + +

+ Opening block tags should have no whitespace immediately following them other + than line breaks (and indentation on the following line). +

+ +
  1. <!-- NOT ALLOWED -->
  2. +
  3. <sect1>WHITESPACE
  4. +
  5. </sect1>
+ + +

+ Opening inline tags should have no whitespace immediately following them. +

+ +
  1. <!-- NOT ALLOWED -->
  2. +
  3. This is the class <classname> Zend_Class</classname>.
  4. +
  5.  
  6. +
  7. <!-- OK -->
  8. +
  9. This is the class <classname>Zend_Class</classname>.
+ + +

+ Closing block tags may be preceded by whitespace equivalent to the current + indentation level, but no more than that amount. +

+ +
  1. <!-- NOT ALLOWED -->
  2. +
  3.     <sect1>
  4. +
  5.      </sect1>
  6. +
  7.  
  8. +
  9. <!-- OK -->
  10. +
  11.     <sect1>
  12. +
  13.     </sect1>
+ + +

+ Closing inline tags must not be preceded by any whitespace. +

+ +
  1. <!-- NOT ALLOWED -->
  2. +
  3. This is the class <classname>Zend_Class </classname>
  4. +
  5.  
  6. +
  7. <!-- OK -->
  8. +
  9. This is the class <classname>Zend_Class</classname>
+ +
+ +

Multiple line breaks

+ + +

+ Multiple line breaks within or between tags are not allowed. +

+ +
  1. <!-- NOT ALLOWED -->
  2. +
  3. <para>
  4. +
  5.     Some text...
  6. +
  7.  
  8. +
  9.     ... and more text
  10. +
  11. </para>
  12. +
  13.  
  14. +
  15.  
  16. +
  17. <para>
  18. +
  19.     Another paragraph.
  20. +
  21. </para>
  22. +
  23.  
  24. +
  25. <!-- OK -->
  26. +
  27. <para>
  28. +
  29.     Some text...
  30. +
  31.     ... and more text
  32. +
  33. </para>
  34. +
  35.  
  36. +
  37. <para>
  38. +
  39.     Another paragraph.
  40. +
  41. </para>
+ +
+ +

Separation between tags

+ + +

+ Tags at the same level must be separated by an empty line to improve + readability. +

+ +
  1. <!-- NOT ALLOWED -->
  2. +
  3. <para>
  4. +
  5.     Some text...
  6. +
  7. </para>
  8. +
  9. <para>
  10. +
  11.     More text...
  12. +
  13. </para>
  14. +
  15.  
  16. +
  17. <!-- OK -->
  18. +
  19. <para>
  20. +
  21.     Some text...
  22. +
  23. </para>
  24. +
  25.  
  26. +
  27. <para>
  28. +
  29.     More text...
  30. +
  31. </para>
+ + +

+ The first child tag should open directly below its parent, with no empty line + between them; the last child tag should close directly before the closing tag of + its parent. +

+ +
  1. <!-- NOT ALLOWED -->
  2. +
  3. <sect1>
  4. +
  5.  
  6. +
  7.     <sect2>
  8. +
  9.     </sect2>
  10. +
  11.  
  12. +
  13.     <sect2>
  14. +
  15.     </sect2>
  16. +
  17.  
  18. +
  19.     <sect2>
  20. +
  21.     </sect2>
  22. +
  23.  
  24. +
  25. </sect1>
  26. +
  27.  
  28. +
  29. <!-- OK -->
  30. +
  31. <sect1>
  32. +
  33.     <sect2>
  34. +
  35.     </sect2>
  36. +
  37.  
  38. +
  39.     <sect2>
  40. +
  41.     </sect2>
  42. +
  43.  
  44. +
  45.     <sect2>
  46. +
  47.     </sect2>
  48. +
  49. </sect1>
+ +
+
+ +

Program Listings

+ + +

+ The opening <programlisting> tag must indicate the + appropriate "language" attribute and be indented at the same level as its sibling + blocks. +

+ +
  1. <para>Sibling paragraph.</para>
  2. +
  3.  
  4. +
  5. <programlisting language="php"><![CDATA[
  6. +
+ + +

+ CDATA should be used around all program listings. +

+ +

+ <programlisting> sections must not add linebreaks or + whitespace at the beginning or end of the section, as these are then represented in + the final output. +

+ +
  1. <!-- NOT ALLOWED -->
  2. +
  3. <programlisting language="php"><![CDATA[
  4. +
  5.  
  6. +
  7. $render = "xxx";
  8. +
  9.  
  10. +
  11. ]]></programlisting>
  12. +
  13.  
  14. +
  15. <!-- OK -->
  16. +
  17. <programlisting language="php"><![CDATA[
  18. +
  19. $render = "xxx";
  20. +
  21. ]]></programlisting>
+ + +

+ Ending CDATA and <programlisting> + tags should be on the same line, without any indentation. +

+ +
  1. <!-- NOT ALLOWED -->
  2. +
  3.     <programlisting language="php"><![CDATA[
  4. +
  5. $render = "xxx";
  6. +
  7. ]]>
  8. +
  9.     </programlisting>
  10. +
  11.  
  12. +
  13. <!-- NOT ALLOWED -->
  14. +
  15.     <programlisting language="php"><![CDATA[
  16. +
  17. $render = "xxx";
  18. +
  19.     ]]></programlisting>
  20. +
  21.  
  22. +
  23. <!-- OK -->
  24. +
  25.     <programlisting language="php"><![CDATA[
  26. +
  27. $render = "xxx";
  28. +
  29. ]]></programlisting>
+ + +

+ The <programlisting> tag should contain the "language" + attribute with a value appropriate to the contents of the program listing. Typical + values include "css", "html", "ini", "javascript", "php", "text", and "xml". +

+ +
  1. <!-- PHP -->
  2. +
  3. <programlisting language="php"><![CDATA[
  4. +
  5.  
  6. +
  7. <!-- Javascript -->
  8. +
  9. <programlisting language="javascript"><![CDATA[
  10. +
  11.  
  12. +
  13. <!-- XML -->
  14. +
  15. <programlisting language="xml"><![CDATA[
  16. +
+ + +

+ For program listings containing only PHP code, + PHP tags (e.g., "<?php", "?>") are not required, and + should not be used. They simply clutter the narrative, and are implied by the use + of the <programlisting> tag. +

+ +
  1. <!-- NOT ALLOWED -->
  2. +
  3. <programlisting language="php"<![CDATA[<?php
  4. +
  5.     // ...
  6. +
  7. ?>]]></programlisting>
  8. +
  9.  
  10. +
  11. <programlisting language="php"<![CDATA[
  12. +
  13. <?php
  14. +
  15.     // ...
  16. +
  17. ?>
  18. +
  19. ]]></programlisting>
+ + +

+ Line lengths within program listings should follow the coding standards + recommendations. +

+ +

+ Refrain from using require_once(), + require(), include_once(), and + include() calls within PHP listings. + They simply clutter the narrative, and are largely obviated when using an + autoloader. Use them only when they are essential to the example. +

+ +

Note: Never use short tags
+ + + + Short tags (e.g., "<?", "<?=") should never be used within + programlisting or the narrative of a document. +
+

+
+ +

Notes on specific inline tags

+ + +

classname

+ + +

+ The tag <classname> must be used each time a class + name is represented by itself; it should not be used when combined with a + method name, variable name, or constant, and no other content is allowed within + the tag. +

+ +
  1. <para>
  2. +
  3.     The class <classname>Zend_Class</classname>.
  4. +
  5. </para>
+ +
+ +

varname

+ + +

+ Variables must be wrapped in the <varname> tag. + Variables must be written using the "$" sigil. No other content is allowed + within this tag, unless a class name is used, which indicates a class variable. +

+ +
  1. <para>
  2. +
  3.     The variable <varname>$var</varname> and the class variable
  4. +
  5.     <varname>Zend_Class::$var</varname>.
  6. +
  7. </para>
+ +
+ +

methodname

+ + +

+ Methods must be wrapped in the <methodname> tag. + Methods must either include the full method signature or at the least a pair of + closing parentheses (e.g., "()"). No other content is allowed within this tag, + unless a class name is used, which indicates a class method. +

+ +
  1. <para>
  2. +
  3.     The method <methodname>foo()</methodname> and the class method
  4. +
  5.     <methodname>Zend_Class::foo()</methodname>. A method with a full signature:
  6. +
  7.     <methodname>foo($bar, $baz)</methodname>
  8. +
  9. </para>
+ +
+ +

constant

+ + +

+ Use the <constant> tag when denoting constants. + Constants must be written in UPPERCASE. No other content is + allowed within this tag, unless a class name is used, which indicates a class + constant. +

+ +
  1. <para>
  2. +
  3.     The constant <constant>FOO</constant> and the class constant
  4. +
  5.     <constant>Zend_Class::FOO</constant>.
  6. +
  7. </para>
+ +
+ +

filename

+ + +

+ Filenames and paths must be wrapped in the + <filename> tag. No other content is allowed in this + tag. +

+ +
  1. <para>
  2. +
  3.     The filename <filename>application/Bootstrap.php</filename>.
  4. +
  5. </para>
+ +
+ +

command

+ + +

+ Commands, shell scripts, and program calls must be wrapped in the + <command> tag. If the command includes arguments, + these should also be included within the tag. +

+ +
  1. <para>
  2. +
  3.     Execute <command>zf.sh create project</command>.
  4. +
  5. </para>
+ +
+ +

code

+ + +

+ Usage of the <code> tag is discouraged, in favor of + the other inline tasks discussed previously. +

+
+
+ +

Notes on specific block tags

+ + +

title

+ + +

+ The <title> tag is not allowed to hold other tags. +

+ +
  1. <!-- NOT ALLOWED -->
  2. +
  3. <title>Using <classname>Zend_Class</classname></title>
  4. +
  5.  
  6. +
  7. <!-- OK -->
  8. +
  9. <title>Using Zend_Class</title>
+ +
+
+
+
+ + + + + + + + + +
+ Overview + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/doc-standard.html b/zend/documentation/manual/core/en/doc-standard.html new file mode 100644 index 0000000..f3159e3 --- /dev/null +++ b/zend/documentation/manual/core/en/doc-standard.html @@ -0,0 +1,116 @@ + + + + + Zend Framework Documentation Standard - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Coding Style + + + + +
+
+

Zend Framework Documentation Standard

Table of Contents +
+ + + + + + + +
+
+ + + + + + + + + +
+ Coding Style + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/doc-standard.overview.html b/zend/documentation/manual/core/en/doc-standard.overview.html new file mode 100644 index 0000000..345659f --- /dev/null +++ b/zend/documentation/manual/core/en/doc-standard.overview.html @@ -0,0 +1,125 @@ + + + + + Overview - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Framework Documentation Standard + + + + +
+
+

Overview

+ + +

Scope

+ + +

+ This document provides guidelines for creation of the end-user + documentation found within Zend Framework. It is intended as a + guide to Zend Framework contributors, who must write + documentation as part of component contributions, as well as to + documentation translators. The standards contained herein are + intended to ease translation of documentation, minimize + visual and stylistic differences between different documentation + files, and make finding changes in documentation easier with + diff tools. +

+ +

+ You may adopt and/or modify these standards in accordance with the terms of our + » license. +

+ +

+ Topics covered in Zend Framework's documentation standards include documentation + file formatting and recommendations for documentation quality. +

+
+
+
+ + + + + + + + + +
+ Zend Framework Documentation Standard + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/doc-standard.recommendations.html b/zend/documentation/manual/core/en/doc-standard.recommendations.html new file mode 100644 index 0000000..2dec724 --- /dev/null +++ b/zend/documentation/manual/core/en/doc-standard.recommendations.html @@ -0,0 +1,185 @@ + + + + + Recommendations - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Documentation File Formatting + + + + +
+
+

Recommendations

+ + +

Use editors without autoformatting

+ + +

+ For editing the documentation, typically you should not use formal + XML editors. Such editors normally autoformat existing documents + to fit their own standards and/or do not strictly follow the docbook standard. As + examples, we have seen them erase the CDATA tags, change 4 space + separation to tabs or 2 spaces, etc. +

+ +

+ The style guidelines were written in large part to assist translators in recognizing + the lines that have changed using normal diff tools. + Autoformatting makes this process more difficult. +

+
+ +

Use Images

+ + +

+ Good images and diagrams can improve readability and comprehension. Use them + whenever they will assist in these goals. Images should be placed in the + documentation/manual/en/figures/ directory, and be named after + the section identifier in which they occur. +

+
+ +

Use Case Examples

+ + +

+ Look for good use cases submitted by the community, especially those posted in + proposal comments or on one of the mailing lists. Examples often illustrate usage + far better than the narrative does. +

+ +

+ When writing your examples for inclusion in the manual, follow + all coding standards and documentation standards. +

+
+ +

Avoid Replicating phpdoc Contents

+ + +

+ The manual is intended to be a reference guide for end-user usage. Replicating + the phpdoc documentation for internal-use components and classes is not wanted, and + the narrative should be focussed on usage, not the internal workings. In any case, + at this time, we would like the documentation teams to focus on translating the + English manual, not the phpdoc comments. +

+
+ + +
+
+ + + + + + + + + +
+ Documentation File Formatting + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/introduction.html b/zend/documentation/manual/core/en/introduction.html new file mode 100644 index 0000000..861a69c --- /dev/null +++ b/zend/documentation/manual/core/en/introduction.html @@ -0,0 +1,111 @@ + + + + + Introduction to Zend Gdata - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Programmer's Reference Guide + + + + +
+
+
+

Introduction to Zend Gdata

Table of Contents + + + +
+
+ + + + + + + + + +
+ Programmer's Reference Guide + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/introduction.installation.html b/zend/documentation/manual/core/en/introduction.installation.html new file mode 100644 index 0000000..1709e5c --- /dev/null +++ b/zend/documentation/manual/core/en/introduction.installation.html @@ -0,0 +1,196 @@ + + + + + Installation - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Overview + + + + +
+
+

Installation

+ + +

+ See the requirements appendix for a detailed list of + requirements for Zend Framework. +

+ +

+ Installing Zend Framework is extremely simple. Once you have downloaded and extracted the + framework, you should add the /library folder in the distribution to + the beginning of your include path. You may also want to move the library folder + to another – possibly shared – location on your file system. +

+ +
    +
  • +

    + » Download the latest + stable release. This version, available in both + .zip and .tar.gz formats, is a + good choice for those who are new to Zend Framework. +

    +
  • + +
  • +

    + » Download the latest + nightly snapshot. For those who would brave the cutting edge, the + nightly snapshots represent the latest progress of Zend Framework development. + Snapshots are bundled with documentation either in English only or in all + available languages. If you anticipate working with the latest Zend Framework + developments, consider using a Subversion (SVN) client. +

    +
  • + +
  • +

    + Using a » Subversion + (SVN) client. Zend Framework is open source software, and the + Subversion repository used for its development is publicly available. Consider + using SVN to get Zend Framework if you already use + SVN for your application development, want to + contribute back to the framework, or need to upgrade your framework version + more often than releases occur. +

    + +

    + » + Exporting is useful if you want to get a particular framework revision + without the .svn directories as created in a working copy. +

    + +

    + » + Check out a working copy if you want contribute to Zend Framework, a + working copy can be updated any time with + » + svn update and changes can be commited to our SVN + repository with the + » + svn commit command. +

    + +

    + An + » + externals definition is quite convenient for developers already using + SVN to manage their application's working copies. +

    + +

    + The URL for the trunk of Zend Framework's SVN + repository is: » + http://framework.zend.com/svn/framework/standard/trunk +

    +
  • +
+ +

+ Once you have a copy of Zend Framework available, your application needs to be able to + access the framework classes. Though there are + » + several ways to achieve this, your PHP + » include_path + needs to contain the path to Zend Framework's library. +

+ +

+ Zend provides a » QuickStart + to get you up and running as quickly as possible. This is an excellent way to begin + learning about the framework with an emphasis on real world examples that you can build + upon. +

+ +

+ Since Zend Framework components are loosely coupled, you may use a somewhat unique + combination of them in your own applications. The following chapters provide a + comprehensive reference to Zend Framework on a component-by-component basis. +

+
+
+ + + + + + + + + +
+ Overview + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/introduction.overview.html b/zend/documentation/manual/core/en/introduction.overview.html new file mode 100644 index 0000000..f6beb3b --- /dev/null +++ b/zend/documentation/manual/core/en/introduction.overview.html @@ -0,0 +1,138 @@ + + + + + Overview - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Introduction to Zend Gdata + + + + +
+
+

Overview

+ + + +

+ Zend Framework is an open source framework for developing web applications and services + with PHP 5. Zend Framework is implemented using 100% object-oriented + code. The component structure of Zend Framework is somewhat unique; each component is + designed with few dependencies on other components. This loosely coupled architecture allows + developers to use components individually. We often call this a "use-at-will" design. +

+ +

+ While they can be used separately, Zend Framework components in the standard library form a + powerful and extensible web application framework when combined. Zend Framework offers a + robust, high performance MVC implementation, a database abstraction that + is simple to use, and a forms component that implements HTML form + rendering, validation, and filtering so that developers can consolidate all of these + operations using one easy-to-use, object oriented interface. Other components, such as + Zend_Auth and Zend_Acl, provide user + authentication and authorization against all common credential stores. Still others + implement client libraries to simply access to the most popular web services available. + Whatever your application needs are, you're likely to find a Zend Framework component that + can be used to dramatically reduce development time with a thoroughly tested foundation. +

+ +

+ The principal sponsor of the project 'Zend Framework' is » + Zend Technologies, but many companies have contributed components or significant + features to the framework. Companies such as Google, Microsoft, and StrikeIron have + partnered with Zend to provide interfaces to web services and other technologies that they + wish to make available to Zend Framework developers. +

+ +

+ Zend Framework could not deliver and support all of these features without the help of the + vibrant Zend Framework community. Community members, including contributors, make + themselves available on » mailing + lists, » IRC channels, and other + forums. Whatever question you have about Zend Framework, the community is always available + to address it. +

+
+
+ + + + + + + + + +
+ Introduction to Zend Gdata + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/learning.autoloading.html b/zend/documentation/manual/core/en/learning.autoloading.html new file mode 100644 index 0000000..4af6b55 --- /dev/null +++ b/zend/documentation/manual/core/en/learning.autoloading.html @@ -0,0 +1,120 @@ + + + + + Autoloading in Zend Gdata - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Gdata Quick Start + + + + +
+
+
+

Autoloading in Zend Gdata

+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend Gdata Quick Start + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/learning.form.decorators.html b/zend/documentation/manual/core/en/learning.form.decorators.html new file mode 100644 index 0000000..3d17549 --- /dev/null +++ b/zend/documentation/manual/core/en/learning.form.decorators.html @@ -0,0 +1,123 @@ + + + + + Understanding and Using Zend Form Decorators - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Getting Started Zend_View Placeholders + + + + +
+
+
+

Understanding and Using Zend Form Decorators

+ + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Getting Started Zend_View Placeholders + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/learning.html b/zend/documentation/manual/core/en/learning.html new file mode 100644 index 0000000..768a00d --- /dev/null +++ b/zend/documentation/manual/core/en/learning.html @@ -0,0 +1,134 @@ + + + + + Learning Zend Gdata - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Installation + + + + +
+
+ +
+ + + + + + + + + +
+ Installation + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/learning.layout.html b/zend/documentation/manual/core/en/learning.layout.html new file mode 100644 index 0000000..2ec544f --- /dev/null +++ b/zend/documentation/manual/core/en/learning.layout.html @@ -0,0 +1,114 @@ + + + + + Getting Started with Zend_Layout - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Plugins in Zend Gdata + + + + +
+
+
+

Getting Started with Zend_Layout

+ + + + + + + + + +
+
+ + + + + + + + + +
+ Plugins in Zend Gdata + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/learning.lucene.html b/zend/documentation/manual/core/en/learning.lucene.html new file mode 100644 index 0000000..f5ec476 --- /dev/null +++ b/zend/documentation/manual/core/en/learning.lucene.html @@ -0,0 +1,126 @@ + + + + + Getting Started with Zend_Search_Lucene - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Getting Started with Zend_Session, Zend_Auth, and Zend_Acl + + + + +
+
+
+

Getting Started with Zend_Search_Lucene

+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Getting Started with Zend_Session, Zend_Auth, and Zend_Acl + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/learning.multiuser.html b/zend/documentation/manual/core/en/learning.multiuser.html new file mode 100644 index 0000000..701d0b4 --- /dev/null +++ b/zend/documentation/manual/core/en/learning.multiuser.html @@ -0,0 +1,117 @@ + + + + + Getting Started with Zend_Session, Zend_Auth, and Zend_Acl - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Understanding and Using Zend Form Decorators + + + + +
+
+
+

Getting Started with Zend_Session, Zend_Auth, and Zend_Acl

+ + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Understanding and Using Zend Form Decorators + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/learning.paginator.html b/zend/documentation/manual/core/en/learning.paginator.html new file mode 100644 index 0000000..78fce22 --- /dev/null +++ b/zend/documentation/manual/core/en/learning.paginator.html @@ -0,0 +1,117 @@ + + + + + Getting Started with Zend_Paginator - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Getting Started with Zend_Search_Lucene + + + + +
+
+
+

Getting Started with Zend_Paginator

+ + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Getting Started with Zend_Search_Lucene + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/learning.plugins.html b/zend/documentation/manual/core/en/learning.plugins.html new file mode 100644 index 0000000..53c6079 --- /dev/null +++ b/zend/documentation/manual/core/en/learning.plugins.html @@ -0,0 +1,114 @@ + + + + + Plugins in Zend Gdata - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Autoloading in Zend Gdata + + + + +
+
+
+

Plugins in Zend Gdata

+ + + + + + + + + +
+
+ + + + + + + + + +
+ Autoloading in Zend Gdata + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/learning.quickstart.html b/zend/documentation/manual/core/en/learning.quickstart.html new file mode 100644 index 0000000..18fcf16 --- /dev/null +++ b/zend/documentation/manual/core/en/learning.quickstart.html @@ -0,0 +1,123 @@ + + + + + Zend Gdata Quick Start - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Learning Zend Gdata + + + + +
+
+
+

Zend Gdata Quick Start

+ + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Learning Zend Gdata + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/learning.view.placeholders.html b/zend/documentation/manual/core/en/learning.view.placeholders.html new file mode 100644 index 0000000..6ef6d33 --- /dev/null +++ b/zend/documentation/manual/core/en/learning.view.placeholders.html @@ -0,0 +1,117 @@ + + + + + Getting Started Zend_View Placeholders - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Getting Started with Zend_Layout + + + + +
+
+
+

Getting Started Zend_View Placeholders

+ + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Getting Started with Zend_Layout + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/manual.html b/zend/documentation/manual/core/en/manual.html new file mode 100644 index 0000000..7e3ac5f --- /dev/null +++ b/zend/documentation/manual/core/en/manual.html @@ -0,0 +1,106 @@ + + + + + Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ + + + + +
+
+ +
+ + + + + + + + + +
+ + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/migration.06.html b/zend/documentation/manual/core/en/migration.06.html new file mode 100644 index 0000000..2c7a7bf --- /dev/null +++ b/zend/documentation/manual/core/en/migration.06.html @@ -0,0 +1,354 @@ + + + + + Zend Framework 0.6 - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Framework 0.8 + + + + +
+
+

Zend Framework 0.6

+ + +

+ When upgrading from a previous release to Zend Framework 0.6 or higher you + should note the following migration notes. +

+ +

Zend_Controller

+ + +

+ The most basic usage of the MVC components has not changed; you can + still do each of the following: +

+ +
  1. Zend_Controller_Front::run('/path/to/controllers');
+ + +
  1. /* -- create a router -- */
  2. +
  3. $router = new Zend_Controller_RewriteRouter();
  4. +
  5. $router->addRoute('user',
  6. +
  7.                   'user/:username',
  8. +
  9.                   array('controller' => 'user', 'action' => 'info')
  10. +
  11. );
  12. +
  13.  
  14. +
  15. /* -- set it in a controller -- */
  16. +
  17. $ctrl = Zend_Controller_Front::getInstance();
  18. +
  19. $ctrl->setRouter($router);
  20. +
  21.  
  22. +
  23. /* -- set controller directory and dispatch -- */
  24. +
  25. $ctrl->setControllerDirectory('/path/to/controllers');
  26. +
  27. $ctrl->dispatch();
+ + +

+ We encourage use of the Response object to aggregate content and + headers. This will allow for more flexible output format switching + (for instance, JSON or XML instead of + XHTML) in your applications. + By default, dispatch() will render the response, sending both + headers and rendering any content. You may also have the front + controller return the response using returnResponse(), + and then render the response using your own logic. A future version + of the front controller may enforce use of the response object via + output buffering. +

+ +

+ There are many additional features that extend the existing API, + and these are noted in the documentation. +

+ +

+ The main changes you will need to be aware of will be found when + subclassing the various components. Key amongst these are: +

+ +
    +
  • +

    + Zend_Controller_Front::dispatch() by default + traps exceptions in the response object, and does not render + them, in order to prevent sensitive system information from + being rendered. You can override this in several ways: +

    + +
      +
    • +

      + Set throwExceptions() in the front + controller: +

      + +
      1. $front->throwExceptions(true);
      + +
    • + +
    • +

      + Set renderExceptions() in the response + object: +

      + +
      1. $response->renderExceptions(true);
      2. +
      3. $front->setResponse($response);
      4. +
      5. $front->dispatch();
      6. +
      7.  
      8. +
      9. // or:
      10. +
      11. $front->returnResponse(true);
      12. +
      13. $response = $front->dispatch();
      14. +
      15. $response->renderExceptions(true);
      16. +
      17. echo $response;
      + +
    • +
    +
  • + +
  • +

    + Zend_Controller_Dispatcher_Interface::dispatch() + now accepts and returns a The + Request Object instead of a dispatcher token. +

    +
  • + +
  • +

    + Zend_Controller_Router_Interface::route() + now accepts and returns a The + Request Object instead of a dispatcher token. +

    +
  • + +
  • +

    Zend_Controller_Action changes include:

    + +
      +
    • +

      + The constructor now accepts exactly three arguments, + Zend_Controller_Request_Abstract + $request, + Zend_Controller_Response_Abstract + $response, + and Array $params (optional). + Zend_Controller_Action::__construct() uses + these to set the request, response, and invokeArgs + properties of the object, and if overriding the + constructor, you should do so as well. Better yet, use + the init() method to do any instance + configuration, as this method is called as the final + action of the constructor. +

      +
    • + +
    • +

      + run() is no longer defined as final, but is + also no longer used by the front controller; its sole + purpose is for using the class as a page controller. It + now takes two optional arguments, a + Zend_Controller_Request_Abstract + $request + and a Zend_Controller_Response_Abstract + $response. +

      +
    • + +
    • +

      + indexAction() no longer needs to be + defined, but is encouraged as the default action. This + allows using the RewriteRouter and action controllers to + specify different default action methods. +

      +
    • + +
    • +

      + __call() should be overridden to handle any + undefined actions automatically. +

      +
    • + +
    • +

      + _redirect() now takes an optional second + argument, the HTTP code to return with the redirect, + and an optional third argument, $prependBase, + that can indicate that the base URL registered with + the request object should be prepended to the url specified. +

      +
    • + +
    • +

      + The $_action property is no longer set. This property + was a Zend_Controller_Dispatcher_Token, + which no longer exists in the current incarnation. + The sole purpose of the token was to provide + information about the requested controller, action, + and URL parameters. This information is now + available in the request object, and can be accessed + as follows: +

      + +
      1. // Retrieve the requested controller name
      2. +
      3. // Access used to be via: $this->_action->getControllerName().
      4. +
      5. // The example below uses getRequest(), though you may also directly
      6. +
      7. // access the $_request property; using getRequest() is recommended as
      8. +
      9. // a parent class may override access to the request object.
      10. +
      11. $controller = $this->getRequest()->getControllerName();
      12. +
      13.  
      14. +
      15. // Retrieve the requested action name
      16. +
      17. // Access used to be via: $this->_action->getActionName().
      18. +
      19. $action = $this->getRequest()->getActionName();
      20. +
      21.  
      22. +
      23. // Retrieve the request parameters
      24. +
      25. // This hasn't changed; the _getParams() and _getParam() methods simply
      26. +
      27. // proxy to the request object now.
      28. +
      29. $params = $this->_getParams();
      30. +
      31. // request 'foo' parameter, using 'default' as default value if not found
      32. +
      33. $foo = $this->_getParam('foo', 'default');
      + +
    • + +
    • +

      + noRouteAction() has been removed. The + appropriate way to handle non-existent action + methods should you wish to route them to a default + action is using __call(): +

      + +
      1. public function __call($method, $args)
      2. +
      3. {
      4. +
      5.     // If an unmatched 'Action' method was requested, pass on to the
      6. +
      7.     // default action method:
      8. +
      9.     if ('Action' == substr($method, -6)) {
      10. +
      11.         return $this->defaultAction();
      12. +
      13.     }
      14. +
      15.  
      16. +
      17.     throw new Zend_Controller_Exception('Invalid method called');
      18. +
      19. }
      + +
    • +
    +
  • + +
  • +

    + Zend_Controller_RewriteRouter::setRewriteBase() has + been removed. Use Zend_Controller_Front::setBaseUrl() + instead (or Zend_Controller_Request_Http::setBaseUrl(), + if using that request class). +

    +
  • + +
  • +

    + Zend_Controller_Plugin_Interface was replaced + by Zend_Controller_Plugin_Abstract. All methods now + accept and return a The Request + Object instead of a dispatcher token. +

    +
  • +
+
+
+
+ + + + + + + + + +
+ Zend Framework 0.8 + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/migration.08.html b/zend/documentation/manual/core/en/migration.08.html new file mode 100644 index 0000000..a18d917 --- /dev/null +++ b/zend/documentation/manual/core/en/migration.08.html @@ -0,0 +1,197 @@ + + + + + Zend Framework 0.8 - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Framework 0.9 + + + + +
+
+

Zend Framework 0.8

+ + +

+ When upgrading from a previous release to Zend Framework 0.8 or higher you + should note the following migration notes. +

+ +

Zend_Controller

+ + +

+ Per previous changes, the most basic usage of the MVC components + remains the same: +

+ +
  1. Zend_Controller_Front::run('/path/to/controllers');
+ + +

+ However, the directory structure underwent an overhaul, several + components were removed, and several others either renamed or added. + Changes include: +

+ +
    +
  • +

    + Zend_Controller_Router was removed in favor of + the rewrite router. +

    +
  • + +
  • +

    + Zend_Controller_RewriteRouter was renamed to + Zend_Controller_Router_Rewrite, and promoted to + the standard router shipped with the framework; + Zend_Controller_Front will use it by default if + no other router is supplied. +

    +
  • + +
  • +

    + A new route class for use with the rewrite router was + introduced, + Zend_Controller_Router_Route_Module; it covers + the default route used by the MVC, and has support for controller + modules. +

    +
  • + +
  • +

    + Zend_Controller_Router_StaticRoute was renamed + to Zend_Controller_Router_Route_Static. +

    +
  • + +
  • +

    + Zend_Controller_Dispatcher was renamed + Zend_Controller_Dispatcher_Standard. +

    +
  • + +
  • +

    + Zend_Controller_Action::_forward()'s arguments + have changed. The signature is now: +

    + +
    1. final protected function _forward($action,
    2. +
    3.                                   $controller = null,
    4. +
    5.                                   $module = null,
    6. +
    7.                                   array $params = null);
    + + +

    + $action is always required; if no controller is + specified, an action in the current controller is assumed. + $module is always ignored unless + $controller is specified. Finally, any + $params provided will be appended to the + request object. If you do not require the controller or + module, but still need to pass parameters, simply specify + NULL for those values. +

    +
  • +
+
+
+
+ + + + + + + + + +
+ Zend Framework 0.9 + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/migration.09.html b/zend/documentation/manual/core/en/migration.09.html new file mode 100644 index 0000000..7cde140 --- /dev/null +++ b/zend/documentation/manual/core/en/migration.09.html @@ -0,0 +1,154 @@ + + + + + Zend Framework 0.9 - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Framework 1.0 + + + + +
+
+

Zend Framework 0.9

+ + +

+ When upgrading from a previous release to Zend Framework 0.9 or higher you + should note the following migration notes. +

+ +

Zend_Controller

+ + +

+ 0.9.3 introduces action helpers. + As part of this change, the following methods have been removed as + they are now encapsulated in the redirector + action helper: +

+ +
    +
  • +

    + setRedirectCode(); use + Zend_Controller_Action_Helper_Redirector::setCode(). +

    +
  • + +
  • +

    + setRedirectPrependBase(); use + Zend_Controller_Action_Helper_Redirector::setPrependBase(). +

    +
  • + +
  • +

    + setRedirectExit(); use + Zend_Controller_Action_Helper_Redirector::setExit(). +

    +
  • +
+ +

+ Read the action + helpers documentation for more information on how to + retrieve and manipulate helper objects, and the redirector + helper documentation for more information on setting + redirect options (as well as alternate methods for redirecting). +

+
+
+
+ + + + + + + + + +
+ Zend Framework 1.0 + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/migration.10.html b/zend/documentation/manual/core/en/migration.10.html new file mode 100644 index 0000000..007343f --- /dev/null +++ b/zend/documentation/manual/core/en/migration.10.html @@ -0,0 +1,389 @@ + + + + + Zend Framework 1.0 - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Framework 1.5 + + + + +
+
+

Zend Framework 1.0

+ + +

+ When upgrading from a previous release to Zend Framework 1.0 or higher you + should note the following migration notes. +

+ +

Zend_Controller

+ + +

+ The principal changes introduced in 1.0.0RC1 are the introduction of + and default enabling of the + ErrorHandler + plugin and the ViewRenderer + action helper. Please read the documentation to each thoroughly to + see how they work and what effect they may have on your + applications. +

+ +

+ The ErrorHandler plugin runs during + postDispatch() checking for exceptions, and forwarding + to a specified error handler controller. You should include such a + controller in your application. You may disable it by setting the + front controller parameter noErrorHandler: +

+ +
  1. $front->setParam('noErrorHandler', true);
+ + +

+ The ViewRenderer action helper automates view injection + into action controllers as well as autorendering of view scripts + based on the current action. The primary issue you may encounter is + if you have actions that do not render view scripts and neither + forward or redirect, as the ViewRenderer will attempt + to render a view script based on the action name. +

+ +

+ There are several strategies you can take to update your code. In + the short term, you can globally disable the + ViewRenderer in your front controller bootstrap prior + to dispatching: +

+ +
  1. // Assuming $front is an instance of Zend_Controller_Front
  2. +
  3. $front->setParam('noViewRenderer', true);
+ + +

+ However, this is not a good long term strategy, as it means most + likely you'll be writing more code. +

+ +

+ When you're ready to start using the ViewRenderer + functionality, there are several things to look for in your + controller code. First, look at your action methods (the methods + ending in 'Action'), and determine what each is doing. If none of + the following is happening, you'll need to make changes: +

+ +
    +
  • Calls to $this->render();

  • +
  • Calls to $this->_forward();

  • +
  • Calls to $this->_redirect();

  • + +
  • +

    Calls to the Redirector action helper

    +
  • +
+ +

+ The easiest change is to disable auto-rendering for that method: +

+ +
  1. $this->_helper->viewRenderer->setNoRender();
+ + +

+ If you find that none of your action methods are rendering, + forwarding, or redirecting, you will likely want to put the above + line in your preDispatch() or init() + methods: +

+ +
  1. public function preDispatch()
  2. +
  3. {
  4. +
  5.     // disable view script autorendering
  6. +
  7.     $this->_helper->viewRenderer->setNoRender()
  8. +
  9.     // .. do other things...
  10. +
  11. }
+ + +

+ If you are calling render(), and you're using the Conventional Modular + directory structure, you'll want to change your code to + make use of autorendering: +

+ +
    +
  • +

    + If you're rendering multiple view scripts in a single + action, you don't need to change a thing. +

    +
  • + +
  • +

    + If you're simply calling render() with no + arguments, you can remove such lines. +

    +
  • + +
  • +

    + If you're calling render() with arguments, and + not doing any processing afterwards or rendering multiple + view scripts, you can change these calls to read + $this->_helper->viewRenderer();. +

    +
  • +
+ +

+ If you're not using the conventional modular directory structure, + there are a variety of methods for setting the view base path and + script path specifications so that you can make use of the + ViewRenderer. Please read the ViewRenderer + documentation for information on these methods. +

+ +

+ If you're using a view object from the registry, or customizing your + view object, or using a different view implementation, you'll want + to inject the ViewRenderer with this object. This can + be done easily at any time. +

+ +
    +
  • +

    + Prior to dispatching a front controller instance: +

    + +
    1. // Assuming $view has already been defined
    2. +
    3. $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view);
    4. +
    5. Zend_Controller_Action_HelperBroker::addHelper($viewRenderer);
    + +
  • + +
  • +

    + Any time during the bootstrap process: +

    + +
    1. $viewRenderer =
    2. +
    3.     Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
    4. +
    5. $viewRenderer->setView($view);
    + +
  • +
+ +

+ There are many ways to modify the ViewRenderer, + including setting a different view script to render, specifying + replacements for all replaceable elements of a view script path + (including the suffix), choosing a response named segment to + utilize, and more. If you aren't using the conventional modular + directory structure, you can even associate different path + specifications with the ViewRenderer. +

+ +

+ We encourage you to adapt your code to use the + ErrorHandler and ViewRenderer as they are + now core functionality. +

+
+ +

Zend_Currency

+ + +

+ Creating an object of Zend_Currency has become simpler. + You no longer have to give a script or set it to NULL. The optional + script parameter is now an option which can be set through the + setFormat() method. +

+ +
  1. $currency = new Zend_Currency($currency, $locale);
+ + +

+ The setFormat() method takes now an array of options. These + options are set permanently and override all previously set values. Also a new option + 'precision' has been added. The following options have been refactored: +

+ +
    +
  • +

    + position: + Replacement for the old 'rules' parameter. +

    +
  • + +
  • +

    + script: + Replacement for the old 'script' parameter. +

    +
  • + +
  • +

    + format: + Replacement for the old 'locale' parameter which does not + set new currencies but only the number format. +

    +
  • + +
  • +

    + display: + Replacement for the old 'rules' parameter. +

    +
  • + +
  • +

    + precision: + New parameter. +

    +
  • + +
  • +

    + name: + Replacement for the ole 'rules' parameter. Sets the full + currencies name. +

    +
  • + +
  • +

    + currency: + New parameter. +

    +
  • + +
  • +

    + symbol: + New parameter. +

    +
  • +
+ +
  1. $currency->setFormat(array $options);
+ + +

+ The toCurrency() method no longer supports the optional + 'script' and 'locale' parameters. Instead it takes an options array which + can contain the same keys as for the setFormat() method. +

+ +
  1. $currency->toCurrency($value, array $options);
+ + +

+ The methods getSymbol(), + getShortName(), getName(), + getRegionList() and + getCurrencyList() are no longer static and can be called + from within the object. They return the set values of the object if no + parameter has been set. +

+
+
+
+ + + + + + + + + +
+ Zend Framework 1.5 + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/migration.110.html b/zend/documentation/manual/core/en/migration.110.html new file mode 100644 index 0000000..076c985 --- /dev/null +++ b/zend/documentation/manual/core/en/migration.110.html @@ -0,0 +1,502 @@ + + + + + Zend Framework 1.10 - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Framework 1.12 + + + + +
+
+

Zend Framework 1.10

+ + +

+ When upgrading from a previous release to Zend Framework 1.10 or higher you + should note the following migration notes. +

+ +

Zend_Controller_Front

+ + +

+ A wrong behaviour was fixed, when there was no module route and no route + matched the given request. Previously, the router returned an unmodified + request object, so the front controller just displayed the default controller + and action. Since Zend Framework 1.10, the router will correctly as noted + in the router interface, throw an exception if no route matches. The error + plugin will then catch that exception and forward to the error controller. + You can then test for that specific error with the constant + Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE: +

+ +
  1. /**
  2. +
  3. * Before 1.10
  4. +
  5. */
  6. +
  7.     public function errorAction()
  8. +
  9.     {
  10. +
  11.         $errors = $this->_getParam('error_handler');
  12. +
  13.  
  14. +
  15.         switch ($errors->type) {
  16. +
  17.             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
  18. +
  19.             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
  20. +
  21.     // ...
  22. +
  23.  
  24. +
  25. /**
  26. +
  27. * With 1.10
  28. +
  29. */
  30. +
  31.     public function errorAction()
  32. +
  33.     {
  34. +
  35.         $errors = $this->_getParam('error_handler');
  36. +
  37.  
  38. +
  39.         switch ($errors->type) {
  40. +
  41.             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
  42. +
  43.             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
  44. +
  45.             case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
  46. +
  47.     // ...
+ +
+ +

Zend_Feed_Reader

+ + +

+ With the introduction of Zend Framework 1.10, Zend_Feed_Reader's + handling of retrieving Authors and Contributors was changed, introducing + a break in backwards compatibility. This change was an effort to harmonise + the treatment of such data across the RSS and Atom classes of the component + and enable the return of Author and Contributor data in more accessible, + usable and detailed form. It also rectifies an error in that it was assumed + any author element referred to a name. In RSS this is incorrect as an + author element is actually only required to provide an email address. + In addition, the original implementation applied its RSS limits to Atom + feeds significantly reducing the usefulness of the parser with that format. +

+ +

+ The change means that methods like getAuthors() + and getContributors no longer return a simple array + of strings parsed from the relevant RSS and Atom elements. Instead, the return + value is an ArrayObject subclass called + Zend_Feed_Reader_Collection_Author which simulates + an iterable multidimensional array of Authors. Each member of this object + will be a simple array with three potential keys (as the source data permits). + These include: name, email and uri. +

+ +

+ The original behaviour of such methods would have returned a simple + array of strings, each string attempting to present a single name, but + in reality this was unreliable since there is no rule governing the format + of RSS Author strings. +

+ +

+ The simplest method of simulating the original behaviour of these + methods is to use the Zend_Feed_Reader_Collection_Author's + getValues() which also returns a simple array of strings + representing the "most relevant data", for authors presumed to be their name. + Each value in the resulting array is derived from the "name" value + attached to each Author (if present). In most cases this simple change is + easy to apply as demonstrated below. +

+ +
  1. /**
  2. +
  3. * Before 1.10
  4. +
  5. */
  6. +
  7. $feed = Zend_Feed_Reader::import('http://example.com/feed');
  8. +
  9. $authors = $feed->getAuthors();
  10. +
  11.  
  12. +
  13. /**
  14. +
  15. * With 1.10
  16. +
  17. */
  18. +
  19. $feed = Zend_Feed_Reader::import('http://example.com/feed');
  20. +
  21. $authors = $feed->getAuthors()->getValues();
+ +
+ +

Zend_File_Transfer

+ + +

Security change

+ + +

+ For security reasons Zend_File_Transfer does no longer store + the original mimetype and filesize which is given from the requesting client into + its internal storage. Instead the real values will be detected at initiation. +

+ +

+ Additionally the original values within $_FILES will be + overridden within the real values at initiation. This makes also + $_FILES secure. +

+ +

+ When you are in need of the original values you can either store them before + initiating Zend_File_Transfer or use the + disableInfos option at initiation. Note that this option is + useless when its given after initiation. +

+
+ +

Count validation

+ + +

+ Before release 1.10 the MimeType validator used a wrong + naming. For consistency the following constants have been changed: +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Changed Validation Messages
OldNewValue
TOO_MUCHTOO_MANY + Too many files, maximum '%max%' are allowed but '%count%' are given +
TOO_LESSTOO_FEW + Too few files, minimum '%min%' are expected but '%count%' are given +
+ + +

+ When you are translating these messages within your code then use the new constants. + As benefit you don't need to translate the original string anymore to get a correct + spelling. +

+
+
+ +

Zend_Filter_HtmlEntities

+ + +

+ In order to default to a more secure character encoding, + Zend_Filter_HtmlEntities now defaults to UTF-8 + instead of ISO-8859-1. +

+ +

+ Additionally, because the actual mechanism is dealing with character encodings and not + character sets, two new methods have been added, setEncoding() + and getEncoding(). The previous methods + setCharSet() and setCharSet() are now + deprecated and proxy to the new methods. Finally, instead of using the protected members + directly within the filter() method, these members are + retrieved by their explicit accessors. If you were extending the filter in the past, + please check your code and unit tests to ensure everything still continues to work. +

+
+ +

Zend_Filter_StripTags

+ + +

+ Zend_Filter_StripTags contains a flag, + commentsAllowed, that, in previous versions, allowed you to + optionally whitelist HTML comments in HTML text + filtered by the class. However, this opens code enabling the flag to + XSS attacks, particularly in Internet Explorer (which allows + specifying conditional functionality via HTML comments). Starting + in version 1.9.7 (and backported to versions 1.8.5 and 1.7.9), the + commentsAllowed flag no longer has any meaning, and all + HTML comments, including those containing other + HTML tags or nested commments, will be stripped from the final output + of the filter. +

+
+ +

Zend_Translate

+ + +

Xliff adapter

+ + +

+ In past the Xliff adapter used the source string as message Id. According to the + Xliff standard the trans-unit Id should be used. This behaviour was corrected with + Zend Framework 1.10. Now the trans-unit Id is used as message Id per default. +

+ +

+ But you can still get the incorrect and old behaviour by setting the + useId option to FALSE. +

+ +
  1. $trans = new Zend_Translate(
  2. +
  3.     'xliff', '/path/to/source', $locale, array('useId' => false)
  4. +
  5. );
+ +
+
+ +

Zend_Validate

+ + +

Self written validators

+ + +

+ When setting returning a error from within a self written validator you have to + call the _error() method. Before Zend Framework 1.10 you + were able to call this method without giving a parameter. It used then the first + found message template. +

+ +

+ This behaviour is problematic when you have validators with more than one different + message to be returned. Also when you extend an existing validator you can get + unexpected results. This could lead to the problem that your user get not the + message you expected. +

+ +
  1. My_Validator extends Zend_Validate_Abstract
  2. +
  3. {
  4. +
  5.     public isValid($value)
  6. +
  7.     {
  8. +
  9.         ...
  10. +
  11.         $this->_error(); // unexpected results between different OS
  12. +
  13.         ...
  14. +
  15.     }
  16. +
  17. }
+ + +

+ To prevent this problem the _error() method is no longer + allowed to be called without giving a parameter. +

+ +
  1. My_Validator extends Zend_Validate_Abstract
  2. +
  3. {
  4. +
  5.     public isValid($value)
  6. +
  7.     {
  8. +
  9.         ...
  10. +
  11.         $this->_error(self::MY_ERROR); // defined error, no unexpected results
  12. +
  13.         ...
  14. +
  15.     }
  16. +
  17. }
+ +
+ +

Simplification in date validator

+ + +

+ Before Zend Framework 1.10 2 identical messages were thrown within the date + validator. These were NOT_YYYY_MM_DD and + FALSEFORMAT. As of Zend Framework 1.10 only the + FALSEFORMAT message will be returned when the given date + does not match the set format. +

+
+ +

Fixes in Alpha, Alnum and Barcode validator

+ + +

+ Before Zend Framework 1.10 the messages within the 2 barcode adapters, the Alpha + and the Alnum validator were identical. This introduced problems when using custom + messages, translations or multiple instances of these validators. +

+ +

+ As with Zend Framework 1.10 the values of the constants were changed to + be unique. When you used the constants as proposed in the manual there is + no change for you. But when you used the content of the constants in your code + then you will have to change them. The following table shows you the changed values: +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Available Validation Messages
ValidatorConstantValue
AlnumSTRING_EMPTYalnumStringEmpty
AlphaSTRING_EMPTYalphaStringEmpty
Barcode_Ean13INVALIDean13Invalid
Barcode_Ean13INVALID_LENGTHean13InvalidLength
Barcode_UpcAINVALIDupcaInvalid
Barcode_UpcAINVALID_LENGTHupcaInvalidLength
DigitsSTRING_EMPTYdigitsStringEmpty
+ + +
+
+
+
+ + + + + + + + + +
+ Zend Framework 1.12 + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/migration.112.html b/zend/documentation/manual/core/en/migration.112.html new file mode 100644 index 0000000..e946938 --- /dev/null +++ b/zend/documentation/manual/core/en/migration.112.html @@ -0,0 +1,187 @@ + + + + + Zend Framework 1.12 - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Gdata Migration Notes + + + + +
+
+

Zend Framework 1.12

+ + +

+ When upgrading from a previous release to Zend Framework 1.12 or higher you + should note the following migration notes. +

+ +

Zend_View_Helper_Navigation

+ + +

+ Prior to the 1.12 release, a helper with the name + "My_View_Helper_Navigation_Menu" can not be used, because the proxy + helper returns always the standard view helper + "Zend_View_Helper_Navigation_Menu". +

+ +

+ Starting from version 1.12, you can use our own navigation helpers + with the name "menu", "breadcrumbs", ... +

+ +

+ Create your own helper with name "Menu": +

+ +
  1. class My_View_Helper_Navigation_Menu
  2. +
  3.     extends Zend_View_Helper_Navigation_HelperAbstract
  4. +
  5. {
  6. +
  7.     public function menu(Zend_Navigation_Container $container = null)
  8. +
  9.     {
  10. +
  11.         if (null !== $container) {
  12. +
  13.             $this->setContainer($container);
  14. +
  15.         }
  16. +
  17.  
  18. +
  19.         return $this;
  20. +
  21.     }
  22. +
  23.  
  24. +
  25.     public function render(Zend_Navigation_Container $container = null)
  26. +
  27.     {
  28. +
  29.         return '<nav>Example</nav>';
  30. +
  31.     }
  32. +
  33. }
+ + +

+ Add the helper path to Zend_View in your + Bootstrap class: +

+ +
  1. protected function _initView()
  2. +
  3.     {
  4. +
  5.         $this->bootstrap('view');
  6. +
  7.         $this->view->addHelperPath(
  8. +
  9.             'path/to/helper',
  10. +
  11.             'My_View_Helper_Navigation'
  12. +
  13.         );
  14. +
  15.     }
+ + +

+ Or add the helper path in your "application.ini" file: +

+ +
  1. resources.view.helperPath.My_View_Helper_Navigation = "path/to/helper"
+ + +

+ The following code is used in a view script: +

+ +
  1. <?php echo $this->navigation()->menu(); ?>
+ + +

+ Output: +

+ +
  1. <nav>Example</nav>
+ +
+
+
+ + + + + + + + + +
+ Zend Gdata Migration Notes + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/migration.15.html b/zend/documentation/manual/core/en/migration.15.html new file mode 100644 index 0000000..2d52120 --- /dev/null +++ b/zend/documentation/manual/core/en/migration.15.html @@ -0,0 +1,235 @@ + + + + + Zend Framework 1.5 - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Framework 1.6 + + + + +
+
+

Zend Framework 1.5

+ + +

+ When upgrading from a previous release to Zend Framework 1.5 or higher you + should note the following migration notes. +

+ +

Zend_Controller

+ + +

+ Though most basic functionality remains the same, and all documented + functionality remains the same, there is one particular + undocumented "feature" that has changed. +

+ +

+ When writing URLs, the documented way to write camelCased action + names is to use a word separator; these are '.' or '-' by default, + but may be configured in the dispatcher. The dispatcher internally + lowercases the action name, and uses these word separators to + re-assemble the action method using camelCasing. However, because PHP + functions are not case sensitive, you could + still write URLs using camelCasing, and the dispatcher would resolve + these to the same location. For example, 'camel-cased' would become + 'camelCasedAction' by the dispatcher, whereas 'camelCased' would + become 'camelcasedAction'; however, due to the case insensitivity of + PHP, both will execute the same method. +

+ +

+ This causes issues with the ViewRenderer when resolving view + scripts. The canonical, documented way is that all word separators + are converted to dashes, and the words lowercased. This creates + a semantic tie between the actions and view scripts, and the + normalization ensures that the scripts can be found. However, if the + action 'camelCased' is called and actually resolves, the word + separator is no longer present, and the ViewRenderer attempts to + resolve to a different location -- camelcased.phtml instead of + camel-cased.phtml. +

+ +

+ Some developers relied on this "feature", which was never intended. + Several changes in the 1.5.0 tree, however, made it so that the + ViewRenderer no longer resolves these paths; the semantic tie is now + enforced. First among these, the dispatcher now enforces case + sensitivity in action names. What this means is that referring to + your actions on the url using camelCasing will no longer resolve to + the same method as using word separators (i.e., 'camel-casing'). + This leads to the ViewRenderer now only honoring the word-separated + actions when resolving view scripts. +

+ +

+ If you find that you were relying on this "feature", you have several + options: +

+ +
    +
  • +

    + Best option: rename your view scripts. Pros: forward + compatibility. Cons: if you have many view scripts that + relied on the former, unintended behavior, you will have a + lot of renaming to do. +

    +
  • + +
  • +

    + Second best option: The ViewRenderer now delegates view + script resolution to Zend_Filter_Inflector; you + can modify the rules of the inflector to no longer separate + the words of an action with a dash: +

    + +
    1. $viewRenderer =
    2. +
    3.     Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
    4. +
    5. $inflector = $viewRenderer->getInflector();
    6. +
    7. $inflector->setFilterRule(':action', array(
    8. +
    9.     new Zend_Filter_PregReplace(
    10. +
    11.         '#[^a-z0-9' . preg_quote(DIRECTORY_SEPARATOR, '#') . ']+#i',
    12. +
    13.         ''
    14. +
    15.     ),
    16. +
    17.     'StringToLower'
    18. +
    19. ));
    + + +

    + The above code will modify the inflector to no longer + separate the words with dash; you may also want to remove + the 'StringToLower' filter if you do + want the actual view script names camelCased as well. +

    + +

    + If renaming your view scripts would be too tedious or time + consuming, this is your best option until you can find the + time to do so. +

    +
  • + +
  • +

    + Least desirable option: You can force the dispatcher to + dispatch camelCased action names with a new front controller + flag, useCaseSensitiveActions: +

    + +
    1. $front->setParam('useCaseSensitiveActions', true);
    + + +

    + This will allow you to use camelCasing on the url and still + have it resolve to the same action as when you use word + separators. However, this will mean that the original issues + will cascade on through; you will likely need to use the + second option above in addition to this for things to work + at all reliably. +

    + +

    + Note, also, that usage of this flag will raise a notice that + this usage is deprecated. +

    +
  • +
+
+
+
+ + + + + + + + + +
+ Zend Framework 1.6 + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/migration.16.html b/zend/documentation/manual/core/en/migration.16.html new file mode 100644 index 0000000..9fdd979 --- /dev/null +++ b/zend/documentation/manual/core/en/migration.16.html @@ -0,0 +1,209 @@ + + + + + Zend Framework 1.6 - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Framework 1.7 + + + + +
+
+

Zend Framework 1.6

+ + +

+ When upgrading from a previous release to Zend Framework 1.6 or higher you + should note the following migration notes. +

+ +

Zend_Controller

+ + +

Dispatcher Interface Changes

+ + +

+ Users brought to our attention the fact that + Zend_Controller_Front and + Zend_Controller_Router_Route_Module were each + using methods of the dispatcher that were not in the dispatcher + interface. We have now added the following three methods to + ensure that custom dispatchers will continue to work with the + shipped implementations: +

+ +
    +
  • +

    + getDefaultModule(): should return the name of + the default module. +

    +
  • + +
  • +

    + getDefaultControllerName(): should return the + name of the default controller. +

    +
  • + +
  • +

    + getDefaultAction(): should return the + name of the default action. +

    +
  • +
+
+
+ +

Zend_File_Transfer

+ + +

Changes when using validators

+ + +

+ As noted by users, the validators from Zend_File_Transfer + do not work the same way like the default ones from + Zend_Form. Zend_Form allows the usage + of a $breakChainOnFailure parameter which breaks the validation + for all further validators when an validation error has occurred. +

+ +

+ So we added this parameter also to all existing validators from + Zend_File_Transfer. +

+ +
    +
  • +

    + Old method API: addValidator($validator, + $options, $files). +

    +
  • + +
  • +

    + New method API: addValidator($validator, + $breakChainOnFailure, $options, $files). +

    +
  • +
+ +

+ To migrate your scripts to the new API, simply add a + FALSE after defining the wished validator. +

+ +

Example #1 How to change your file validators from 1.6.1 to 1.6.2

+ + +
  1. // Example for 1.6.1
  2. +
  3. $upload = new Zend_File_Transfer_Adapter_Http();
  4. +
  5. $upload->addValidator('FilesSize', array('1B', '100kB'));
  6. +
  7.  
  8. +
  9. // Same example for 1.6.2 and newer
  10. +
  11. // Note the added boolean false
  12. +
  13. $upload = new Zend_File_Transfer_Adapter_Http();
  14. +
  15. $upload->addValidator('FilesSize', false, array('1B', '100kB'));
+ +
+
+
+
+
+ + + + + + + + + +
+ Zend Framework 1.7 + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/migration.17.html b/zend/documentation/manual/core/en/migration.17.html new file mode 100644 index 0000000..028ac4a --- /dev/null +++ b/zend/documentation/manual/core/en/migration.17.html @@ -0,0 +1,702 @@ + + + + + Zend Framework 1.7 - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Framework 1.8 + + + + +
+
+

Zend Framework 1.7

+ + +

+ When upgrading from a previous release to Zend Framework 1.7 or higher you + should note the following migration notes. +

+ +

Zend_Controller

+ + +

Dispatcher Interface Changes

+ + +

+ Users brought to our attention the fact that + Zend_Controller_Action_Helper_ViewRenderer were + using a method of the dispatcher abstract class that was not in + the dispatcher interface. We have now added the following method to + ensure that custom dispatchers will continue to work with the + shipped implementations: +

+ +
    +
  • +

    + formatModuleName(): should be used to take a raw + controller name, such as one that would be packaged inside a request + object, and reformat it to a proper class name that a class extending + Zend_Controller_Action would use +

    +
  • +
+
+
+ +

Zend_File_Transfer

+ + +

Changes when using filters and validators

+ + +

+ As noted by users, the validators from Zend_File_Transfer + do not work in conjunction with Zend_Config due to the fact + that they have not used named arrays. +

+ +

+ Therefor, all filters and validators for Zend_File_Transfer + have been reworked. While the old signatures continue to work, + they have been marked as deprecated, and will emit a PHP notice + asking you to fix them. +

+ +

+ The following list shows you the changes you will have to do for proper + usage of the parameters. +

+ +

Filter: Rename

+ + +
    +
  • +

    + Old method API: + Zend_Filter_File_Rename($oldfile, $newfile, + $overwrite) +

    +
  • + +
  • +

    + New method API: + Zend_Filter_File_Rename($options) + where $options accepts the following array keys: + source equals to $oldfile, + target equals to $newfile, + overwrite equals to $overwrite. +

    +
  • +
+ +

Example #1 Changes for the rename filter from 1.6 to 1.7

+ + +
  1. // Example for 1.6
  2. +
  3. $upload = new Zend_File_Transfer_Adapter_Http();
  4. +
  5. $upload->addFilter('Rename',
  6. +
  7.                    array('/path/to/oldfile', '/path/to/newfile', true));
  8. +
  9.  
  10. +
  11. // Same example for 1.7
  12. +
  13. $upload = new Zend_File_Transfer_Adapter_Http();
  14. +
  15. $upload->addFilter('Rename',
  16. +
  17.                    array('source' => '/path/to/oldfile',
  18. +
  19.                          'target' => '/path/to/newfile',
  20. +
  21.                          'overwrite' => true));
+ +
+
+ +

Validator: Count

+ + +
    +
  • +

    + Old method API: + Zend_Validate_File_Count($min, $max) +

    +
  • + +
  • +

    + New method API: + Zend_Validate_File_Count($options) + where $options accepts the following array keys: + min equals to $min, + max equals to $max. +

    +
  • +
+ +

Example #2 Changes for the count validator from 1.6 to 1.7

+ + +
  1. // Example for 1.6
  2. +
  3. $upload = new Zend_File_Transfer_Adapter_Http();
  4. +
  5. $upload->addValidator('Count',
  6. +
  7.                       array(2, 3));
  8. +
  9.  
  10. +
  11. // Same example for 1.7
  12. +
  13. $upload = new Zend_File_Transfer_Adapter_Http();
  14. +
  15. $upload->addValidator('Count',
  16. +
  17.                       false,
  18. +
  19.                       array('min' => 2,
  20. +
  21.                             'max' => 3));
+ +
+
+ +

Validator:Extension

+ + +
    +
  • +

    + Old method API: + Zend_Validate_File_Extension($extension, $case) +

    +
  • + +
  • +

    + New method API: + Zend_Validate_File_Extension($options) where + $options accepts the following array keys: + * equals to $extension and can + have any other key, case equals to + $case. +

    +
  • +
+ +

Example #3 Changes for the extension validator from 1.6 to 1.7

+ + +
  1. // Example for 1.6
  2. +
  3. $upload = new Zend_File_Transfer_Adapter_Http();
  4. +
  5. $upload->addValidator('Extension',
  6. +
  7.                       array('jpg,gif,bmp', true));
  8. +
  9.  
  10. +
  11. // Same example for 1.7
  12. +
  13. $upload = new Zend_File_Transfer_Adapter_Http();
  14. +
  15. $upload->addValidator('Extension',
  16. +
  17.                       false,
  18. +
  19.                       array('extension1' => 'jpg,gif,bmp',
  20. +
  21.                             'case' => true));
+ +
+
+ +

Validator: FilesSize

+ + +
    +
  • +

    + Old method API: + Zend_Validate_File_FilesSize($min, $max, + $bytestring) +

    +
  • + +
  • +

    + New method API: + Zend_Validate_File_FilesSize($options) where + $options accepts the following array keys: + min equals to $min, + max equals to $max, + bytestring equals to + $bytestring. +

    +
  • +
+ +

+ Additionally, the useByteString() method + signature has changed. It can only be used to test if the + validator is expecting to use byte strings in generated + messages. To set the value of the flag, use the + setUseByteString() method. +

+ +

Example #4 Changes for the filessize validator from 1.6 to 1.7

+ + +
  1. // Example for 1.6
  2. +
  3. $upload = new Zend_File_Transfer_Adapter_Http();
  4. +
  5. $upload->addValidator('FilesSize',
  6. +
  7.                    array(100, 10000, true));
  8. +
  9.  
  10. +
  11. // Same example for 1.7
  12. +
  13. $upload = new Zend_File_Transfer_Adapter_Http();
  14. +
  15. $upload->addValidator('FilesSize',
  16. +
  17.                       false,
  18. +
  19.                       array('min' => 100,
  20. +
  21.                             'max' => 10000,
  22. +
  23.                             'bytestring' => true));
  24. +
  25.  
  26. +
  27. // Example for 1.6
  28. +
  29. $upload->useByteString(true); // set flag
  30. +
  31.  
  32. +
  33. // Same example for 1.7
  34. +
  35. $upload->setUseByteSting(true); // set flag
+ +
+
+ +

Validator: Hash

+ + +
    +
  • +

    + Old method API: + Zend_Validate_File_Hash($hash, $algorithm) +

    +
  • + +
  • +

    + New method API: + Zend_Validate_File_Hash($options) + where $options accepts the following array keys: + * equals to $hash and can have + any other key, algorithm equals to + $algorithm. +

    +
  • +
+ +

Example #5 Changes for the hash validator from 1.6 to 1.7

+ + +
  1. // Example for 1.6
  2. +
  3. $upload = new Zend_File_Transfer_Adapter_Http();
  4. +
  5. $upload->addValidator('Hash',
  6. +
  7.                    array('12345', 'md5'));
  8. +
  9.  
  10. +
  11. // Same example for 1.7
  12. +
  13. $upload = new Zend_File_Transfer_Adapter_Http();
  14. +
  15. $upload->addValidator('Hash',
  16. +
  17.                       false,
  18. +
  19.                       array('hash1' => '12345',
  20. +
  21.                             'algorithm' => 'md5'));
+ +
+
+ +

Validator: ImageSize

+ + +
    +
  • +

    + Old method API: + Zend_Validate_File_ImageSize($minwidth, $minheight, + $maxwidth, $maxheight) +

    +
  • + +
  • +

    + New method API: + Zend_Validate_File_FilesSize($options) where + $options accepts the following array keys: + minwidth equals to $minwidth, + maxwidth equals to $maxwidth, + minheight equals to $minheight, + maxheight equals to $maxheight. +

    +
  • +
+ +

Example #6 Changes for the imagesize validator from 1.6 to 1.7

+ + +
  1. // Example for 1.6
  2. +
  3. $upload = new Zend_File_Transfer_Adapter_Http();
  4. +
  5. $upload->addValidator('ImageSize',
  6. +
  7.                       array(10, 10, 100, 100));
  8. +
  9.  
  10. +
  11. // Same example for 1.7
  12. +
  13. $upload = new Zend_File_Transfer_Adapter_Http();
  14. +
  15. $upload->addValidator('ImageSize',
  16. +
  17.                       false,
  18. +
  19.                       array('minwidth' => 10,
  20. +
  21.                             'minheight' => 10,
  22. +
  23.                             'maxwidth' => 100,
  24. +
  25.                             'maxheight' => 100));
+ +
+
+ +

Validator: Size

+ + +
    +
  • +

    + Old method API: + Zend_Validate_File_Size($min, $max, + $bytestring) +

    +
  • + +
  • +

    + New method API: + Zend_Validate_File_Size($options) + where $options accepts the following array keys: + min equals to $min, + max equals to $max, + bytestring equals to + $bytestring. +

    +
  • +
+ +

Example #7 Changes for the size validator from 1.6 to 1.7

+ + +
  1. // Example for 1.6
  2. +
  3. $upload = new Zend_File_Transfer_Adapter_Http();
  4. +
  5. $upload->addValidator('Size',
  6. +
  7.                       array(100, 10000, true));
  8. +
  9.  
  10. +
  11. // Same example for 1.7
  12. +
  13. $upload = new Zend_File_Transfer_Adapter_Http();
  14. +
  15. $upload->addValidator('Size',
  16. +
  17.                       false,
  18. +
  19.                       array('min' => 100,
  20. +
  21.                             'max' => 10000,
  22. +
  23.                             'bytestring' => true));
+ +
+
+
+
+ +

Zend_Locale

+ + +

Changes when using isLocale()

+ + +

+ According to the coding standards isLocale() had to be + changed to return a boolean. In previous releases a string was returned on success. + For release 1.7 a compatibility mode has been added which allows to use the + old behaviour of a returned string, but it triggers a user warning to + mention you to change to the new behaviour. The rerouting which the old + behaviour of isLocale() could have done is no longer + neccessary as all I18n will now process a rerouting themself. +

+ +

+ To migrate your scripts to the new API, simply use the method as + shown below. +

+ +

Example #8 How to change isLocale() from 1.6 to 1.7

+ + +
  1. // Example for 1.6
  2. +
  3. if ($locale = Zend_Locale::isLocale($locale)) {
  4. +
  5.     // do something
  6. +
  7. }
  8. +
  9.  
  10. +
  11. // Same example for 1.7
  12. +
  13.  
  14. +
  15. // You should change the compatiblity mode to prevent user warnings
  16. +
  17. // But you can do this in your bootstrap
  18. +
  19. Zend_Locale::$compatibilityMode = false;
  20. +
  21.  
  22. +
  23. if (Zend_Locale::isLocale($locale)) {
  24. +
  25. }
+ + +

+ Note that you can use the second parameter to see if the locale is correct + without processing a rerouting. +

+ +
  1. // Example for 1.6
  2. +
  3. if ($locale = Zend_Locale::isLocale($locale, false)) {
  4. +
  5.     // do something
  6. +
  7. }
  8. +
  9.  
  10. +
  11. // Same example for 1.7
  12. +
  13.  
  14. +
  15. // You should change the compatiblity mode to prevent user warnings
  16. +
  17. // But you can do this in your bootstrap
  18. +
  19. Zend_Locale::$compatibilityMode = false;
  20. +
  21.  
  22. +
  23. if (Zend_Locale::isLocale($locale, false)) {
  24. +
  25.     if (Zend_Locale::isLocale($locale, true)) {
  26. +
  27.         // no locale at all
  28. +
  29.     }
  30. +
  31.  
  32. +
  33.     // original string is no locale but can be rerouted
  34. +
  35. }
+ +
+
+ +

Changes when using getDefault()

+ + +

+ The meaning of the getDefault() method has been change due + to the fact that we integrated a framework locale which can be set with + setDefault(). It does no longer return the locale chain + but only the set framework locale. +

+ +

+ To migrate your scripts to the new API, simply use the method as + shown below. +

+ +

Example #9 How to change getDefault() from 1.6 to 1.7

+ + +
  1. // Example for 1.6
  2. +
  3. $locales = $locale->getDefault(Zend_Locale::BROWSER);
  4. +
  5.  
  6. +
  7. // Same example for 1.7
  8. +
  9.  
  10. +
  11. // You should change the compatiblity mode to prevent user warnings
  12. +
  13. // But you can do this in your bootstrap
  14. +
  15. Zend_Locale::$compatibilityMode = false;
  16. +
  17.  
  18. +
  19. $locale = Zend_Locale::getOrder(Zend_Locale::BROWSER);
+ + +

+ Note that the second parameter of the old getDefault() + implementation is not available anymore, but the returned values are the same. +

+
+ +

Note: + + Per default the old behaviour is still active, but throws a user warning. + When you have changed your code to the new behaviour you should also change + the compatibility mode to FALSE so that no warning is + thrown anymore. +
+

+
+
+ +

Zend_Translate

+ + +

Setting languages

+ + +

+ When using automatic detection of languages, or setting languages manually + to Zend_Translate you may have mentioned that from time to + time a notice is thrown about not added or empty translations. In some previous + release also an exception was raised in some cases. +

+ +

+ The reason is, that when a user requests a non existing language, you + have no simple way to detect what's going wrong. So we added those + notices which show up in your log and tell you that the user requested + a language which you do not support. Note that the code, even when + we trigger such an notice, keeps working without problems. +

+ +

+ But when you use a own error or exception handler, like xdebug, you + will get all notices returned, even if this was not your intention. + This is due to the fact that these handlers override all settings + from within PHP. +

+ +

+ To get rid of these notices you can simply set the new option + 'disableNotices' to TRUE. It defaults to + FALSE. +

+ +

Example #10 Setting languages without getting notices

+ + +

+ Let's assume that we have 'en' available and our user requests + 'fr' which is not in our portfolio of translated languages. +

+ +
  1. $language = new Zend_Translate('gettext',
  2. +
  3.                                '/path/to/translations',
  4. +
  5.                                'auto');
+ + +

+ In this case we will get an notice about a not available language 'fr'. + Simply add the option and the notices will be disabled. +

+ +
  1. $language = new Zend_Translate('gettext',
  2. +
  3.                                '/path/to/translations',
  4. +
  5.                                'auto',
  6. +
  7.                                array('disableNotices' => true));
+ +
+
+
+ +

Zend_View

+ + +

Note: + + The API changes within Zend_View are only + notable for you when you are upgrading to release 1.7.5 or higher. +
+

+ +

+ Prior to the 1.7.5 release, the Zend Framework team was notified of + a potential Local File Inclusion (LFI) vulnerability in the + Zend_View::render() method. Prior to 1.7.5, the method + allowed, by default, the ability to specify view scripts that + included parent directory notation (e.g., "../" or "..\"). This + opens the possibility for an LFI attack if unfiltered user input is + passed to the render() method: +

+ +
  1. // Where $_GET['foobar'] = '../../../../etc/passwd'
  2. +
  3. echo $view->render($_GET['foobar']); // LFI inclusion
+ + +

+ Zend_View now by default raises an exception when such + a view script is requested. +

+ +

Disabling LFI protection for the render() method

+ + +

+ Since a number of developers reported that they were using such + notation within their applications that was not + the result of user input, a special flag was created to allow + disabling the default protection. You have two methods for doing so: + by passing the 'lfiProtectionOn' key to the constructor options, or + by explicitly calling the setLfiProtection() method. +

+ +
  1. // Disabling via constructor
  2. +
  3. $view = new Zend_View(array('lfiProtectionOn' => false));
  4. +
  5.  
  6. +
  7. // Disabling via exlicit method call:
  8. +
  9. $view = new Zend_View();
  10. +
  11. $view->setLfiProtection(false);
+ +
+
+
+
+ + + + + + + + + +
+ Zend Framework 1.8 + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/migration.18.html b/zend/documentation/manual/core/en/migration.18.html new file mode 100644 index 0000000..970e7d0 --- /dev/null +++ b/zend/documentation/manual/core/en/migration.18.html @@ -0,0 +1,157 @@ + + + + + Zend Framework 1.8 - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Framework 1.9 + + + + +
+
+

Zend Framework 1.8

+ + +

+ When upgrading from a previous release to Zend Framework 1.8 or higher you + should note the following migration notes. +

+ +

Zend_Controller

+ + +

Standard Route Changes

+ + +

+ As translated segments were introduced into the new standard + route, the '@' character is now a special character + in the beginning of a route segment. To be able to use it in a + static segment, you must escape it by prefixing it with second + '@' character. The same rule now applies for the + ':' character. +

+
+
+ +

Zend_Locale

+ + +

Default caching

+ + +

+ As with Zend Framework 1.8 a default caching was added. The reason behind this + change was, that most users had performance problems but did not add caching at + all. As the I18n core is a bottleneck when no caching is used we decided to add + a default caching when no cache has been set to Zend_Locale. +

+ +

+ Sometimes it is still wanted to prevent caching at all even if this decreases + performance. To do so you can simply disable caching by using the + disableCache() method. +

+ +

Example #1 Disabling default caching

+ + +
  1. Zend_Locale::disableCache(true);
+ +
+
+
+
+
+ + + + + + + + + +
+ Zend Framework 1.9 + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/migration.19.html b/zend/documentation/manual/core/en/migration.19.html new file mode 100644 index 0000000..ab92ee8 --- /dev/null +++ b/zend/documentation/manual/core/en/migration.19.html @@ -0,0 +1,545 @@ + + + + + Zend Framework 1.9 - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Framework 1.10 + + + + +
+
+

Zend Framework 1.9

+ + +

+ When upgrading from a release of Zend Framework earlier than 1.9.0 to any 1.9 release, you + should note the following migration notes. +

+ +

Zend_File_Transfer

+ + +

MimeType validation

+ + +

+ For security reasons we had to turn off the default fallback mechanism of the + MimeType, ExcludeMimeType, + IsCompressed and IsImage validators. + This means, that if the fileInfo or + magicMime extensions can not be found, the validation will + always fail. +

+ +

+ If you are in need of validation by using the HTTP fields which + are provided by the user then you can turn on this feature by using the + enableHeaderCheck() method. +

+ +

Note: Security hint
+ + + + You should note that relying on the HTTP fields, which are + provided by your user, is a security risk. They can easily be changed and could + allow your user to provide a malcious file. +
+

+ +

Example #1 Allow the usage of the HTTP fields

+ + +
  1. // at initiation
  2. +
  3. $valid = new Zend_File_Transfer_Adapter_Http(array('headerCheck' => true);
  4. +
  5.  
  6. +
  7. // or afterwards
  8. +
  9. $valid->enableHeaderCheck();
+ +
+
+
+ +

Zend_Filter

+ + +

+ Prior to the 1.9 release, Zend_Filter allowed + the usage of the static get() method. As with + release 1.9 this method has been renamed to + filterStatic() to be more descriptive. The + old get() method is marked as deprecated. +

+
+ +

Zend_Http_Client

+ + +

Changes to internal uploaded file information storage

+ + +

+ In version 1.9 of Zend Framework, there has been a change in the way + Zend_Http_Client internally stores information about + files to be uploaded, set using the + Zend_Http_Client::setFileUpload() method. +

+ +

+ This change was introduced in order to allow multiple files to be uploaded + with the same form name, as an array of files. More information about this issue + can be found in » this bug report. +

+ +

Example #2 Internal storage of uploaded file information

+ + +
  1. // Upload two files with the same form element name, as an array
  2. +
  3. $client = new Zend_Http_Client();
  4. +
  5. $client->setFileUpload('file1.txt',
  6. +
  7.                        'userfile[]',
  8. +
  9.                        'some raw data',
  10. +
  11.                        'text/plain');
  12. +
  13. $client->setFileUpload('file2.txt',
  14. +
  15.                        'userfile[]',
  16. +
  17.                        'some other data',
  18. +
  19.                        'application/octet-stream');
  20. +
  21.  
  22. +
  23. // In Zend Framework 1.8 or older, the value of
  24. +
  25. // the protected member $client->files is:
  26. +
  27. // $client->files = array(
  28. +
  29. //     'userfile[]' => array('file2.txt',
  30. +
  31.                              'application/octet-stream',
  32. +
  33.                              'some other data')
  34. +
  35. // );
  36. +
  37.  
  38. +
  39. // In Zend Framework 1.9 or newer, the value of $client->files is:
  40. +
  41. // $client->files = array(
  42. +
  43. //     array(
  44. +
  45. //         'formname' => 'userfile[]',
  46. +
  47. //         'filename' => 'file1.txt,
  48. +
  49. //         'ctype'    => 'text/plain',
  50. +
  51. //         'data'     => 'some raw data'
  52. +
  53. //     ),
  54. +
  55. //     array(
  56. +
  57. //         'formname' => 'userfile[]',
  58. +
  59. //         'filename' => 'file2.txt',
  60. +
  61. //         'formname' => 'application/octet-stream',
  62. +
  63. //         'formname' => 'some other data'
  64. +
  65. //     )
  66. +
  67. // );
+ +
+ +

+ As you can see, this change permits the usage of the same form element name with + more than one file - however, it introduces a subtle backwards-compatibility change + and as such should be noted. +

+
+ +

Deprecation of Zend_Http_Client::_getParametersRecursive()

+ + +

+ Starting from version 1.9, the protected method + _getParametersRecursive() is no longer used by + Zend_Http_Client and is deprecated. Using it will cause an + E_NOTICE message to be emitted by PHP. +

+ +

+ If you subclass Zend_Http_Client and call this method, you + should look into using the + Zend_Http_Client::_flattenParametersArray() static method + instead. +

+ +

+ Again, since this _getParametersRecursive() is a protected + method, this change will only affect users who subclass + Zend_Http_Client. +

+
+
+ +

Zend_Locale

+ + +

Deprecated methods

+ + +

+ Some specialized translation methods have been deprecated because they duplicate + existing behaviour. Note that the old methods will still work, but a user notice is + triggered which describes the new call. The methods will be erased with 2.0. + See the following list for old and new method call. +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
List of measurement types
Old callNew call
+ getLanguageTranslationList($locale) + + getTranslationList('language', $locale) +
+ getScriptTranslationList($locale) + + getTranslationList('script', $locale) +
+ getCountryTranslationList($locale) + + getTranslationList('territory', $locale, 2) +
+ getTerritoryTranslationList($locale) + + getTranslationList('territory', $locale, 1) +
+ getLanguageTranslation($value, $locale) + + getTranslation($value, 'language', $locale) +
+ getScriptTranslation($value, $locale) + + getTranslation($value, 'script', $locale) +
+ getCountryTranslation($value, $locale) + + getTranslation($value, 'country', $locale) +
+ getTerritoryTranslation($value, $locale) + + getTranslation($value, 'territory', + $locale) +
+ +
+
+ +

Zend_View_Helper_Navigation

+ + +

+ Prior to the 1.9 release, the menu helper + (Zend_View_Helper_Navigation_Menu) did not + render sub menus correctly. When onlyActiveBranch + was TRUE and the option renderParents + FALSE, nothing would be rendered if the deepest active + page was at a depth lower than the minDepth option. +

+ +

+ In simpler words; if minDepth was set to '1' + and the active page was at one of the first level pages, nothing + would be rendered, as the following example shows. +

+ +

+ Consider the following container setup: +

+ +
  1. <?php
  2. +
  3. $container = new Zend_Navigation(array(
  4. +
  5.     array(
  6. +
  7.         'label' => 'Home',
  8. +
  9.         'uri'   => '#'
  10. +
  11.     ),
  12. +
  13.     array(
  14. +
  15.         'label'  => 'Products',
  16. +
  17.         'uri'    => '#',
  18. +
  19.         'active' => true,
  20. +
  21.         'pages'  => array(
  22. +
  23.             array(
  24. +
  25.                 'label' => 'Server',
  26. +
  27.                 'uri'   => '#'
  28. +
  29.             ),
  30. +
  31.             array(
  32. +
  33.                 'label' => 'Studio',
  34. +
  35.                 'uri'   => '#'
  36. +
  37.             )
  38. +
  39.         )
  40. +
  41.     ),
  42. +
  43.     array(
  44. +
  45.         'label' => 'Solutions',
  46. +
  47.         'uri'   => '#'
  48. +
  49.     )
  50. +
  51. ));
+ + +

+ The following code is used in a view script: +

+ +
  1. <?php echo $this->navigation()->menu()->renderMenu($container, array(
  2. +
  3.     'minDepth'         => 1,
  4. +
  5.     'onlyActiveBranch' => true,
  6. +
  7.     'renderParents'    => false
  8. +
  9. )); ?>
+ + +

+ Before release 1.9, the code snippet above would output nothing. +

+ +

+ Since release 1.9, the _renderDeepestMenu() method in + Zend_View_Helper_Navigation_Menu will accept + active pages at one level below minDepth, as long as + the page has children. +

+ +

+ The same code snippet will now output the following: +

+ +
  1. <ul class="navigation">
  2. +
  3.     <li>
  4. +
  5.         <a href="#">Server</a>
  6. +
  7.     </li>
  8. +
  9.     <li>
  10. +
  11.         <a href="#">Studio</a>
  12. +
  13.     </li>
  14. +
  15. </ul>
+ +
+ +

Security fixes as with 1.9.7

+ + +

+ Additionally, users of the 1.9 series may be affected by other changes starting in + version 1.9.7. These are all security fixes that also have potential backwards + compatibility implications. +

+ +

Zend_Dojo_View_Helper_Editor

+ + +

+ A slight change was made in the 1.9 series to modify the default usage of the Editor + dijit to use div tags instead of a textarea + tag; the latter usage has » security + implications, and usage of div tags is recommended by the + Dojo project. +

+ +

+ In order to still allow graceful degradation, a new degrade + option was added to the view helper; this would allow developers to optionally use a + textarea instead. However, this opens applications developed with + that usage to XSS vectors. In 1.9.7, we have removed this option. + Graceful degradation is still supported, however, via a noscript + tag that embeds a textarea. This solution addressess all security + concerns. +

+ +

+ The takeaway is that if you were using the degrade flag, it will + simply be ignored at this time. +

+
+ +

Zend_Filter_HtmlEntities

+ + +

+ In order to default to a more secure character encoding, + Zend_Filter_HtmlEntities now defaults to + UTF-8 instead of ISO-8859-1. +

+ +

+ Additionally, because the actual mechanism is dealing with character encodings and + not character sets, two new methods have been added, + setEncoding() and getEncoding(). + The previous methods setCharSet() and + setCharSet() are now deprecated and proxy to the new + methods. Finally, instead of using the protected members directly within the + filter() method, these members are retrieved by their + explicit accessors. If you were extending the filter in the past, please check your + code and unit tests to ensure everything still continues to work. +

+
+ +

Zend_Filter_StripTags

+ + +

+ Zend_Filter_StripTags contains a flag, + commentsAllowed, that, in previous versions, allowed you to + optionally whitelist HTML comments in HTML + text filtered by the class. However, this opens code enabling the flag to + XSS attacks, particularly in Internet Explorer (which allows + specifying conditional functionality via HTML comments). Starting + in version 1.9.7 (and backported to versions 1.8.5 and 1.7.9), the + commentsAllowed flag no longer has any meaning, and all + HTML comments, including those containing other + HTML tags or nested commments, will be stripped from the final + output of the filter. +

+
+
+
+
+ + + + + + + + + +
+ Zend Framework 1.10 + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/migration.html b/zend/documentation/manual/core/en/migration.html new file mode 100644 index 0000000..47f0645 --- /dev/null +++ b/zend/documentation/manual/core/en/migration.html @@ -0,0 +1,129 @@ + + + + + Zend Gdata Migration Notes - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Introduction + + + + +
+
+ +
+ + + + + + + + + +
+ Introduction + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/performance.classloading.html b/zend/documentation/manual/core/en/performance.classloading.html new file mode 100644 index 0000000..726e4ac --- /dev/null +++ b/zend/documentation/manual/core/en/performance.classloading.html @@ -0,0 +1,441 @@ + + + + + Class Loading - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Introduction + + + + +
+
+

Class Loading

+ + +

+ Anyone who ever performs profiling of a Zend Framework application will + immediately recognize that class loading is relatively expensive in Zend + Framework. Between the sheer number of class files that need to be + loaded for many components, to the use of plugins that do not have a 1:1 + relationship between their class name and the file system, the various + calls to include_once() and + require_once() can be problematic. This chapter intends to provide + some concrete solutions to these issues. +

+ +

How can I optimize my include_path?

+ + +

+ One trivial optimization you can do to increase the speed of class + loading is to pay careful attention to your include_path. In + particular, you should do four things: use absolute paths (or paths + relative to absolute paths), reduce the number of include paths you + define, have your Zend Framework include_path as early as possible, + and only include the current directory path at the end of your + include_path. +

+ +

Use absolute paths

+ + +

+ While this may seem a micro-optimization, the fact is that if + you don't, you'll get very little benefit from PHP's realpath + cache, and as a result, opcode caching will not perform nearly + as you may expect. +

+ +

+ There are two easy ways to ensure this. First, you can hardcode + the paths in your php.ini, httpd.conf, + or .htaccess. Second, you + can use PHP's realpath() function when + setting your include_path: +

+ +
  1. $paths = array(
  2. +
  3.     realpath(dirname(__FILE__) . '/../library'),
  4. +
  5.     '.',
  6. +
  7. );
  8. +
  9. set_include_path(implode(PATH_SEPARATOR, $paths);
+ + +

+ You can use relative paths -- so long as + they are relative to an absolute path: +

+ +
  1. define('APPLICATION_PATH', realpath(dirname(__FILE__)));
  2. +
  3. $paths = array(
  4. +
  5.     APPLICATION_PATH . '/../library'),
  6. +
  7.     '.',
  8. +
  9. );
  10. +
  11. set_include_path(implode(PATH_SEPARATOR, $paths);
+ + +

+ However, even so, it's typically a trivial task to simply pass + the path to realpath(). +

+
+ +

Reduce the number of include paths you define

+ + +

+ Include paths are scanned in the order in which they appear in + the include_path. Obviously, this means that you'll get a result + faster if the file is found on the first scan rather than the + last. Thus, a rather obvious enhancement is to simply reduce the + number of paths in your include_path to only what you need. Look + through each include_path you've defined, and determine if you + actually have any functionality in that path that is used in + your application; if not, remove it. +

+ +

+ Another optimization is to combine paths. For instance, Zend + Framework follows PEAR naming conventions; thus, if you are + using PEAR libraries (or libraries from another framework or + component library that follows PEAR CS), try to put all of these + libraries on the same include_path. This can often be achieved + by something as simple as symlinking one or more libraries into + a common directory. +

+
+ +

Define your Zend Framework include_path as early as possible

+ + +

+ Continuing from the previous suggestion, another obvious + optimization is to define your Zend Framework include_path as + early as possible in your include_path. In most cases, it should + be the first path in the list. This ensures that files included + from Zend Framework are found on the first scan. +

+
+ +

Define the current directory last, or not at all

+ + +

+ Most include_path examples show using the current directory, or + '.'. This is convenient for ensuring that scripts in the same + directory as the file requiring them can be loaded. However, + these same examples typically show this path item as the first + item in the include_path -- which means that the current + directory tree is always scanned first. In most cases, with Zend + Framework applications, this is not desired, and the path may be + safely pushed to the last item in the list. +

+ +

Example #1 Example: Optimized include_path

+ + +

+ Let's put all of these suggestions together. Our assumption will be that you + are using one or more PEAR libraries in conjunction with + Zend Framework -- perhaps the PHPUnit and Archive_Tar + libraries -- and that you occasionally need to include + files relative to the current file. +

+ +

+ First, we'll create a library directory in our project. Inside that + directory, we'll symlink our Zend Framework's library/Zend + directory, as well as the necessary directories from our PEAR + installation: +

+ +
  1. library
  2. +
  3.     Archive/
  4. +
  5.     PEAR/
  6. +
  7.     PHPUnit/
  8. +
  9.     Zend/
+ + +

+ This allows us to add our own library code if necessary, while + keeping shared libraries intact. +

+ +

+ Next, we'll opt to create our include_path programmatically + within our public/index.php file. This allows us to move + our code around on the file system, without needing to edit the + include_path every time. +

+ +

+ We'll borrow ideas from each of the suggestions above: we'll use + absolute paths, as determined using realpath(); + we'll include Zend Framework's include path early; we've + already consolidated include_paths; and we'll put the current + directory as the last path. In fact, we're doing really well + here -- we're going to end up with only two paths. +

+ +
  1. $paths = array(
  2. +
  3.     realpath(dirname(__FILE__) . '/../library'),
  4. +
  5.     '.'
  6. +
  7. );
  8. +
  9. set_include_path(implode(PATH_SEPARATOR, $paths));
+ +
+
+
+ +

How can I eliminate unnecessary require_once statements?

+ + +

+ Lazy loading is an optimization technique designed to push the + expensive operation of loading a class file until the last possible + moment -- i.e., when instantiating an object of that class, calling + a static class method, or referencing a class constant or static + property. PHP supports this via autoloading, which allows you to + define one or more callbacks to execute in order to map a class name + to a file. +

+ +

+ However, most benefits you may reap from autoloading are negated if + your library code is still performing require_once() calls -- + which is precisely the case with Zend Framework. So, the question is: how can + you eliminate those require_once() calls in order to maximize + autoloader performance? +

+ +

Strip require_once calls with find and sed

+ + +

+ An easy way to strip require_once() calls is to use the + UNIX utilities 'find' and 'sed' in conjunction to comment out + each call. Try executing the following statements (where '%' + indicates the shell prompt): +

+ +
  1. % cd path/to/ZendFramework/library
  2. +
  3. % find . -name '*.php' -not -wholename '*/Loader/Autoloader.php' \
  4. +
  5.   -not -wholename '*/Application.php' -print0 | \
  6. +
  7.   xargs -0 sed --regexp-extended --in-place 's/(require_once)/\/\/ \1/g'
+ + +

+ This one-liner (broken into two lines for readability) iterates + through each PHP file and tells it to replace each instance of + 'require_once' with '// require_once', effectively commenting + out each such statement. (It selectively keeps + require_once() calls within + Zend_Application and + Zend_Loader_Autoloader, as these classes will fail without + them.) +

+ +

+ This command could be added to an automated build or release + process trivially, helping boost performance in your production + application. It should be noted, however, that if you use this + technique, you must utilize autoloading; + you can do that from your "public/index.php" file with the + following code: +

+ +
  1. require_once 'Zend/Loader/Autoloader.php';
  2. +
  3. Zend_Loader_Autoloader::getInstance();
+ +
+
+ +

How can I speed up plugin loading?

+ + +

+ Many components have plugins, which allow you to create your own + classes to utilize with the component, as well as to override + existing, standard plugins shipped with Zend Framework. This + provides important flexibility to the framework, but at a price: + plugin loading is a fairly expensive task. +

+ +

+ The plugin loader allows you to register class prefix / path pairs, + allowing you to specify class files in non-standard paths. Each + prefix can have multiple paths associated with it. + Internally, the plugin loader loops through each prefix, and then + through each path attached to it, testing to see if the file exists + and is readable on that path. It then loads it, and tests to see + that the class it is looking for is available. As you might imagine, + this can lead to many stat calls on the file system. +

+ +

+ Multiply this by the number of components that use the PluginLoader, + and you get an idea of the scope of this issue. At the time of this + writing, the following components made use of the PluginLoader: +

+ +
    +
  • +

    + Zend_Controller_Action_HelperBroker: helpers +

    +
  • + +
  • +

    + Zend_Dojo: view helpers, form elements and decorators +

    +
  • + +
  • +

    + Zend_File_Transfer: adapters +

    +
  • + +
  • +

    + Zend_Filter_Inflector: filters (used by the + ViewRenderer action helper and Zend_Layout) +

    +
  • + +
  • +

    + Zend_Filter_Input: filters and validators +

    +
  • + +
  • +

    + Zend_Form: elements, validators, filters, + decorators, captcha and file transfer adapters +

    +
  • + +
  • +

    + Zend_Paginator: adapters +

    +
  • + +
  • +

    + Zend_View: helpers, filters +

    +
  • +
+ +

+ How can you reduce the number of such calls made? +

+ +

Use the PluginLoader include file cache

+ + +

+ Zend Framework 1.7.0 adds an include file cache to the + PluginLoader. This functionality writes " include_once()" + calls to a file, which you can then include in your bootstrap. While this + introduces extra include_once() calls to your code, it + also ensures that the PluginLoader returns as early as possible. +

+ +

+ The PluginLoader documentation includes + a complete example of its use. +

+
+
+
+
+ + + + + + + + + +
+ Introduction + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/performance.database.html b/zend/documentation/manual/core/en/performance.database.html new file mode 100644 index 0000000..a4b0ea8 --- /dev/null +++ b/zend/documentation/manual/core/en/performance.database.html @@ -0,0 +1,202 @@ + + + + + Zend_Db Performance - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Class Loading + + + + +
+
+

Zend_Db Performance

+ + +

+ Zend_Db is a database abstraction layer, and is intended to + provide a common API for SQL operations. + Zend_Db_Table is a + Table Data Gateway, intended to abstract common table-level database + operations. Due to their abstract nature and the "magic" they do under + the hood to perform their operations, they can sometimes introduce + performance overhead. +

+ +

How can I reduce overhead introduced by Zend_Db_Table for + retrieving table metadata?

+ + +

+ In order to keep usage as simple as possible, and also to support + constantly changing schemas during development, + Zend_Db_Table does some magic under the hood: on + first use, it fetches the table schema and stores it within object + members. This operation is typically expensive, regardless of the + database -- which can contribute to bottlenecks in production. +

+ +

+ Fortunately, there are techniques for improving the situation. +

+ +

Use the metadata cache

+ + +

+ Zend_Db_Table can optionally utilize + Zend_Cache to cache table metadata. This is + typically faster to access and less expensive than fetching the + metadata from the database itself. +

+ +

+ The Zend_Db_Table + documentation includes information on metadata caching. +

+
+ +

Hardcode your metadata in the table definition

+ + +

+ As of 1.7.0, Zend_Db_Table also provides support + for hardcoding metadata in the table definition. This is + an advanced use case, and should only be used when you know the + table schema is unlikely to change, or that you're able to keep + the definitions up-to-date. +

+
+
+ +

+ SQL generated with Zend_Db_Select s not hitting my indexes; how can I make it better? +

+ + +

+ Zend_Db_Select is relatively good at its job. However, + if you are performing complex queries requiring joins or + sub-selects, it can often be fairly naive. +

+ +

Write your own tuned SQL

+ + +

+ The only real answer is to write your own SQL; + Zend_Db does not require the usage of + Zend_Db_Select, so providing your own, tuned + SQL select statements is a perfectly legitimate approach, +

+ +

+ Run EXPLAIN on your queries, and test a variety of + approaches until you can reliably hit your indices in the most + performant way -- and then hardcode the SQL as a class property + or constant. +

+ +

+ If the SQL requires variable arguments, provide placeholders in + the SQL, and utilize a combination of + vsprintf() and array_map() to + inject the values into the SQL: +

+ +
  1. // $adapter is the DB adapter. In Zend_Db_Table, retrieve
  2. +
  3. // it using $this->getAdapter().
  4. +
  5. $sql = vsprintf(
  6. +
  7.     self::SELECT_FOO,
  8. +
  9.     array_map(array($adapter, 'quoteInto'), $values)
  10. +
  11. );
+ +
+
+
+
+ + + + + + + + + +
+ Class Loading + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/performance.html b/zend/documentation/manual/core/en/performance.html new file mode 100644 index 0000000..23246d9 --- /dev/null +++ b/zend/documentation/manual/core/en/performance.html @@ -0,0 +1,117 @@ + + + + + Zend Gdata Performance Guide - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Rewrite Configuration Guide + + + + +
+
+
+

Zend Gdata Performance Guide

Table of Contents + + + + + + +
+
+ + + + + + + + + +
+ Rewrite Configuration Guide + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/performance.introduction.html b/zend/documentation/manual/core/en/performance.introduction.html new file mode 100644 index 0000000..b6f9eb6 --- /dev/null +++ b/zend/documentation/manual/core/en/performance.introduction.html @@ -0,0 +1,108 @@ + + + + + Introduction - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Gdata Performance Guide + + + + +
+
+

Introduction

+ + +

+ The purpose of this appendix is to provide some concrete strategies for + improving the performance of your Zend Framework applications. The guide + is presented in a "Question and Answer" format, and broken into areas of + concern. +

+
+
+ + + + + + + + + +
+ Zend Gdata Performance Guide + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/performance.localization.html b/zend/documentation/manual/core/en/performance.localization.html new file mode 100644 index 0000000..c136966 --- /dev/null +++ b/zend/documentation/manual/core/en/performance.localization.html @@ -0,0 +1,222 @@ + + + + + Internationalization (i18n) and Localization (l10n) - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Db Performance + + + + +
+
+

Internationalization (i18n) and Localization (l10n)

+ + +

+ Internationalizing and localizing a site are fantastic ways to expand + your audience and ensure that all visitors can get to the information + they need. However, it often comes with a performance penalty. Below + are some strategies you can employ to reduce the overhead of i18n and + l10n. +

+ +

Which translation adapter should I use?

+ + +

+ Not all translation adapters are made equal. Some have more + features than others, and some perform better than others. + Additionally, you may have business requirements that force you to + use a particular adapter. However, if you have a choice, which + adapters are fastest? +

+ +

Use non-XML translation adapters for greatest speed

+ + +

+ Zend Framework ships with a variety of translation adapters. + Fully half of them utilize an XML format, incurring memory and + performance overhead. Fortunately, there are several adapters + that utilize other formats that can be parsed much more + quickly. In order of speed, from fastest to slowest, they are: +

+ +
    +
  • +

    + Array: this is the fastest, as it is, by + definition, parsed into a native PHP format immediately + on inclusion. +

    +
  • + +
  • +

    + CSV: uses + fgetcsv() to parse a CSV file + and transform it into a native PHP format. +

    +
  • + +
  • +

    + INI: uses + parse_ini_file() to parse an INI + file and transform it into a native PHP format. This and + the CSV adapter are roughly equivalent performance-wise. +

    +
  • + +
  • +

    + Gettext: The gettext adapter from Zend Framework + does not use the gettext + extension as it is not thread safe and does not allow + specifying more than one locale per server. As a result, it + is slower than using the gettext extension directly, but, + because the gettext format is binary, it's faster to parse + than XML. +

    +
  • +
+ +

+ If high performance is one of your concerns, we suggest + utilizing one of the above adapters. +

+
+
+ +

How can I make translation and localization even faster?

+ + +

+ Maybe, for business reasons, you're limited to an XML-based + translation adapter. Or perhaps you'd like to speed things up even + more. Or perhaps you want to make l10n operations faster. How can + you do this? +

+ +

Use translation and localization caches

+ + +

+ Both Zend_Translate and Zend_Locale + implement caching functionality that can greatly affect + performance. In the case of each, the major bottleneck is + typically reading the files, not the actual lookups; using a + cache eliminates the need to read the translation and/or + localization files. +

+ +

+ You can read about caching of translation and localization + strings in the following locations: +

+ + +
+
+
+
+ + + + + + + + + +
+ Zend_Db Performance + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/performance.view.html b/zend/documentation/manual/core/en/performance.view.html new file mode 100644 index 0000000..8d6cb11 --- /dev/null +++ b/zend/documentation/manual/core/en/performance.view.html @@ -0,0 +1,454 @@ + + + + + View Rendering - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Internationalization (i18n) and Localization (l10n) + + + + +
+
+

View Rendering

+ + +

+ When using Zend Framework's MVC layer, chances are you will be using + Zend_View. Zend_View is performs well + compared to other view or templating engines; since view scripts + are written in PHP, you do not incur the overhead of compiling custom + markup to PHP, nor do you need to worry that the compiled + PHP is not optimized. However, Zend_View presents + its own issues: extension is done via overloading (view helpers), and a number of view + helpers, while carrying out key functionality do so with a performance + cost. +

+ +

How can I speed up resolution of view helpers?

+ + +

+ Most Zend_View "methods" are actually provided via + overloading to the helper system. This provides important flexibility to + Zend_View; instead of needing to extend + Zend_View and provide all the helper methods you may + utilize in your application, you can define your helper methods in separate + classes and consume them at will as if they were direct methods of + Zend_View. This keeps the view object itself relatively + thin, and ensures that objects are created only when needed. +

+ +

+ Internally, Zend_View uses the PluginLoader to look + up helper classes. This means that for each helper you call, + Zend_View needs to pass the helper name to the + PluginLoader, which then needs to determine the class name, load the + class file if necessary, and then return the class name so it may be + instantiated. Subsequent uses of the helper are much faster, as + Zend_View keeps an internal registry of loaded helpers, + but if you use many helpers, the calls add up. +

+ +

+ The question, then, is: how can you speed up helper resolution? +

+ +

Use the PluginLoader include file cache

+ + +

+ The simplest, cheapest solution is the same as for general + PluginLoader performance: use + the PluginLoader include file cache. Anecdotal + evidence has shown this technique to provide a 25-30% + performance gain on systems without an opcode cache, and a + 40-65% gain on systems with an opcode cache. +

+
+ +

Extend Zend_View to provide often used helper methods

+ + +

+ Another solution for those seeking to tune performance even + further is to extend Zend_View to manually add the + helper methods they most use in their application. Such helper + methods may simply manually instantiate the appropriate helper + class and proxy to it, or stuff the full helper implementation + into the method. +

+ +
  1. class My_View extends Zend_View
  2. +
  3. {
  4. +
  5.     /**
  6. +
  7.      * @var array Registry of helper classes used
  8. +
  9.      */
  10. +
  11.     protected $_localHelperObjects = array();
  12. +
  13.  
  14. +
  15.     /**
  16. +
  17.      * Proxy to url view helper
  18. +
  19.      *
  20. +
  21.      * @param  array $urlOptions Options passed to the assemble method
  22. +
  23.      *                           of the Route object.
  24. +
  25.      * @param  mixed $name The name of a Route to use. If null it will
  26. +
  27.      *                     use the current Route
  28. +
  29.      * @param  bool $reset Whether or not to reset the route defaults
  30. +
  31.      *                     with those provided
  32. +
  33.      * @return string Url for the link href attribute.
  34. +
  35.      */
  36. +
  37.     public function url(array $urlOptions = array(), $name = null,
  38. +
  39.         $reset = false, $encode = true
  40. +
  41.     ) {
  42. +
  43.         if (!array_key_exists('url', $this->_localHelperObjects)) {
  44. +
  45.             $this->_localHelperObjects['url'] = new Zend_View_Helper_Url();
  46. +
  47.             $this->_localHelperObjects['url']->setView($this);
  48. +
  49.         }
  50. +
  51.         $helper = $this->_localHelperObjects['url'];
  52. +
  53.         return $helper->url($urlOptions, $name, $reset, $encode);
  54. +
  55.     }
  56. +
  57.  
  58. +
  59.     /**
  60. +
  61.      * Echo a message
  62. +
  63.      *
  64. +
  65.      * Direct implementation.
  66. +
  67.      *
  68. +
  69.      * @param  string $string
  70. +
  71.      * @return string
  72. +
  73.      */
  74. +
  75.     public function message($string)
  76. +
  77.     {
  78. +
  79.         return "<h1>" . $this->escape($message) . "</h1>\n";
  80. +
  81.     }
  82. +
  83. }
+ + +

+ Either way, this technique will substantially reduce the + overhead of the helper system by avoiding calls to the + PluginLoader entirely, and either benefiting from autoloading or + bypassing it altogether. +

+
+
+ +

How can I speed up view partials?

+ + +

+ Those who use partials heavily and who profile their applications + will often immediately notice that the partial() view + helper incurs a lot of overhead, due to the need to clone the view + object. Is it possible to speed this up? +

+ +

Use partial() only when really necessary

+ + +

+ The partial() view helper accepts three arguments: +

+ +
    +
  • +

    + $name: the name of the view script to render +

    +
  • + +
  • +

    + $module: the name of the module in which the + view script resides; or, if no third argument is provided + and this is an array or object, it will be the + $model argument. +

    +
  • + +
  • +

    + $model: an array or object to pass to the + partial representing the clean data to assign to the view. +

    +
  • +
+ +

+ The power and use of partial() come from the second + and third arguments. The $module argument allows + partial() to temporarily add a script path for the + given module so that the partial view script will resolve to + that module; the $model argument allows you to + explicitly pass variables for use with the partial view. + If you're not passing either argument, use + render() instead! +

+ +

+ Basically, unless you are actually passing variables to the + partial and need the clean variable scope, or rendering a view + script from another MVC module, there is no reason to incur the + overhead of partial(); instead, use + Zend_View's built-in render() + method to render the view script. +

+
+
+ +

How can I speed up calls to the action() view helper?

+ + +

+ Version 1.5.0 introduced the action() view helper, + which allows you to dispatch an MVC action and capture its rendered + content. This provides an important step towards the DRY principle, + and promotes code reuse. However, as those who profile their + applications will quickly realize, it, too, is an expensive + operation. Internally, the action() view helper needs + to clone new request and response objects, invoke the dispatcher, + invoke the requested controller and action, etc. +

+ +

+ How can you speed it up? +

+ +

Use the ActionStack when possible

+ + +

+ Introduced at the same time as the action() view + helper, the ActionStack + consists of an action helper and a front controller plugin. + Together, they allow you to push additional actions to invoke + during the dispatch cycle onto a stack. If you are calling + action() from your layout view scripts, you may + want to instead use the ActionStack, and render your views to + discrete response segments. As an example, you could write a + dispatchLoopStartup() plugin like the following to + add a login form box to each page: +

+ +
  1. class LoginPlugin extends Zend_Controller_Plugin_Abstract
  2. +
  3. {
  4. +
  5.     protected $_stack;
  6. +
  7.  
  8. +
  9.     public function dispatchLoopStartup(
  10. +
  11.         Zend_Controller_Request_Abstract $request
  12. +
  13.     ) {
  14. +
  15.         $stack = $this->getStack();
  16. +
  17.         $loginRequest = new Zend_Controller_Request_Simple();
  18. +
  19.         $loginRequest->setControllerName('user')
  20. +
  21.                      ->setActionName('index')
  22. +
  23.                      ->setParam('responseSegment', 'login');
  24. +
  25.         $stack->pushStack($loginRequest);
  26. +
  27.     }
  28. +
  29.  
  30. +
  31.     public function getStack()
  32. +
  33.     {
  34. +
  35.         if (null === $this->_stack) {
  36. +
  37.             $front = Zend_Controller_Front::getInstance();
  38. +
  39.             if (!$front->hasPlugin('Zend_Controller_Plugin_ActionStack')) {
  40. +
  41.                 $stack = new Zend_Controller_Plugin_ActionStack();
  42. +
  43.                 $front->registerPlugin($stack);
  44. +
  45.             } else {
  46. +
  47.                 $stack = $front->getPlugin('ActionStack')
  48. +
  49.             }
  50. +
  51.             $this->_stack = $stack;
  52. +
  53.         }
  54. +
  55.         return $this->_stack;
  56. +
  57.     }
  58. +
  59. }
+ + +

+ The UserController::indexAction() method might then + use the $responseSegment parameter to indicate which + response segment to render to. In the layout script, you would + then simply render that response segment: +

+ +
  1. <?php $this->layout()->login ?>
+ + +

+ While the ActionStack still requires a dispatch cycle, this is + still cheaper than the action() view helper as it + does not need to clone objects and reset internal state. + Additionally, it ensures that all pre and post dispatch plugins are + invoked, which may be of particular concern if you are using + front controller plugins for handling ACL's to particular + actions. +

+
+ +

Favor helpers that query the model over action()

+ + +

+ In most cases, using action() is simply overkill. + If you have most business logic nested in your models and are + simply querying the model and passing the results to a view + script, it will typically be faster and cleaner to simply write + a view helper that pulls the model, queries it, and does + something with that information. +

+ +

+ As an example, consider the following controller action and view + script: +

+ +
  1. class BugController extends Zend_Controller_Action
  2. +
  3. {
  4. +
  5.     public function listAction()
  6. +
  7.     {
  8. +
  9.         $model = new Bug();
  10. +
  11.         $this->view->bugs = $model->fetchActive();
  12. +
  13.     }
  14. +
  15. }
  16. +
  17.  
  18. +
  19. // bug/list.phtml:
  20. +
  21. echo "<ul>\n";
  22. +
  23. foreach ($this->bugs as $bug) {
  24. +
  25.     printf("<li><b>%s</b>: %s</li>\n",
  26. +
  27.         $this->escape($bug->id),
  28. +
  29.         $this->escape($bug->summary)
  30. +
  31.     );
  32. +
  33. }
  34. +
  35. echo "</ul>\n";
+ + +

+ Using action(), you would then invoke it with the + following: +

+ +
  1. <?php $this->action('list', 'bug') ?>
+ + +

+ This could be refactored to a view helper that looks like the + following: +

+ +
  1. class My_View_Helper_BugList extends Zend_View_Helper_Abstract
  2. +
  3. {
  4. +
  5.     public function bugList()
  6. +
  7.     {
  8. +
  9.         $model = new Bug();
  10. +
  11.         $html  = "<ul>\n";
  12. +
  13.         foreach ($model->fetchActive() as $bug) {
  14. +
  15.             $html .= sprintf(
  16. +
  17.                 "<li><b>%s</b>: %s</li>\n",
  18. +
  19.                 $this->view->escape($bug->id),
  20. +
  21.                 $this->view->escape($bug->summary)
  22. +
  23.             );
  24. +
  25.         }
  26. +
  27.         $html .= "</ul>\n";
  28. +
  29.         return $html;
  30. +
  31.     }
  32. +
  33. }
+ + +

+ You would then invoke the helper as follows: +

+ +
  1. <?php $this->bugList() ?>
+ + +

+ This has two benefits: it no longer incurs the overhead of the + action() view helper, and also presents a more + semantically understandable API. +

+
+
+
+
+ + + + + + + + + +
+ Internationalization (i18n) and Localization (l10n) + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/project-structure.filesystem.html b/zend/documentation/manual/core/en/project-structure.filesystem.html new file mode 100644 index 0000000..e6cafbf --- /dev/null +++ b/zend/documentation/manual/core/en/project-structure.filesystem.html @@ -0,0 +1,129 @@ + + + + + Module Structure - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Recommended Project Directory Structure + + + + +
+
+

Module Structure

+ + +

+ The directory structure for modules should mimic that of the + application/ directory in the recommended project structure: +

+ +
  1. <modulename>
  2. +
  3.     configs/
  4. +
  5.         application.ini
  6. +
  7.     controllers/
  8. +
  9.         helpers/
  10. +
  11.     forms/
  12. +
  13.     layouts/
  14. +
  15.         filters/
  16. +
  17.         helpers/
  18. +
  19.         scripts/
  20. +
  21.     models/
  22. +
  23.     services/
  24. +
  25.     views/
  26. +
  27.         filters/
  28. +
  29.         helpers/
  30. +
  31.         scripts/
  32. +
  33.     Bootstrap.php
+ + +

+ The purpose of these directories remains exactly the same as for the recommended + project directory structure. +

+
+
+ + + + + + + + + +
+ Recommended Project Directory Structure + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/project-structure.html b/zend/documentation/manual/core/en/project-structure.html new file mode 100644 index 0000000..7906006 --- /dev/null +++ b/zend/documentation/manual/core/en/project-structure.html @@ -0,0 +1,119 @@ + + + + + Recommended Project Structure for Zend Framework MVC Applications - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Recommendations + + + + +
+
+

Recommended Project Structure for Zend Framework MVC Applications

Table of Contents +
+ + + + + + + + + +
+
+ + + + + + + + + +
+ Recommendations + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/project-structure.overview.html b/zend/documentation/manual/core/en/project-structure.overview.html new file mode 100644 index 0000000..dfe9564 --- /dev/null +++ b/zend/documentation/manual/core/en/project-structure.overview.html @@ -0,0 +1,126 @@ + + + + + Overview - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Recommended Project Structure for Zend Framework MVC Applications + + + + +
+
+

Overview

+ + +

+ Many developers seek guidance on the best project structure for a Zend Framework project + in a relatively flexible environment. A "flexible" environment is one in which the + developer can manipulate their file systems and web server configurations as needed to + achieve the most ideal project structure to run and secure their application. The + default project structure will assume that the developer has such flexibility at their + disposal. +

+ +

+ The following directory structure is designed to be maximally extensible for complex + projects, while providing a simple subset of folder and files for project with simpler + requirements. This structure also works without alteration for both modular and + non-modular Zend Framework applications. The .htaccess files + require URL rewrite functionality in the web server as described in + the Rewrite Configuration Guide, also + included in this appendix. +

+ +

+ It is not the intention that this project structure will support all possible Zend + Framework project requirements. The default project profile used by + Zend_Tool reflect this project structure, but applications with + requirements not supported by this structure should use a custom project profile. +

+
+
+ + + + + + + + + +
+ Recommended Project Structure for Zend Framework MVC Applications + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/project-structure.project.html b/zend/documentation/manual/core/en/project-structure.project.html new file mode 100644 index 0000000..0cb10ab --- /dev/null +++ b/zend/documentation/manual/core/en/project-structure.project.html @@ -0,0 +1,302 @@ + + + + + Recommended Project Directory Structure - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Overview + + + + +
+
+

Recommended Project Directory Structure

+ + +
  1. <project name>/
  2. +
  3.     application/
  4. +
  5.         configs/
  6. +
  7.             application.ini
  8. +
  9.         controllers/
  10. +
  11.             helpers/
  12. +
  13.         forms/
  14. +
  15.         layouts/
  16. +
  17.             filters/
  18. +
  19.             helpers/
  20. +
  21.             scripts/
  22. +
  23.         models/
  24. +
  25.         modules/
  26. +
  27.         services/
  28. +
  29.         views/
  30. +
  31.             filters/
  32. +
  33.             helpers/
  34. +
  35.             scripts/
  36. +
  37.         Bootstrap.php
  38. +
  39.     data/
  40. +
  41.         cache/
  42. +
  43.         indexes/
  44. +
  45.         locales/
  46. +
  47.         logs/
  48. +
  49.         sessions/
  50. +
  51.         uploads/
  52. +
  53.     docs/
  54. +
  55.     library/
  56. +
  57.     public/
  58. +
  59.         css/
  60. +
  61.         images/
  62. +
  63.         js/
  64. +
  65.         .htaccess
  66. +
  67.         index.php
  68. +
  69.     scripts/
  70. +
  71.         jobs/
  72. +
  73.         build/
  74. +
  75.     temp/
  76. +
  77.     tests/
+ + +

+ The following describes the use cases for each directory as listed. +

+ +
    +
  • +

    + application/: This directory contains + your application. It will house the MVC system, as well as + configurations, services used, and your bootstrap file. +

    + +
      +
    • +

      + configs/: The + application-wide configuration directory. +

      +
    • + +
    • +

      + controllers/, + models/, and + views/: These directories + serve as the default controller, model or view directories. Having + these three directories inside the application directory provides the + best layout for starting a simple project as well as starting a modular + project that has global controllers/models/views. +

      +
    • + +
    • +

      + controllers/helpers/: These + directories will contain action helpers. Action helpers will be + namespaced either as "Controller_Helper_" for + the default module or "<Module>_Controller_Helper" in other + modules. +

      +
    • + +
    • +

      + layouts/: This layout + directory is for MVC-based layouts. Since + Zend_Layout is capable of + MVC- and non-MVC-based layouts, + the location of this directory reflects that layouts are not on a + 1-to-1 relationship with controllers and are independent of templates + within views/. +

      +
    • + +
    • +

      + modules/: Modules allow a + developer to group a set of related controllers into a logically + organized group. The structure under the modules directory would + resemble the structure under the application directory. +

      +
    • + +
    • +

      + services/: This directory is + for your application specific web-service files that are provided by + your application, or for implementing a » Service + Layer for your models. +

      +
    • + +
    • +

      + Bootstrap.php: This file is + the entry point for your application, and should implement + Zend_Application_Bootstrap_Bootstrapper. + The purpose for this file is to bootstrap the application and make + components available to the application by initializing them. +

      +
    • +
    +
  • + +
  • +

    + data/: This directory provides a + place to store application data that is volatile and possibly temporary. The + disturbance of data in this directory might cause the application to fail. + Also, the information in this directory may or may not be committed to a + subversion repository. Examples of things in this directory are session files, + cache files, sqlite databases, logs and indexes. +

    +
  • + +
  • +

    + docs/: This directory contains + documentation, either generated or directly authored. +

    +
  • + +
  • +

    + library/: This directory is for + common libraries on which the application depends, and should be on the + PHP include_path. Developers should + place their application's library code under this directory in a unique + namespace, following the guidelines established in the PHP + manual's » Userland Naming + Guide, as well as those established by Zend itself. This + directory may also include Zend Framework itself; if so, you would house it in + library/Zend/. +

    +
  • + +
  • +

    + public/: This directory contains all + public files for your application. index.php sets up and + invokes Zend_Application, which in turn invokes the + application/Bootstrap.php file, resulting in dispatching + the front controller. The web root of your web server would typically be set to + this directory. +

    +
  • + +
  • +

    + scripts/: This directory contains + maintenance and/or build scripts. Such scripts might include command line, + cron, or phing build scripts that are not executed at runtime but are part of + the correct functioning of the application. +

    +
  • + +
  • +

    + temp/: The temp/ + folder is set aside for transient application data. This information would not + typically be committed to the applications svn repository. If data under the + temp/ directory were deleted, the application should be + able to continue running with a possible decrease in performance until data is + once again restored or recached. +

    +
  • + +
  • +

    + tests/: This directory contains + application tests. These could be hand-written, PHPUnit tests, Selenium-RC + based tests or based on some other testing framework. By default, library code + can be tested by mimicing the directory structure of your + library/ directory. Additionally, functional tests for + your application could be written mimicing the + application/ directory structure (including the + application subdirectory). +

    +
  • +
+
+
+ + + + + + + + + +
+ Overview + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/project-structure.rewrite.html b/zend/documentation/manual/core/en/project-structure.rewrite.html new file mode 100644 index 0000000..3127eae --- /dev/null +++ b/zend/documentation/manual/core/en/project-structure.rewrite.html @@ -0,0 +1,215 @@ + + + + + Rewrite Configuration Guide - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Module Structure + + + + +
+
+

Rewrite Configuration Guide

+ + +

+ URL rewriting is a common function of HTTP + servers. However, the rules and configuration differ widely between them. Below are + some common approaches across a variety of popular web servers available at the time of + writing. +

+ +

Apache HTTP Server

+ + +

+ All examples that follow use mod_rewrite, an official + module that comes bundled with Apache. To use it, + mod_rewrite must either be included at compile time or + enabled as a Dynamic Shared Object (DSO). Please consult the + » Apache documentation for your + version for more information. +

+ +

Rewriting inside a VirtualHost

+ + +

+ Here is a very basic virtual host definition. These rules direct all requests + to index.php, except when a matching file is found under + the document_root. +

+ +
  1. <VirtualHost my.domain.com:80>
  2. +
  3.     ServerName   my.domain.com
  4. +
  5.     DocumentRoot /path/to/server/root/my.domain.com/public
  6. +
  7.  
  8. +
  9.     RewriteEngine off
  10. +
  11.  
  12. +
  13.     <Location />
  14. +
  15.         RewriteEngine On
  16. +
  17.         RewriteCond %{REQUEST_FILENAME} -s [OR]
  18. +
  19.         RewriteCond %{REQUEST_FILENAME} -l [OR]
  20. +
  21.         RewriteCond %{REQUEST_FILENAME} -d
  22. +
  23.         RewriteRule ^.*$ - [NC,L]
  24. +
  25.         RewriteRule ^.*$ /index.php [NC,L]
  26. +
  27.     </Location>
  28. +
  29. </VirtualHost>
+ + +

+ Note the slash ("/") prefixing index.php; the rules for + .htaccess differ in this regard. +

+
+ +

Rewriting within a .htaccess file

+ + +

+ Below is a sample .htaccess file that utilizes + mod_rewrite. It is similar to the virtual host + configuration, except that it specifies only the rewrite rules, and the leading + slash is omitted from index.php. +

+ +
  1. RewriteEngine On
  2. +
  3. RewriteCond %{REQUEST_FILENAME} -s [OR]
  4. +
  5. RewriteCond %{REQUEST_FILENAME} -l [OR]
  6. +
  7. RewriteCond %{REQUEST_FILENAME} -d
  8. +
  9. RewriteRule ^.*$ - [NC,L]
  10. +
  11. RewriteRule ^.*$ index.php [NC,L]
+ + +

+ There are many ways to configure mod_rewrite; if you + would like more information, see Jayson Minard's » Blueprint for PHP Applications: + Bootstrapping. +

+
+ +
+ +

Microsoft Internet Information Server

+ + +

+ As of version 7.0, IIS now ships with a standard rewrite engine. + You may use the following configuration to create the appropriate rewrite rules. +

+ +
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. +
  3. <configuration>
  4. +
  5.     <system.webServer>
  6. +
  7.         <rewrite>
  8. +
  9.             <rules>
  10. +
  11.                 <rule name="Imported Rule 1" stopProcessing="true">
  12. +
  13.                     <match url="^.*$" />
  14. +
  15.                     <conditions logicalGrouping="MatchAny">
  16. +
  17.                         <add input="{REQUEST_FILENAME}"
  18. +
  19.                              matchType="IsFile" pattern=""
  20. +
  21.                              ignoreCase="false" />
  22. +
  23.                         <add input="{REQUEST_FILENAME}"
  24. +
  25.                              matchType="IsDirectory"
  26. +
  27.                              pattern=""
  28. +
  29.                              ignoreCase="false" />
  30. +
  31.                     </conditions>
  32. +
  33.                     <action type="None" />
  34. +
  35.                 </rule>
  36. +
  37.                 <rule name="Imported Rule 2" stopProcessing="true">
  38. +
  39.                     <match url="^.*$" />
  40. +
  41.                     <action type="Rewrite" url="index.php" />
  42. +
  43.                 </rule>
  44. +
  45.             </rules>
  46. +
  47.         </rewrite>
  48. +
  49.     </system.webServer>
  50. +
  51. </configuration>
+ +
+
+
+ + + + + + + + + +
+ Module Structure + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/reference.html b/zend/documentation/manual/core/en/reference.html new file mode 100644 index 0000000..b920fe6 --- /dev/null +++ b/zend/documentation/manual/core/en/reference.html @@ -0,0 +1,332 @@ + + + + + Zend Gdata Reference - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Getting Started with Zend_Paginator + + + + +
+
+
+

Zend Gdata Reference

Table of Contents + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Getting Started with Zend_Paginator + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/requirements.html b/zend/documentation/manual/core/en/requirements.html new file mode 100644 index 0000000..6886f01 --- /dev/null +++ b/zend/documentation/manual/core/en/requirements.html @@ -0,0 +1,110 @@ + + + + + Zend Framework Requirements - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ ZendX_JQuery + + + + +
+
+

Zend Framework Requirements

Table of Contents +
+ + + +
+
+ + + + + + + + + +
+ ZendX_JQuery + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/requirements.introduction.html b/zend/documentation/manual/core/en/requirements.introduction.html new file mode 100644 index 0000000..7534ff4 --- /dev/null +++ b/zend/documentation/manual/core/en/requirements.introduction.html @@ -0,0 +1,9066 @@ + + + + + Introduction - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Framework Requirements + + + + +
+
+

Introduction

+ + +

+ Zend Framework requires a PHP 5 interpreter with a web server + configured to handle PHP scripts correctly. Some features require + additional extensions or web server features; in most cases the framework can be used + without them, although performance may suffer or ancillary features may not be fully + functional. An example of such a dependency is mod_rewrite in an Apache environment, + which can be used to implement "pretty URL's" like + "http://www.example.com/user/edit". If mod_rewrite is not enabled, + Zend Framework can be configured to support URL's such as + "http://www.example.com?controller=user&action=edit". Pretty + URL's may be used to shorten URL's for textual + representation or search engine optimization (SEO), but they do not + directly affect the functionality of the application. +

+ +

PHP Version

+ + +

+ Zend recommends the most current release of PHP for critical + security and performance enhancements, and currently supports + PHP 5.2.11 or later. +

+ +

+ Zend Framework has an extensive collection of unit tests, which you can run using + PHPUnit 3.4.15 or later. +

+
+ +

PHP Extensions

+ + +

+ You will find a table listing all extensions typically found in + PHP and how they are used in Zend Framework below. You should + verify that the extensions on which Zend Framework components you'll be using in + your application are available in your PHP environments. Many + applications will not require every extension listed below. +

+ +

+ A dependency of type "hard" indicates that the components or classes + cannot function properly if the respective extension is not available, + while a dependency of type "soft" indicates that the component may use + the extension if it is available but will function properly if it is not. + Many components will automatically use certain extensions if they are available + to optimize performance but will execute code with similar functionality in the + component itself if the extensions are unavailable. +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PHP Extensions Used in Zend Framework by Component
PHP ExtensionDependency TypeUsed by Zend Framework Components
+ + » apc + + Hard + » + Zend_Cache_Backend_Apc + +
Soft + » + Zend_File_Transfer + +
+ + » bcmath + + Soft + » + Zend_Locale + +
+ + » bitset + + Soft + » + Zend_Search_Lucene + +
+ + » bz2 + + ------
+ + » calendar + + ------
+ + » com_dotnet + + ------
+ + » ctype + + Hard + » + Zend_Auth_Adapter_Http + +
+ » + Zend_Gdata + +
+ » + Zend_Http_Client + +
+ » + Zend_Pdf + +
+ » + Zend_Rest_Client + +
+ » + Zend_Rest_Server + +
+ » + Zend_Search_Lucene + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
+ + » curl + + Hard + » + Zend_Http_Client_Adapter_Curl + +
+ + » date + + Soft + » + Zend_Amf + +
+ + » dba + + ------
+ + » dbase + + ------
+ + » dom + + Hard + » + Zend_Amf + +
+ » + Zend_Dom + +
+ » + Zend_Feed + +
+ » + Zend_Gdata + +
+ » + Zend_Log_Formatter_Xml + +
+ » + Zend_Rest_Server + +
+ » + Zend_Soap + +
+ » + Zend_Search_Lucene + +
+ » + Zend_Service_Amazon + +
+ » + Zend_Service_Delicious + +
+ » + Zend_Service_Flickr + +
+ » + Zend_Service_Yahoo + +
+ » + Zend_XmlRpc + +
+ + » exif + + ------
+ + » fbsql + + ------
+ + » fdf + + ------
+ + » filter + + ------
+ + » ftp + + ------
+ + » gd + + Hard + » + Zend_Captcha + +
+ » + Zend_Pdf + +
+ + » gettext + + ------
+ + » gmp + + ------
+ + » hash + + Hard + » + Zend_Auth_Adapter_Http + +
+ + » ibm_db2 + + Hard + » + Zend_Db_Adapter_Db2 + +
+ + » iconv + + Hard + » + Zend_Currency + +
+ » + Zend_Locale_Format + +
+ » + Zend_Mime + +
+ » + Zend_Pdf + +
+ » + Zend_Search_Lucene + +
+ » + Zend_Service_Audioscrobbler + +
+ » + Zend_Service_Flickr + +
+ » + Zend_XmlRpc_Client + +
+ + » igbinary + + Hard + » + Zend_Serializer_Adapter_Igbinary + +
+ + » imap + + ------
+ + » informix + + ------
+ + » interbase + + HardZend_Db_Adapter_Firebird
+ + » json + + Soft + + » + Zend_Json + + +
+ + » + Zend_Serializer_Adapter_Json + + +
+ + » ldap + + Hard + » + Zend_Ldap + +
+ + » libxml + + ------
+ + » mbstring + + Hard + » + Zend_Feed + +
+ + » mcrypt + + Hard + » + Zend_Service_ReCaptcha_MailHide + +
+ + » memcache + + Hard + » + Zend_Cache_Backend_Memcached + +
+ + » memcached + + Hard + » + Zend_Cache_Backend_Libmemcached + +
+ + » mhash + + ------
+ + » mime_magic + + Soft + » + Zend_Http_Client + +
+ + » ming + + ------
+ + » msql + + ------
+ + » mssql + + ------
+ + » mysql + + ------
+ + » mysqli + + Hard + » + Zend_Db_Adapter_Mysqli + +
+ + » ncurses + + ------
+ + » oci8 + + Hard + » + Zend_Db_Adapter_Oracle + +
+ + » odbc + + ------
+ + » openssl + + ------
+ + » pcntl + + ------
+ + » pcre + + HardVirtually all components
+ + » pdo + + HardAll PDO database adapters
+ + » pdo_dblib + + ------
+ + » pdo_firebird + + ------
pdo_mssqlHard + » + Zend_Db_Adapter_Pdo_Mssql + +
+ + » pdo_mysql + + Hard + » + Zend_Db_Adapter_Pdo_Mysql + +
+ + » pdo_oci + + Hard + » + Zend_Db_Adapter_Pdo_Oci + +
+ + » pdo_pgsql + + Hard + » + Zend_Db_Adapter_Pdo_Pgsql + +
+ + » pdo_sqlite + + Hard + » + Zend_Db_Adapter_Pdo_Sqlite + +
+ + » pgsql + + ------
+ + » posix + + Soft + » + Zend_Mail + +
+ + » pspell + + ------
+ + » readline + + ------
+ + » recode + + ------
+ + » Reflection + + Hard + » + Zend_Controller + +
+ » + Zend_Filter + +
+ » + Zend_Filter_Input + +
+ » + Zend_Json + +
+ » + Zend_Log + +
+ » + Zend_Rest_Server + +
+ » + Zend_Server_Reflection + +
+ » + Zend_Validate + +
+ » + Zend_View + +
+ » + Zend_XmlRpc_Server + +
+ + » session + + Hard + » + Zend_Controller_Action_Helper_Redirector + +
+ » + Zend_Session + +
+ + » shmop + + ------
+ + » SimpleXML + + Hard + » + Zend_Config_Xml + +
+ » + Zend_Feed + +
+ » + Zend_Rest_Client + +
+ » + Zend_Serializer_Adapter_Wddx + +
+ » + Zend_Service_Audioscrobbler + +
+ » + Zend_Soap + +
+ » + Zend_XmlRpc + +
Soft + » + Zend_Amf + +
+ + » soap + + Hard + » + Zend_Service_StrikeIron + +
+ » + Zend_Soap + +
+ + » sockets + + ------
+ + » SPL + + HardVirtually all components
+ + » SQLite + + Hard + » + Zend_Cache_Backend_Sqlite + +
+ standardHardVirtually all components
+ + » sybase + + ------
+ sysvmsg------
sysvsem-----
sysvshm------
+ + » tidy + + ------
+ + » tokenizer + + ------
+ + » wddx + + Hard + » + Zend_Serializer_Adapter_Wddx + +
+ + » xml + + Hard + » + Zend_Translate_Adapter_Qt + +
+ » + Zend_Translate_Adapter_Tmx + +
+ » + Zend_Translate_Adapter_Xliff + +
+ + » XMLReader + + ------
+ + » xmlrpc + + ------
+ + » XMLWriter + + ------
+ + » xsl + + ------
+ + » zip + + ------
+ + » zlib + + Hard + » + Zend_Pdf + +
+ » + Zend_Filter_Compress + +
+ +
+ +

Zend Framework Components

+ + +

+ Below is a table that lists all available Zend Framework Components + and which PHP extension they need. This can help guide you + to know which extensions are required for your application. + Not all extensions used by Zend Framework are required for every + application. +

+ +

+ A dependency of type "hard" indicates that the components or classes + cannot function properly if the respective extension is not available, + while a dependency of type "soft" indicates that the component may use + the extension if it is available but will function properly if it is not. + Many components will automatically use certain extensions if they are available + to optimize performance but will execute code with similar functionality in the + component itself if the extensions are unavailable. +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Zend Framework Components and the PHP Extensions they use
Zend Framework Components and the PHP Extensions they useDependency TypePHP Extension
+ All Components + Hard + » pcre +
+ » SPL +
standard
+ + » + Zend_Acl + + ------
+ + » + Zend_Amf + + + Hard + » date +
Soft + » dom +
+ » SimpleXML +
+ + » Zend_Auth + + Hard + » ctype +
+ » hash +
+ + » + Zend_Cache + + + Hard + » apc +
+ » memcache +
+ » memcached +
+ » sqlite +
+ » zlib +
+ + » + Zend_Captcha + + + Hard + » gd +
+ + » + Zend_Config + + + Hard + » libxml +
+ » SimpleXML +
+ + » + Zend_Console_Getopt + + + ------
+ + » + Zend_Controller + + + Hard + » Reflection +
+ » session +
+ + » + Zend_Currency + + + Hard + » iconv +
+ + » + Zend_Date + + + ------
+ + » + Zend_Db + + + Hard + » ibm_db2 +
+ » mysqli +
+ » oci8 +
+ » pdo +
pdo_mssql
+ » pdo_mysql +
+ » pdo_oci +
+ » pdo_pgsql +
+ » pdo_sqlite +
+ + » + Zend_Debug + + + ------
+ + » + Zend_Dojo + + + ------
+ + » + Zend_Dom + + + Hard + » dom +
+ + » + Zend_Exception + + + ------
+ + » + Zend_Feed + + + Hard + » dom +
+ » libxml +
+ » mbstring +
+ » SimpleXML +
+ + » + Zend_File_Transfer + + + Soft + » apc +
upload_extension
+ + » + Zend_Filter + + + Hard + » Reflection +
Soft + » zlib +
+ + » + Zend_Form + + + ------
+ + » + Zend_Gdata + + + Hard + » ctype +
+ » dom +
+ » libxml +
+ + » + Zend_Http + + + Hard + » ctype +
+ » curl +
+ » mime_magic +
+ + » + Zend_InfoCard + + + ------
+ + » + Zend_Json + + + Soft + » json +
Hard + » Reflection +
+ + » + Zend_Layout + + + ------
+ + » + Zend_Ldap + + + --- + » ldap +
+ + » + Zend_Loader + + + ------
+ + » + Zend_Locale + + + Soft + » bcmath +
Hard + » iconv +
+ + » + Zend_Log + + + Hard + » dom +
+ » libxml +
+ » Reflection +
+ + » + Zend_Mail + + + Soft + » posix +
+ + » + Zend_Measure + + + ------
+ + » + Zend_Memory + + + ------
+ + » + Zend_Mime + + + Hard + » iconv +
+ + » + Zend_OpenId + + + ------
+ + » + Zend_Paginator + + + ------
+ + » + Zend_Pdf + + + Hard + » ctype +
+ » gd +
+ » iconv +
+ » zlib +
+ + » + Zend_ProgressBar + + + ------
+ + » + Zend_Registry + + + ------
+ + » + Zend_Request + + + ------
+ + » + Zend_Rest + + + Hard + » ctype +
+ » dom +
+ » libxml +
+ » Reflection +
+ » SimpleXML +
+ + » + Zend_Search_Lucene + + + Soft + » bitset +
Hard + » ctype +
+ » dom +
+ » iconv +
+ » libxml +
+ + » + Zend_Serializer + + + Hard + » wddx +
+ » SimpleXml +
+ + » igbinary + +
Soft + + » json + +
+ + » + Zend_Server_Reflection + + + Hard + » Reflection +
+ + » + Zend_Service_Akismet + + + ------
+ + » + Zend_Service_Amazon + + + Hard + » dom +
+ » libxml +
+ + » + Zend_Service_Audioscrobbler + + + Hard + » iconv +
+ » libxml +
+ » SimpleXML +
+ + » + Zend_Service_Delicious + + + Hard + » dom +
+ » libxml +
+ + » + Zend_Service_Flickr + + + Hard + » dom +
+ » iconv +
+ » libxml +
+ + » + Zend_Service_Nirvanix + + + ------
+ + » + Zend_Service_ReCaptcha + + + Soft + + » mcrypt + +
+ + » + Zend_Service_StrikeIron + + + Hard + » soap +
+ + » + Zend_Service_Technorati + + + ------
+ + » + Zend_Service_Twitter + + + ------
+ + » + Zend_Service_Yahoo + + + Hard + » dom +
+ » libxml +
+ + » + Zend_Session + + + Hard + » session +
+ + » + Zend_Soap + + + Hard + + » dom + +
+ » SimpleXML +
+ + » soap + +
+ + » + Zend_Test + + + ------
+ + » + Zend_Text + + + ------
+ + » + Zend_TimeSync + + + ------
+ + » + Zend_Translate + + + Hard + » xml +
+ + » + Zend_Uri + + + Hard + » ctype +
+ + » + Zend_Validate + + + Hard + » ctype +
+ » Reflection +
+ + » + Zend_Version + + + ------
+ + » + Zend_Validate + + + Hard + » Reflection +
+ + » + Zend_Wildfire + + + ------
+ + » + Zend_XmlRpc + + + Hard + » dom +
+ » iconv +
+ » libxml +
+ » Reflection +
+ » SimpleXML +
+ +
+ +

Zend Framework Dependencies

+ + +

+ Below you can find a table listing Zend Framework Components + and their dependencies to other Zend Framework Components. This + can help you if you need to have only single components instead + of the complete Zend Framework. +

+ +

+ A dependency of type "hard" indicates that the components or classes + cannot function properly if the respective dependent component is not available, + while a dependency of type "soft" indicates that the component may need + the dependent component in special situations or with special adapters. + At last a dependency of type "fix" indicated that these components or classes are + in any case used by subcomponents, and a dependency of type "sub" indicates that + these components can be used by subcomponents in special situations or with special + adapters. +

+ +

Note: + + Even if it's possible to separate single components for + usage from the complete Zend Framework you should keep + in mind that this can lead to problems when files are missed + or components are used dynamically. +
+

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Zend Framework Components and their dependency to other Zend Framework Components
Zend Framework ComponentDependency TypeDependent Zend Framework Component
+ + » + Zend_Acl + + + Hard + » + Zend_Exception + +
+ + » + Zend_Amf + + + Hard + » + Zend_Exception + +
+ » + Zend_Server + +
Soft + » + Zend_Date + +
+ » + Zend_Loader + +
Sub + » + Zend_Locale + +
+ » + Zend_Registry + +
+ + » + Zend_Auth + + + Hard + » + Zend_Exception + +
Soft + » + Zend_Db + +
+ » + Zend_InfoCard + +
+ » + Zend_Ldap + +
+ » + Zend_OpenId + +
+ » + Zend_Session + +
Fix + » + Zend_Controller + +
+ » + Zend_Http + +
+ » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Uri + +
+ » + Zend_View + +
Sub + » + Zend_Captcha + +
+ » + Zend_Config + +
+ » + Zend_Date + +
+ » + Zend_Dojo + +
+ » + Zend_Filter + +
+ » + Zend_Form + +
+ » + Zend_Json + +
+ » + Zend_Layout + +
+ » + Zend_Registry + +
+ » + Zend_Server + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Text + +
+ » + Zend_Validate + +
+ » + Zend_Wildfire + +
+ + » + Zend_Cache + + + Hard + » + Zend_Exception + +
Soft + » + Zend_Log + +
Sub + » + Zend_Captcha + +
+ » + Zend_Config + +
+ » + Zend_Controller + +
+ » + Zend_Date + +
+ » + Zend_Db + +
+ » + Zend_Dojo + +
+ » + Zend_Filter + +
+ » + Zend_Form + +
+ » + Zend_Http + +
+ » + Zend_Json + +
+ » + Zend_Layout + +
+ » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Registry + +
+ » + Zend_Server + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Session + +
+ » + Zend_Text + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
+ » + Zend_View + +
+ » + Zend_Wildfire + +
+ + » + Zend_Captcha + + + Hard + » + Zend_Exception + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Text + +
+ » + Zend_Validate + +
Fix + » + Zend_Http + +
+ » + Zend_Json + +
+ » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Server + +
+ » + Zend_Uri + +
Sub + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_ReLoader + +
+ + » + Zend_Config + + + Hard + » + Zend_Exception + +
+ + » + Zend_Console_Getopt + + + Hard + » + Zend_Exception + +
Soft + » + Zend_Json + +
Sub + » + Zend_Loader + +
+ » + Zend_Server + +
+ + » + Zend_Controller + + + Hard + » + Zend_Config + +
+ » + Zend_Exception + +
+ » + Zend_Loader + +
+ » + Zend_Registry + +
+ » + Zend_Uri + +
+ » + Zend_View + +
Soft + » + Zend_Dojo + +
+ » + Zend_Filter + +
+ » + Zend_Json + +
+ » + Zend_Layout + +
Fix + » + Zend_Locale + +
+ » + Zend_Validate + +
Sub + » + Zend_Captcha + +
+ » + Zend_Date + +
+ » + Zend_Db + +
+ » + Zend_Form + +
+ » + Zend_Http + +
+ » + Zend_Server + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Session + +
+ » + Zend_Text + +
+ » + Zend_Wildfire + +
+ + » + Zend_Currency + + + Hard + » + Zend_Exception + +
+ » + Zend_Locale + +
Sub + » + Zend_Loader + +
+ » + Zend_Registry + +
+ + » + Zend_Date + + + Hard + » + Zend_Exception + +
+ » + Zend_Locale + +
Sub + » + Zend_Loader + +
+ » + Zend_Registry + +
+ + » + Zend_Db + + + Hard + » + Zend_Exception + +
+ » + Zend_Loader + +
Soft + » + Zend_Registry + +
+ » + Zend_Wildfire + +
Sub + » + Zend_Captcha + +
+ » + Zend_Config + +
+ » + Zend_Controller + +
+ » + Zend_Date + +
+ » + Zend_Db + +
+ » + Zend_Dojo + +
+ » + Zend_Filter + +
+ » + Zend_Form + +
+ » + Zend_Http + +
+ » + Zend_Json + +
+ » + Zend_Layout + +
+ » + Zend_Server + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Session + +
+ » + Zend_Text + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
+ » + Zend_View + +
+ + » + Zend_Debug + + + ------
+ + » + Zend_Dojo + + + Hard + » + Zend_Exception + +
+ » + Zend_Form + +
+ » + Zend_Json + +
+ » + Zend_Registry + +
+ » + Zend_View + +
Soft + » + Zend_Filter + +
Fix + » + Zend_Config + +
+ » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
Sub + » + Zend_Captcha + +
+ » + Zend_Controller + +
+ » + Zend_Date + +
+ » + Zend_Db + +
+ » + Zend_Dojo + +
+ » + Zend_Http + +
+ » + Zend_Layout + +
+ » + Zend_Server + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Session + +
+ » + Zend_Text + +
+ » + Zend_Wildfire + +
+ + » + Zend_Dom + + + HardZend_Exception
+ + » + Zend_Exception + + + ------
+ + » + Zend_Feed + + + Hard + » + Zend_Exception + +
+ » + Zend_Loader + +
+ » + Zend_Uri + +
Fix + » + Zend_Locale + +
+ » + Zend_Validate + +
Sub + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Http + +
+ » + Zend_Registry + +
+ + » + Zend_File_Transfer + + + Hard + » + Zend_Exception + +
Soft + » + Zend_Loader + +
+ + » + Zend_Filter + + + Hard + » + Zend_Exception + +
+ » + Zend_Loader + +
+ » + Zend_Validate + +
Soft + » + Zend_Locale + +
Sub + » + Zend_Date + +
+ » + Zend_Registry + +
+ + » + Zend_Form + + + Hard + » + Zend_Exception + +
+ » + Zend_Filter + +
+ » + Zend_Validate + +
Soft + » + Zend_Captcha + +
+ » + Zend_Controller + +
+ » + Zend_Json + +
+ » + Zend_Loader + +
+ » + Zend_Registry + +
+ » + Zend_Session + +
Fix + » + Zend_Config + +
+ » + Zend_Http + +
+ » + Zend_Locale + +
+ » + Zend_Server + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Text + +
+ » + Zend_Uri + +
+ » + Zend_View + +
Sub + » + Zend_Date + +
+ » + Zend_Db + +
+ » + Zend_Dojo + +
+ » + Zend_Form + +
+ » + Zend_Layout + +
+ » + Zend_Wildfire + +
+ + » + Zend_Gdata + + + Hard + » + Zend_Exception + +
+ » + Zend_Http + +
+ » + Zend_Mime + +
+ » + Zend_Version + +
Soft + » + Zend_Loader + +
Fix + » + Zend_Locale + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
Sub + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Http + + + Hard + » + Zend_Exception + +
+ » + Zend_Loader + +
+ » + Zend_Uri + +
Fix + » + Zend_Locale + +
+ » + Zend_Validate + +
Sub + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_InfoCard + + + Hard + » + Zend_Exception + +
+ » + Zend_Loader + +
+ + » + Zend_Json + + + Hard + » + Zend_Exception + +
+ » + Zend_Loader + +
+ » + Zend_Server + +
+ + » + Zend_Layout + + + Hard + » + Zend_Exception + +
Soft + » + Zend_Controller + +
+ » + Zend_Filter + +
+ » + Zend_Loader + +
+ » + Zend_View + +
Fix + » + Zend_Config + +
+ » + Zend_Layout + +
+ » + Zend_Registry + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
Sub + » + Zend_Captcha + +
+ » + Zend_Date + +
+ » + Zend_Db + +
+ » + Zend_Dojo + +
+ » + Zend_Form + +
+ » + Zend_Http + +
+ » + Zend_Json + +
+ » + Zend_Locale + +
+ » + Zend_Server + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Session + +
+ » + Zend_Text + +
+ » + Zend_Wildfire + +
+ + » + Zend_Ldap + + + Hard + » + Zend_Exception + +
+ + » + Zend_Loader + + + Hard + » + Zend_Exception + +
+ + » + Zend_Locale + + + Hard + » + Zend_Exception + +
Soft + » + Zend_Registry + +
Sub + » + Zend_Loader + +
+ + » + Zend_Log + + + Hard + » + Zend_Exception + +
Soft + » + Zend_Wildfire + +
Sub + » + Zend_Captcha + +
+ » + Zend_Config + +
+ » + Zend_Controller + +
+ » + Zend_Date + +
+ » + Zend_Db + +
+ » + Zend_Dojo + +
+ » + Zend_Filter + +
+ » + Zend_Form + +
+ » + Zend_Http + +
+ » + Zend_Json + +
+ » + Zend_Layout + +
+ » + Zend_Loader + +
+ » + Zend_Registry + +
+ » + Zend_Server + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Session + +
+ » + Zend_Text + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
+ » + Zend_View + +
+ + » + Zend_Mail + + + Hard + » + Zend_Exception + +
+ » + Zend_Loader + +
+ » + Zend_Mime + +
+ » + Zend_Validate + +
Fix + » + Zend_Locale + +
Sub + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Measure + + + Hard + » + Zend_Exception + +
+ » + Zend_Locale + +
+ » + Zend_Registry + +
Sub + » + Zend_Loader + +
+ + » + Zend_Memory + + + Hard + » + Zend_Cache + +
+ » + Zend_Exception + +
Sub + » + Zend_Captcha + +
+ » + Zend_Config + +
+ » + Zend_Controller + +
+ » + Zend_Date + +
+ » + Zend_Db + +
+ » + Zend_Dojo + +
+ » + Zend_Filter + +
+ » + Zend_Form + +
+ » + Zend_Http + +
+ » + Zend_Json + +
+ » + Zend_Layout + +
+ » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Log + +
+ » + Zend_Registry + +
+ » + Zend_Server + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Session + +
+ » + Zend_Text + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
+ » + Zend_View + +
+ » + Zend_Wildfire + +
+ + » + Zend_Mime + + + Hard + » + Zend_Exception + +
+ + » + Zend_OpenId + + + Hard + » + Zend_Controller + +
+ » + Zend_Exception + +
+ » + Zend_Http + +
+ » + Zend_Session + +
Fix + » + Zend_Config + +
+ » + Zend_Dojo + +
+ » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Registry + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
+ » + Zend_View + +
Sub + » + Zend_Captcha + +
+ » + Zend_Date + +
+ » + Zend_Db + +
+ » + Zend_Filter + +
+ » + Zend_Form + +
+ » + Zend_Json + +
+ » + Zend_Layout + +
+ » + Zend_Server + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Text + +
+ » + Zend_Wildfire + +
+ + » + Zend_Paginator + + + Hard + » + Zend_Exception + +
+ » + Zend_Json + +
+ » + Zend_Loader + +
Soft + » + Zend_Controller + +
+ » + Zend_Db + +
+ » + Zend_View + +
Fix + » + Zend_Server + +
Sub + » + Zend_Captcha + +
+ » + Zend_Config + +
+ » + Zend_Date + +
+ » + Zend_Dojo + +
+ » + Zend_Filter + +
+ » + Zend_Form + +
+ » + Zend_Http + +
+ » + Zend_Layout + +
+ » + Zend_Locale + +
+ » + Zend_Registry + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Session + +
+ » + Zend_Text + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
+ » + Zend_Wildfire + +
+ + » + Zend_Pdf + + + Hard + » + Zend_Exception + +
+ » + Zend_Log + +
+ » + Zend_Memory + +
Fix + » + Zend_Cache + +
Sub + » + Zend_Captcha + +
+ » + Zend_Config + +
+ » + Zend_Controller + +
+ » + Zend_Date + +
+ » + Zend_Db + +
+ » + Zend_Dojo + +
+ » + Zend_Filter + +
+ » + Zend_Form + +
+ » + Zend_Http + +
+ » + Zend_Json + +
+ » + Zend_Layout + +
+ » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Registry + +
+ » + Zend_Server + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Session + +
+ » + Zend_Text + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
+ » + Zend_View + +
+ » + Zend_Wildfire + +
+ + » + Zend_Progressbar + + + Hard + » + Zend_Config + +
+ » + Zend_Exception + +
+ » + Zend_Json + +
Soft + » + Zend_Session + +
Fix + » + Zend_Db + +
+ » + Zend_Loader + +
+ » + Zend_Server + +
Sub + » + Zend_Captcha + +
+ » + Zend_Date + +
+ » + Zend_Dojo + +
+ » + Zend_Filter + +
+ » + Zend_Form + +
+ » + Zend_Http + +
+ » + Zend_Layout + +
+ » + Zend_Registry + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Text + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
+ » + Zend_View + +
+ » + Zend_Wildfire + +
+ + » + Zend_Registry + + + Hard + » + Zend_Exception + +
Soft + » + Zend_Loader + +
+ + » + Zend_Request + + + ------
+ + » + Zend_Rest + + + Hard + » + Zend_Exception + +
+ » + Zend_Server + +
+ » + Zend_Service + +
+ » + Zend_Uri + +
Fix + » + Zend_Http + +
+ » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Validate + +
Sub + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Search_Lucene + + + Hard + » + Zend_Exception + +
+ + » + Zend_Serializer + + + Hard + » + Zend_Exception + +
+ » + Zend_Loader + +
Soft + » + Zend_Json + +
+ » + Zend_Amf + +
+ + » + Zend_Server + + + Hard + » + Zend_Exception + +
+ + » + Zend_Service_Akismet + + + Hard + » + Zend_Exception + +
+ » + Zend_Http + +
+ » + Zend_Uri + +
+ » + Zend_Version + +
Fix + » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Validate + +
Sub + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Service_Amazon + + + Hard + » + Zend_Exception + +
+ » + Zend_Http + +
+ » + Zend_Rest + +
Fix + » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Server + +
+ » + Zend_Service + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
Sub + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Service_Audioscrobbler + + + Hard + » + Zend_Exception + +
+ » + Zend_Http + +
Fix + » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
Sub + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Service_Delicious + + + Hard + » + Zend_Date + +
+ » + Zend_Exception + +
+ » + Zend_Http + +
+ » + Zend_Json + +
+ » + Zend_Rest + +
Fix + » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Server + +
+ » + Zend_Service + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
Sub + » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Service_Flickr + + + Hard + » + Zend_Exception + +
+ » + Zend_Http + +
Soft + » + Zend_Rest + +
+ » + Zend_Validate + +
Fix + » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Server + +
+ » + Zend_Service + +
+ » + Zend_Uri + +
Sub + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Service_Nirvanix + + + Hard + » + Zend_Exception + +
+ » + Zend_Http + +
+ » + Zend_Loader + +
Fix + » + Zend_Locale + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
Sub + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Service_ReCaptcha + + + Hard + » + Zend_Exception + +
+ » + Zend_Http + +
+ » + Zend_Json + +
Fix + » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Server + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
Sub + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Service_SlideShare + + + Hard + » + Zend_Cache + +
+ » + Zend_Exception + +
+ » + Zend_Http + +
Fix + » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
Sub + » + Zend_Captcha + +
+ » + Zend_Config + +
+ » + Zend_Controller + +
+ » + Zend_Date + +
+ » + Zend_Db + +
+ » + Zend_Dojo + +
+ » + Zend_Filter + +
+ » + Zend_Form + +
+ » + Zend_Json + +
+ » + Zend_Layout + +
+ » + Zend_Log + +
+ » + Zend_Registry + +
+ » + Zend_Server + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Session + +
+ » + Zend_Text + +
+ » + Zend_View + +
+ » + Zend_Wildfire + +
+ + » + Zend_Service_StrikeIron + + + Hard + » + Zend_Exception + +
+ » + Zend_Http + +
+ » + Zend_Loader + +
Fix + » + Zend_Locale + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
Fix + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Service_Technorati + + + Hard + » + Zend_Date + +
+ » + Zend_Exception + +
+ » + Zend_Http + +
+ » + Zend_Uri + +
+ » + Zend_Locale + +
Soft + » + Zend_Rest + +
Fix + » + Zend_Loader + +
+ » + Zend_Server + +
+ » + Zend_Service + +
+ » + Zend_Validate + +
Sub + » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Service_Twitter + + + Hard + » + Zend_Exception + +
+ » + Zend_Feed + +
+ » + Zend_Http + +
+ » + Zend_Json + +
+ » + Zend_Rest + +
+ » + Zend_Uri + +
Fix + » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Server + +
+ » + Zend_Service + +
+ » + Zend_Validate + +
Fix + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Service_Yahoo + + + Hard + » + Zend_Exception + +
+ » + Zend_Http + +
+ » + Zend_Rest + +
Soft + » + Zend_Validate + +
Fix + » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Server + +
+ » + Zend_Service + +
+ » + Zend_Uri + +
Sub + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Session + + + Hard + » + Zend_Exception + +
Soft + » + Zend_Config + +
+ » + Zend_Db + +
+ » + Zend_Loader + +
Sub + » + Zend_Captcha + +
+ » + Zend_Date + +
+ » + Zend_Dojo + +
+ » + Zend_Filter + +
+ » + Zend_Form + +
+ » + Zend_Http + +
+ » + Zend_Json + +
+ » + Zend_Layout + +
+ » + Zend_Registry + +
+ » + Zend_Server + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Session + +
+ » + Zend_Text + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
+ » + Zend_View + +
+ » + Zend_Wildfire + +
+ + » + Zend_Soap + + + Hard + » + Zend_Exception + +
+ » + Zend_Server + +
+ » + Zend_Uri + +
Fix + » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Validate + +
Sub + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Test + + + Hard + » + Zend_Controller + +
+ » + Zend_Dom + +
+ » + Zend_Exception + +
+ » + Zend_Layout + +
+ » + Zend_Registry + +
+ » + Zend_Session + +
Soft + » + Zend_Loader + +
Fix + » + Zend_Config + +
+ » + Zend_Locale + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
+ » + Zend_View + +
Sub + » + Zend_Captcha + +
+ » + Zend_Date + +
+ » + Zend_Db + +
+ » + Zend_Dojo + +
+ » + Zend_Filter + +
+ » + Zend_Form + +
+ » + Zend_Http + +
+ » + Zend_Json + +
+ » + Zend_Server + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Text + +
+ » + Zend_Wildfire + +
+ + » + Zend_Text + + + Hard + » + Zend_Exception + +
Soft + » + Zend_Loader + +
+ + » + Zend_TimeSync + + + Hard + » + Zend_Date + +
+ » + Zend_Exception + +
+ » + Zend_Loader + +
Fix + » + Zend_Locale + +
Sub + » + Zend_Registry + +
+ + » + Zend_Translate + + + Hard + » + Zend_Exception + +
+ » + Zend_Loader + +
+ » + Zend_Locale + +
Sub + » + Zend_Registry + +
+ + » + Zend_Uri + + + Hard + » + Zend_Exception + +
+ » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Validate + +
Soft + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Validate + + + Hard + » + Zend_Exception + +
+ » + Zend_Loader + +
+ » + Zend_Locale + +
Soft + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ + » + Zend_Version + + + ------
+ + » + Zend_View + + + Hard + » + Zend_Controller + +
+ » + Zend_Exception + +
+ » + Zend_Loader + +
+ » + Zend_Locale + +
+ » + Zend_Registry + +
Soft + » + Zend_Json + +
+ » + Zend_Layout + +
Fix + » + Zend_Config + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
Sub + » + Zend_Captcha + +
+ » + Zend_Date + +
+ » + Zend_Db + +
+ » + Zend_Dojo + +
+ » + Zend_Filter + +
+ » + Zend_Form + +
+ » + Zend_Http + +
+ » + Zend_Server + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Session + +
+ » + Zend_Text + +
+ » + Zend_Wildfire + +
+ + » + Zend_Wildfire + + + Hard + » + Zend_Controller + +
+ » + Zend_Exception + +
+ » + Zend_Json + +
+ » + Zend_Loader + +
Fix + » + Zend_Config + +
+ » + Zend_Layout + +
+ » + Zend_Registry + +
+ » + Zend_Server + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
+ » + Zend_View + +
Sub + » + Zend_Captcha + +
+ » + Zend_Date + +
+ » + Zend_Db + +
+ » + Zend_Dojo + +
+ » + Zend_Filter + +
+ » + Zend_Form + +
+ » + Zend_Http + +
+ » + Zend_Layout + +
+ » + Zend_Service_ReCaptcha + +
+ » + Zend_Session + +
+ » + Zend_Text + +
+ + » + Zend_XmlRpc + + + Hard + » + Zend_Exception + +
+ » + Zend_Http + +
+ » + Zend_Server + +
Fix + » + Zend_Loader + +
+ » + Zend_Uri + +
+ » + Zend_Validate + +
+ » + Zend_Locale + +
Sub + » + Zend_Date + +
+ » + Zend_Filter + +
+ » + Zend_Registry + +
+ +
+
+
+ + + + + + + + + +
+ Zend Framework Requirements + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.acl.html b/zend/documentation/manual/core/en/zend.acl.html new file mode 100644 index 0000000..c0048df --- /dev/null +++ b/zend/documentation/manual/core/en/zend.acl.html @@ -0,0 +1,177 @@ + + + + + Zend_Acl - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend Gdata Reference + + + + +
+
+
+

Zend_Acl

+ + + + + + + + + +
+
+ + + + + + + + + +
+ Zend Gdata Reference + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.amf.html b/zend/documentation/manual/core/en/zend.amf.html new file mode 100644 index 0000000..ece2dba --- /dev/null +++ b/zend/documentation/manual/core/en/zend.amf.html @@ -0,0 +1,174 @@ + + + + + Zend_Amf - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Acl + + + + +
+
+
+

Zend_Amf

+ + + + + + +
+
+ + + + + + + + + +
+ Zend_Acl + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.application.html b/zend/documentation/manual/core/en/zend.application.html new file mode 100644 index 0000000..14632ef --- /dev/null +++ b/zend/documentation/manual/core/en/zend.application.html @@ -0,0 +1,186 @@ + + + + + Zend_Application - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Amf + + + + +
+
+
+

Zend_Application

+ + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Amf + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.auth.html b/zend/documentation/manual/core/en/zend.auth.html new file mode 100644 index 0000000..19e53d8 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.auth.html @@ -0,0 +1,186 @@ + + + + + Zend_Auth - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Application + + + + +
+
+
+

Zend_Auth

+ + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Application + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.barcode.html b/zend/documentation/manual/core/en/zend.barcode.html new file mode 100644 index 0000000..487a142 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.barcode.html @@ -0,0 +1,180 @@ + + + + + Zend_Barcode - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Auth + + + + +
+
+
+

Zend_Barcode

+ + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Auth + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.cache.html b/zend/documentation/manual/core/en/zend.cache.html new file mode 100644 index 0000000..d5c91ee --- /dev/null +++ b/zend/documentation/manual/core/en/zend.cache.html @@ -0,0 +1,183 @@ + + + + + Zend_Cache - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Barcode + + + + +
+
+
+

Zend_Cache

+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Barcode + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.captcha.html b/zend/documentation/manual/core/en/zend.captcha.html new file mode 100644 index 0000000..b9695e9 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.captcha.html @@ -0,0 +1,177 @@ + + + + + Zend_Captcha - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Cache + + + + +
+
+
+

Zend_Captcha

+ + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Cache + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.cloud.html b/zend/documentation/manual/core/en/zend.cloud.html new file mode 100644 index 0000000..06dd155 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.cloud.html @@ -0,0 +1,184 @@ + + + + + SimpleCloud API: Zend_Cloud - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Captcha + + + + +
+
+
+

SimpleCloud API: Zend_Cloud

+ + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Captcha + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.codegenerator.html b/zend/documentation/manual/core/en/zend.codegenerator.html new file mode 100644 index 0000000..70a7c05 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.codegenerator.html @@ -0,0 +1,177 @@ + + + + + Zend_CodeGenerator - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ SimpleCloud API: Zend_Cloud + + + + +
+
+
+

Zend_CodeGenerator

+ + + + + + + + + +
+
+ + + + + + + + + +
+ SimpleCloud API: Zend_Cloud + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.config.html b/zend/documentation/manual/core/en/zend.config.html new file mode 100644 index 0000000..90689c3 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.config.html @@ -0,0 +1,186 @@ + + + + + Zend_Config - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_CodeGenerator + + + + +
+
+
+

Zend_Config

+ + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_CodeGenerator + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.config.writer.html b/zend/documentation/manual/core/en/zend.config.writer.html new file mode 100644 index 0000000..33dde43 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.config.writer.html @@ -0,0 +1,171 @@ + + + + + Zend_Config_Writer - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Config + + + + +
+
+
+

Zend_Config_Writer

+ + + +
+
+ + + + + + + + + +
+ Zend_Config + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.console.getopt.html b/zend/documentation/manual/core/en/zend.console.getopt.html new file mode 100644 index 0000000..6891f4e --- /dev/null +++ b/zend/documentation/manual/core/en/zend.console.getopt.html @@ -0,0 +1,180 @@ + + + + + Zend_Console_Getopt - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Config_Writer + + + + +
+
+
+

Zend_Console_Getopt

+ + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Config_Writer + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.controller.html b/zend/documentation/manual/core/en/zend.controller.html new file mode 100644 index 0000000..1c48fc4 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.controller.html @@ -0,0 +1,204 @@ + + + + + Zend_Controller - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Console_Getopt + + + + +
+
+
+

Zend_Controller

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Console_Getopt + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.currency.html b/zend/documentation/manual/core/en/zend.currency.html new file mode 100644 index 0000000..be22803 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.currency.html @@ -0,0 +1,198 @@ + + + + + Zend_Currency - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Controller + + + + +
+
+
+

Zend_Currency

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Controller + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.date.html b/zend/documentation/manual/core/en/zend.date.html new file mode 100644 index 0000000..e921fcc --- /dev/null +++ b/zend/documentation/manual/core/en/zend.date.html @@ -0,0 +1,189 @@ + + + + + Zend_Date - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Currency + + + + +
+
+
+

Zend_Date

+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Currency + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.db.html b/zend/documentation/manual/core/en/zend.db.html new file mode 100644 index 0000000..5f3d13a --- /dev/null +++ b/zend/documentation/manual/core/en/zend.db.html @@ -0,0 +1,195 @@ + + + + + Zend_Db - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Date + + + + +
+
+
+

Zend_Db

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Date + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.debug.html b/zend/documentation/manual/core/en/zend.debug.html new file mode 100644 index 0000000..e569d20 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.debug.html @@ -0,0 +1,171 @@ + + + + + Zend_Debug - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Db + + + + +
+
+
+

Zend_Debug

+ + + +
+
+ + + + + + + + + +
+ Zend_Db + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.dojo.html b/zend/documentation/manual/core/en/zend.dojo.html new file mode 100644 index 0000000..a73fb88 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.dojo.html @@ -0,0 +1,183 @@ + + + + + Zend_Dojo - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Debug + + + + +
+
+
+

Zend_Dojo

+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Debug + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.dom.html b/zend/documentation/manual/core/en/zend.dom.html new file mode 100644 index 0000000..e23d5b7 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.dom.html @@ -0,0 +1,174 @@ + + + + + Zend_Dom - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Dojo + + + + +
+
+
+

Zend_Dom

+ + + + + + +
+
+ + + + + + + + + +
+ Zend_Dojo + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.event-manager.html b/zend/documentation/manual/core/en/zend.event-manager.html new file mode 100644 index 0000000..ec9dcc5 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.event-manager.html @@ -0,0 +1,171 @@ + + + + + Zend_EventManager - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Dom + + + + +
+
+
+

Zend_EventManager

+ + + +
+
+ + + + + + + + + +
+ Zend_Dom + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.exception.html b/zend/documentation/manual/core/en/zend.exception.html new file mode 100644 index 0000000..f6e9489 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.exception.html @@ -0,0 +1,177 @@ + + + + + Zend_Exception - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_EventManager + + + + +
+
+
+

Zend_Exception

+ + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_EventManager + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.feed.html b/zend/documentation/manual/core/en/zend.feed.html new file mode 100644 index 0000000..2e4f357 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.feed.html @@ -0,0 +1,201 @@ + + + + + Zend_Feed - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Exception + + + + +
+
+
+

Zend_Feed

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Exception + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.file.html b/zend/documentation/manual/core/en/zend.file.html new file mode 100644 index 0000000..f8d9192 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.file.html @@ -0,0 +1,177 @@ + + + + + Zend_File - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Feed + + + + +
+
+
+

Zend_File

+ + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Feed + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.filter.html b/zend/documentation/manual/core/en/zend.filter.html new file mode 100644 index 0000000..80d52ff --- /dev/null +++ b/zend/documentation/manual/core/en/zend.filter.html @@ -0,0 +1,186 @@ + + + + + Zend_Filter - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_File + + + + +
+
+
+

Zend_Filter

+ + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_File + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.form.html b/zend/documentation/manual/core/en/zend.form.html new file mode 100644 index 0000000..47a6577 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.form.html @@ -0,0 +1,195 @@ + + + + + Zend_Form - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Filter + + + + +
+
+
+

Zend_Form

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Filter + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.gdata.analytics.html b/zend/documentation/manual/core/en/zend.gdata.analytics.html new file mode 100644 index 0000000..3030280 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.gdata.analytics.html @@ -0,0 +1,176 @@ + + + + + Using Google Analytics - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Gdata + + + + +
+
+

Using Google Analytics

+ + +

+ The Google Analytics API allows client applications to + request data, saved in the analytics accounts. +

+ +

+ See » http://code.google.com/apis/analytics/docs/gdata/v2/gdataOverview.html + for more information about the Google Analytics API. +

+ +

Retrieving account data

+ + +

+ Using the account feed, you are able to retrieve a list of all the accounts available to a specified user. +

+ +
  1. $service = Zend_Gdata_Analytics::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($email, $password, $service);
  4. +
  5. $analytics = new Zend_Gdata_Analytics($client)
  6. +
  7. $accounts = $analytics->getAccountFeed();
  8. +
  9.  
  10. +
  11. foreach ($accounts as $account) { 
  12. +
  13.   echo "\n{$account->title}\n";
  14. +
  15. }
+ + +

+ The $analytics->getAccountFeed() call, results in a + Zend_Gdata_Analytics_AccountFeed object that contains + Zend_Gdata_Analytics_AccountEntry objects. Each of this + objects represent a google analytics account. +

+
+ +

Retrieving report data

+ + +

+ Besides the account feed, google offers a data feed, to retrieve report data using + the Google Analytics API. To easily request for these reports, + Zend_Gdata_Analytics offers a simple query construction interface. You can use all + the » metrics + and dimensions specified by the API. Additionaly you can apply some » filters + to retrieve some » common + data or even complex results. +

+ +
  1. $query = $service->newDataQuery()->setProfileId($profileId) 
  2. +
  3.   ->addMetric(Zend_Gdata_Analytics_DataQuery::METRIC_BOUNCES)   
  4. +
  5.   ->addMetric(Zend_Gdata_Analytics_DataQuery::METRIC_VISITS)
  6. +
  7.   ->addDimension(Zend_Gdata_Analytics_DataQuery::DIMENSION_MEDIUM) 
  8. +
  9.   ->addDimension(Zend_Gdata_Analytics_DataQuery::DIMENSION_SOURCE) 
  10. +
  11.   ->addFilter("ga:browser==Firefox") 
  12. +
  13.   ->setStartDate('2011-05-01')   
  14. +
  15.   ->setEndDate('2011-05-31')   
  16. +
  17.   ->addSort(Zend_Gdata_Analytics_DataQuery::METRIC_VISITS, true) 
  18. +
  19.   ->addSort(Zend_Gdata_Analytics_DataQuery::METRIC_BOUNCES, false) 
  20. +
  21.   ->setMaxResults(50);
  22. +
  23.  
  24. +
  25. $result = $analytics->getDataFeed($query);
  26. +
  27. foreach($result as $row){ 
  28. +
  29.   echo $row->getMetric('ga:visits')."\t"
  30. +
  31.   echo $row->getValue('ga:bounces')."\n"
  32. +
  33. }
+ +
+
+
+ + + + + + + + + +
+ Zend_Gdata + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.gdata.authsub.html b/zend/documentation/manual/core/en/zend.gdata.authsub.html new file mode 100644 index 0000000..078e3da --- /dev/null +++ b/zend/documentation/manual/core/en/zend.gdata.authsub.html @@ -0,0 +1,253 @@ + + + + + Authenticating with AuthSub - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Using Google Analytics + + + + +
+
+

Authenticating with AuthSub

+ + +

+ The AuthSub mechanism enables you to write web applications + that acquire authenticated access Google Data services, + without having to write code that handles user credentials. +

+ +

+ See » http://code.google.com/apis/accounts/AuthForWebApps.html + for more information about Google Data AuthSub authentication. +

+ +

+ The Google documentation says the ClientLogin mechanism is appropriate + for "installed applications" whereas the AuthSub mechanism is + for "web applications." The difference is that AuthSub requires + interaction from the user, and a browser interface that can react + to redirection requests. The ClientLogin solution uses PHP code to + supply the account credentials; the user is not required to enter her + credentials interactively. +

+ +

+ The account credentials supplied via the AuthSub mechanism are + entered by the user of the web application. Therefore they must be + account credentials that are known to that user. +

+ +

Note: Registered applications
+ + + + Zend_Gdata currently does not support use of secure tokens, + because the AuthSub authentication does not support passing a digital certificate + to acquire a secure token. +
+

+ +

Creating an AuthSub authenticated Http Client

+ + +

+ Your PHP application should provide a hyperlink to the + Google URL that performs authentication. The static function + Zend_Gdata_AuthSub::getAuthSubTokenUri() + provides the correct URL. The arguments to this function include + the URL to your PHP application so that Google can + redirect the user's browser back to your application after the user's + credentials have been verified. +

+ +

+ After Google's authentication server redirects the user's browser + back to the current application, a GET request parameter is set, + called token. The value of this parameter is a single-use token + that can be used for authenticated access. This token can be converted into a multi-use + token and stored in your session. +

+ +

+ Then use the token value in a call to + Zend_Gdata_AuthSub::getHttpClient(). + This function returns an instance of Zend_Http_Client, + with appropriate headers set so that subsequent requests your + application submits using that HTTP Client are also authenticated. +

+ +

+ Below is an example of PHP code for a web application + to acquire authentication to use the Google Calendar service + and create a Zend_Gdata client object using that authenticated + HTTP Client. +

+ +
  1. $my_calendar = 'http://www.google.com/calendar/feeds/default/private/full';
  2. +
  3.  
  4. +
  5. if (!isset($_SESSION['cal_token'])) {
  6. +
  7.     if (isset($_GET['token'])) {
  8. +
  9.         // You can convert the single-use token to a session token.
  10. +
  11.         $session_token =
  12. +
  13.             Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
  14. +
  15.         // Store the session token in our session.
  16. +
  17.         $_SESSION['cal_token'] = $session_token;
  18. +
  19.     } else {
  20. +
  21.         // Display link to generate single-use token
  22. +
  23.         $googleUri = Zend_Gdata_AuthSub::getAuthSubTokenUri(
  24. +
  25.             'http://'. $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'],
  26. +
  27.             $my_calendar, 0, 1);
  28. +
  29.         echo "Click <a href='$googleUri'>here</a> " .
  30. +
  31.              "to authorize this application.";
  32. +
  33.         exit();
  34. +
  35.     }
  36. +
  37. }
  38. +
  39.  
  40. +
  41. // Create an authenticated HTTP Client to talk to Google.
  42. +
  43. $client = Zend_Gdata_AuthSub::getHttpClient($_SESSION['cal_token']);
  44. +
  45.  
  46. +
  47. // Create a Gdata object using the authenticated Http Client
  48. +
  49. $cal = new Zend_Gdata_Calendar($client);
+ +
+ +

Revoking AuthSub authentication

+ + +

+ To terminate the authenticated status of a given token, use the + Zend_Gdata_AuthSub::AuthSubRevokeToken() + static function. Otherwise, the token is still valid for + some time. +

+ +
  1. // Carefully construct this value to avoid application security problems.
  2. +
  3. $php_self = htmlentities(substr($_SERVER['PHP_SELF'],
  4. +
  5.                          0,
  6. +
  7.                          strcspn($_SERVER['PHP_SELF'], "\n\r")),
  8. +
  9.                          ENT_QUOTES);
  10. +
  11.  
  12. +
  13. if (isset($_GET['logout'])) {
  14. +
  15.     Zend_Gdata_AuthSub::AuthSubRevokeToken($_SESSION['cal_token']);
  16. +
  17.     unset($_SESSION['cal_token']);
  18. +
  19.     header('Location: ' . $php_self);
  20. +
  21.     exit();
  22. +
  23. }
+ + +

Note: Security notes
+ + + + The treatment of the $php_self variable in the + example above is a general security guideline, it is not + specific to Zend_Gdata. You should always filter content you + output to HTTP headers. +
+ + + Regarding revoking authentication tokens, it is recommended to + do this when the user is finished with her Google Data session. + The possibility that someone can intercept the token and use + it for malicious purposes is very small, but nevertheless it is + a good practice to terminate authenticated access to any service. +
+

+
+
+
+ + + + + + + + + +
+ Using Google Analytics + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.gdata.books.html b/zend/documentation/manual/core/en/zend.gdata.books.html new file mode 100644 index 0000000..81ffe31 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.gdata.books.html @@ -0,0 +1,600 @@ + + + + + Using the Book Search Data API - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Authenticating with AuthSub + + + + +
+
+

Using the Book Search Data API

+ + +

+ The Google Book Search Data API allows client applications to view + and update Book Search content in the form of Google Data API feeds. +

+ +

+ Your client application can use the Book Search Data API to issue + full-text searches for books and to retrieve standard book information, + ratings, and reviews. You can also access individual users' + » library collections and + public reviews. Finally, your application can submit authenticated requests + to enable users to create and modify library collections, ratings, labels, + reviews, and other account-specific entities. +

+ +

+ For more information on the Book Search Data API, please refer to the + official » PHP + Developer's Guide on code.google.com. +

+ +

Authenticating to the Book Search service

+ + +

+ You can access both public and private feeds using the Book Search + Data API. Public feeds don't require any authentication, but they are + read-only. If you want to modify user libraries, submit reviews or + ratings, or add labels, then your client needs to authenticate before + requesting private feeds. It can authenticate using either of two + approaches: AuthSub proxy authentication or ClientLogin username/password + authentication. Please refer to the » Authentication + section in the PHP Developer's Guide for more detail. +

+
+ +

Searching for books

+ + +

+ The Book Search Data API provides a number of feeds that list + collections of books. +

+ +

+ The most common action is to retrieve a list of books that match a + search query. To do so you create a VolumeQuery object + and pass it to the Books::getVolumeFeed() method. +

+ +

+ For example, to perform a keyword query, with a filter on + viewability to restrict the results to partial or full view books, use + the setMinViewability() and setQuery() + methods of the VolumeQuery object. The following code snippet + prints the title and viewability of all volumes whose metadata or text matches + the query term "domino": +

+ +
  1. $books = new Zend_Gdata_Books();
  2. +
  3. $query = $books->newVolumeQuery();
  4. +
  5.  
  6. +
  7. $query->setQuery('domino');
  8. +
  9. $query->setMinViewability('partial_view');
  10. +
  11.  
  12. +
  13. $feed = $books->getVolumeFeed($query);
  14. +
  15.  
  16. +
  17. foreach ($feed as $entry) {
  18. +
  19.     echo $entry->getVolumeId();
  20. +
  21.     echo $entry->getTitle();
  22. +
  23.     echo $entry->getViewability();
  24. +
  25. }
+ + +

+ The Query class, and subclasses like + VolumeQuery, are responsible for constructing feed + URLs. The VolumeQuery shown above constructs a URL + equivalent to the following: +

+ +
  1. http://www.google.com/books/feeds/volumes?q=keyword&amp;min-viewability=partial
+ + +

+ Note: Since Book Search results are + public, you can issue a Book Search query without authentication. +

+ +

+ Here are some of the most common VolumeQuery + methods for setting search parameters: +

+ +

+ setQuery(): Specifies a search + query term. Book Search searches all book metadata and full text for + books matching the term. Book metadata includes titles, keywords, + descriptions, author names, and subjects. + Note that any spaces, quotes or other punctuation in the parameter + value must be URL-escaped (Use a plus (+) for a + space). To search for an exact phrase, enclose the phrase in quotation marks. + For example, to search for books matching the phrase "spy plane", set + the q parameter to %22spy+plane%22. + You can also use any of the » + advanced search operators supported by Book Search. For example, + jane+austen+-inauthor:austen returns matches that mention + (but are not authored by) Jane Austen. +

+ +

+ setStartIndex(): Specifies + the index of the first matching result that should be included in the + result set. This parameter uses a one-based index, meaning the first + result is 1, the second result is 2 and so forth. This parameter works + in conjunction with the max-results + parameter to determine which results to return. For example, to + request the third set of 10 results—results 21-30—set + the start-index parameter to 21 and the + max-results parameter to 10. + Note: This isn't a general cursoring + mechanism. If you first send a query with + ?start-index=1&max-results=10 and then send another + query with ?start-index=11&max-results=10, the + service cannot guarantee that the results are equivalent to + ?start-index=1&max-results=20, because insertions and + deletions could have taken place in between the two queries. +

+ +

+ setMaxResults(): + Specifies the maximum number of results that should be included + in the result set. This parameter works in conjunction with the + start-index parameter to determine which + results to return. The default value of this parameter is + 10 and the maximum value is 20. +

+ +

+ setMinViewability(): Allows you to filter the results according + to the books' » viewability + status. This parameter accepts one of three values: + 'none' (the default, returning all matching books regardless of + viewability), 'partial_view' (returning only books + that the user can preview or view in their entirety), or + 'full_view' (returning only books that the user can + view in their entirety). +

+ +

Partner Co-Branded Search

+ + +

+ Google Book Search provides » Co-Branded + Search, which lets content partners provide full-text search of + their books from their own websites. +

+ +

+ If you are a partner who wants to do Co-Branded Search using the + Book Search Data API, you may do so by modifying the feed + URL above to point to your Co-Branded Search implementation. if, + for example, a Co-Branded Search is available at the following + URL: +

+ +
  1. http://www.google.com/books/p/PARTNER_COBRAND_ID?q=ball
+ + +

+ then you can obtain the same results using the Book Search Data + API at the following URL: +

+ +
  1. http://www.google.com/books/feeds/p/PARTNER_COBRAND_ID/volumes?q=ball+-soccer
+ + +

+ To specify an alternate URL when querying a volume feed, you can + provide an extra parameter to newVolumeQuery() +

+ +
  1. $query =
  2. +
  3.     $books->newVolumeQuery('http://www.google.com/books/p/PARTNER_COBRAND_ID');
+ + +

+ For additional information or support, visit our + » Partner help center. +

+
+
+ +

Using community features

+ + +

Adding a rating

+ + +

+ A user can add a rating to a book. Book Search uses a 1-5 + rating system in which 1 is the lowest rating. Users cannot + update or delete ratings. +

+ +

+ To add a rating, add a Rating object to a + VolumeEntry and post it to the annotation feed. In the + example below, we start from an empty VolumeEntry object. +

+ +
  1. $entry = new Zend_Gdata_Books_VolumeEntry();
  2. +
  3. $entry->setId(new Zend_Gdata_App_Extension_Id(VOLUME_ID));
  4. +
  5. $entry->setRating(new Zend_Gdata_Extension_Rating(3, 1, 5, 1));
  6. +
  7. $books->insertVolume($entry, Zend_Gdata_Books::MY_ANNOTATION_FEED_URI);
+ +
+ +

Reviews

+ + +

+ In addition to ratings, authenticated users can submit reviews or + edit their reviews. For information on how to request previously + submitted reviews, see » Retrieving annotations. +

+ +

Adding a review

+ + +

+ To add a review, add a Review object to a + VolumeEntry and post it to the annotation + feed. In the example below, we start from an existing + VolumeEntry object. +

+ +
  1. $annotationUrl = $entry->getAnnotationLink()->href;
  2. +
  3. $review        = new Zend_Gdata_Books_Extension_Review();
  4. +
  5.  
  6. +
  7. $review->setText("This book is amazing!");
  8. +
  9. $entry->setReview($review);
  10. +
  11. $books->insertVolume($entry, $annotationUrl);
+ +
+ +

Editing a review

+ + +

+ To update an existing review, first you retrieve the + review you want to update, then you modify it, and + then you submit it to the annotation feed. +

+ +
  1. $entryUrl = $entry->getId()->getText();
  2. +
  3. $review   = new Zend_Gdata_Books_Extension_Review();
  4. +
  5.  
  6. +
  7. $review->setText("This book is actually not that good!");
  8. +
  9. $entry->setReview($review);
  10. +
  11. $books->updateVolume($entry, $entryUrl);
+ +
+
+ +

Labels

+ + +

+ You can use the Book Search Data API to label volumes with + keywords. A user can submit, retrieve and modify labels. See + » Retrieving + annotations for how to read previously submitted labels. +

+ +

Submitting a set of labels

+ + +

+ To submit labels, add a Category object + with the scheme LABELS_SCHEME to a + VolumeEntry and post it to the annotation feed. +

+ +
  1. $annotationUrl = $entry->getAnnotationLink()->href;
  2. +
  3. $category      = new Zend_Gdata_App_Extension_Category(
  4. +
  5.     'rated',
  6. +
  7.     'http://schemas.google.com/books/2008/labels');
  8. +
  9. $entry->setCategory(array($category));
  10. +
  11. $books->insertVolume($entry, Zend_Gdata_Books::MY_ANNOTATION_FEED_URI);
+ +
+
+ +

Retrieving annotations: reviews, ratings, and labels

+ + +

+ You can use the Book Search Data API to retrieve annotations + submitted by a given user. Annotations include reviews, ratings, and + labels. To retrieve any user's annotations, you can send an + unauthenticated request that includes the user's user ID. To retrieve the + authenticated user's annotations, use the value me as the user + ID. +

+ +
  1. $feed = $books->getVolumeFeed(
  2. +
  3.             'http://www.google.com/books/feeds/users/USER_ID/volumes');
  4. +
  5. <i>(or)</i>
  6. +
  7. $feed = $books->getUserAnnotationFeed();
  8. +
  9.  
  10. +
  11. // print title(s) and rating value
  12. +
  13. foreach ($feed as $entry) {
  14. +
  15.     foreach ($feed->getTitles() as $title) {
  16. +
  17.         echo $title;
  18. +
  19.     }
  20. +
  21.     if ($entry->getRating()) {
  22. +
  23.         echo 'Rating: ' . $entry->getRating()->getAverage();
  24. +
  25.     }
  26. +
  27. }
+ + +

+ For a list of the supported query parameters, see the + » query parameters + section. +

+
+ +

Deleting Annotations

+ + +

+ If you retrieved an annotation entry containing ratings, + reviews, and/or labels, you can remove all annotations + by calling deleteVolume() on that entry. +

+ +
  1. $books->deleteVolume($entry);
+ +
+
+ +

Book collections and My Library

+ + +

+ Google Book Search provides a number of user-specific + book collections, each of which has its own feed. +

+ +

+ The most important collection is the user's My Library, which + represents the books the user would like to remember, organize, and + share with others. This is the collection the user sees when accessing + his or her » My Library + page. +

+ +

Retrieving books in a user's library

+ + +

+ The following sections describe how to retrieve a list + of books from a user's library, with or without query + parameters. +

+ +

+ You can query a Book Search public feed without authentication. +

+ +

Retrieving all books in a user's library

+ + +

+ To retrieve the user's books, send a query to the + My Library feed. To get the library of the authenticated + user, use me in place of USER_ID. +

+ +
  1. $feed = $books->getUserLibraryFeed();
+ + +

+ Note: The feed may not contain all of the user's books, because + there's a default limit on the number of results returned. For + more information, see the max-results query parameter in + » Searching for books. +

+
+ +

Searching for books in a user's library

+ + +

+ Just as you can » search across all books, + you can do a full-text search over just the books in a + user's library. To do this, just set the appropriate + paramters on the VolumeQuery object. +

+ +

+ For example, the following query returns all the books in + your library that contain the word "bear": +

+ +
  1. $query = $books->newVolumeQuery(
  2. +
  3.     'http://www.google.com/books/feeds/users' .
  4. +
  5.     '/USER_ID/collections/library/volumes');
  6. +
  7. $query->setQuery('bear');
  8. +
  9. $feed = $books->getVolumeFeed($query);
+ + +

+ For a list of the supported query parameters, see the + » query parameters + section. In addition, you can search for books that have been + » labeled by the user: +

+ +
  1. $query = $books->newVolumeQuery(
  2. +
  3.     'http://www.google.com/books/feeds/users/' .
  4. +
  5.     'USER_ID/collections/library/volumes');
  6. +
  7. $query->setCategory(
  8. +
  9. $query->setCategory('favorites');
  10. +
  11. $feed = $books->getVolumeFeed($query);
+ +
+
+ +

Updating books in a user's library

+ + +

+ You can use the Book Search Data API to add a book to, or remove + a book from, a user's library. Ratings, reviews, and labels are valid + across all the collections of a user, and are thus edited using the + annotation feed (see » Using community features). +

+ +

Adding a book to a library

+ + +

+ After authenticating, you can add books to the current user's library. +

+ +

+ You can either create an entry from scratch if you + know the volume ID, or insert an entry read from any feed. +

+ +

+ The following example creates a new entry and adds it to the library: +

+ +
  1. $entry = new Zend_Gdata_Books_VolumeEntry();
  2. +
  3. $entry->setId(new Zend_Gdata_App_Extension_Id(VOLUME_ID));
  4. +
  5. $books->insertVolume(
  6. +
  7.     $entry,
  8. +
  9.     Zend_Gdata_Books::MY_LIBRARY_FEED_URI
  10. +
  11. );
+ + +

+ The following example adds an existing + VolumeEntry object to the library: +

+ +
  1. $books->insertVolume(
  2. +
  3.     $entry,
  4. +
  5.     Zend_Gdata_Books::MY_LIBRARY_FEED_URI
  6. +
  7. );
+ +
+ +

Removing a book from a library

+ + +

+ To remove a book from a user's library, call + deleteVolume() on the + VolumeEntry object. +

+ +
  1. $books->deleteVolume($entry);
+ +
+
+
+
+
+ + + + + + + + + +
+ Authenticating with AuthSub + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.gdata.calendar.html b/zend/documentation/manual/core/en/zend.gdata.calendar.html new file mode 100644 index 0000000..bb360c8 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.gdata.calendar.html @@ -0,0 +1,956 @@ + + + + + Using Google Calendar - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Authenticating with ClientLogin + + + + +
+
+

Using Google Calendar

+ + +

+ You can use the + Zend_Gdata_Calendar + class to view, create, update, and delete events in the online Google Calendar service. +

+ +

+ See » + http://code.google.com/apis/calendar/overview.html + for more information about the Google Calendar API. +

+ +

Connecting To The Calendar Service

+ + +

+ The Google Calendar API, like all GData APIs, is + based off of the Atom Publishing Protocol (APP), an XML based format + for managing web-based resources. Traffic between a client and the Google Calendar + servers occurs over HTTP and allows for both authenticated and + unauthenticated connections. +

+ +

+ Before any transactions can occur, this connection needs to be made. Creating a + connection to the calendar servers involves two steps: creating an + HTTP client and binding a Zend_Gdata_Calendar + service instance to that client. +

+ +

Authentication

+ + +

+ The Google Calendar API allows access to both public and private + calendar feeds. Public feeds do not require authentication, but are read-only and + offer reduced functionality. Private feeds offers the most complete functionality + but requires an authenticated connection to the calendar servers. There are three + authentication schemes that are supported by Google Calendar: +

+ +
    +
  • +

    + ClientAuth + provides direct username/password authentication to the + calendar servers. Since this scheme requires that users + provide your application with their password, this + authentication is only recommended when other + authentication schemes are insufficient. +

    +
  • + +
  • +

    + AuthSub + allows authentication to the calendar servers via a + Google proxy server. This provides the same level of + convenience as ClientAuth but without the security + risk, making this an ideal choice for web-based + applications. +

    +
  • + +
  • +

    + MagicCookie + allows authentication based on a semi-random URL + available from within the Google Calendar interface. + This is the simplest authentication scheme to + implement, but requires that users manually retrieve + their secure URL before they can authenticate, doesn't + provide access to calendar lists, and is limited to + read-only access. +

    +
  • +
+ +

+ The Zend_Gdata + library provides support for all three authentication schemes. + The rest of this chapter will assume that you are familiar the + authentication schemes available and how to create an + appropriate authenticated connection. For more information, + please see section the Authentication section + of this manual or the » Authentication Overview in the + Google Data API Developer's Guide. +

+
+ +

Creating A Service Instance

+ + +

+ In order to interact with Google Calendar, this library provides the + Zend_Gdata_Calendar service class. This class provides a + common interface to the Google Data and Atom Publishing Protocol models and assists + in marshaling requests to and from the calendar servers. +

+ +

+ Once deciding on an authentication scheme, the next step is to create an instance + of Zend_Gdata_Calendar. The class constructor takes an + instance of Zend_Http_Client as a single argument. This + provides an interface for AuthSub and ClientAuth authentication, as both of these + require creation of a special authenticated HTTP client. If no + arguments are provided, an unauthenticated instance of + Zend_Http_Client will be automatically created. +

+ +

+ The example below shows how to create a Calendar service class using ClientAuth + authentication: +

+ +
  1. // Parameters for ClientAuth authentication
  2. +
  3. $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
  4. +
  5. $user = "sample.user@gmail.com";
  6. +
  7. $pass = "pa$$w0rd";
  8. +
  9.  
  10. +
  11. // Create an authenticated HTTP client
  12. +
  13. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  14. +
  15.  
  16. +
  17. // Create an instance of the Calendar service
  18. +
  19. $service = new Zend_Gdata_Calendar($client);
+ + +

+ A Calendar service using AuthSub can be created in a similar, though slightly more + lengthy fashion: +

+ +
  1. /*
  2. +
  3. * Retrieve the current URL so that the AuthSub server knows where to
  4. +
  5. * redirect the user after authentication is complete.
  6. +
  7. */
  8. +
  9. function getCurrentUrl()
  10. +
  11. {
  12. +
  13.     global $_SERVER;
  14. +
  15.  
  16. +
  17.     // Filter php_self to avoid a security vulnerability.
  18. +
  19.     $php_request_uri =
  20. +
  21.         htmlentities(substr($_SERVER['REQUEST_URI'],
  22. +
  23.                             0,
  24. +
  25.                             strcspn($_SERVER['REQUEST_URI'], "\n\r")),
  26. +
  27.                             ENT_QUOTES);
  28. +
  29.  
  30. +
  31.     if (isset($_SERVER['HTTPS']) &&
  32. +
  33.         strtolower($_SERVER['HTTPS']) == 'on') {
  34. +
  35.         $protocol = 'https://';
  36. +
  37.     } else {
  38. +
  39.         $protocol = 'http://';
  40. +
  41.     }
  42. +
  43.     $host = $_SERVER['HTTP_HOST'];
  44. +
  45.     if ($_SERVER['HTTP_PORT'] != '' &&
  46. +
  47.         (($protocol == 'http://' && $_SERVER['HTTP_PORT'] != '80') ||
  48. +
  49.         ($protocol == 'https://' && $_SERVER['HTTP_PORT'] != '443'))) {
  50. +
  51.         $port = ':' . $_SERVER['HTTP_PORT'];
  52. +
  53.     } else {
  54. +
  55.         $port = '';
  56. +
  57.     }
  58. +
  59.     return $protocol . $host . $port . $php_request_uri;
  60. +
  61. }
  62. +
  63.  
  64. +
  65. /**
  66. +
  67. * Obtain an AuthSub authenticated HTTP client, redirecting the user
  68. +
  69. * to the AuthSub server to login if necessary.
  70. +
  71. */
  72. +
  73. function getAuthSubHttpClient()
  74. +
  75. {
  76. +
  77.     global $_SESSION, $_GET;
  78. +
  79.  
  80. +
  81.     // if there is no AuthSub session or one-time token waiting for us,
  82. +
  83.     // redirect the user to the AuthSub server to get one.
  84. +
  85.     if (!isset($_SESSION['sessionToken']) && !isset($_GET['token'])) {
  86. +
  87.         // Parameters to give to AuthSub server
  88. +
  89.         $next = getCurrentUrl();
  90. +
  91.         $scope = "http://www.google.com/calendar/feeds/";
  92. +
  93.         $secure = false;
  94. +
  95.         $session = true;
  96. +
  97.  
  98. +
  99.         // Redirect the user to the AuthSub server to sign in
  100. +
  101.  
  102. +
  103.         $authSubUrl = Zend_Gdata_AuthSub::getAuthSubTokenUri($next,
  104. +
  105.                                                              $scope,
  106. +
  107.                                                              $secure,
  108. +
  109.                                                              $session);
  110. +
  111.          header("HTTP/1.0 307 Temporary redirect");
  112. +
  113.  
  114. +
  115.          header("Location: " . $authSubUrl);
  116. +
  117.  
  118. +
  119.          exit();
  120. +
  121.     }
  122. +
  123.  
  124. +
  125.     // Convert an AuthSub one-time token into a session token if needed
  126. +
  127.     if (!isset($_SESSION['sessionToken']) && isset($_GET['token'])) {
  128. +
  129.         $_SESSION['sessionToken'] =
  130. +
  131.             Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
  132. +
  133.     }
  134. +
  135.  
  136. +
  137.     // At this point we are authenticated via AuthSub and can obtain an
  138. +
  139.     // authenticated HTTP client instance
  140. +
  141.  
  142. +
  143.     // Create an authenticated HTTP client
  144. +
  145.     $client = Zend_Gdata_AuthSub::getHttpClient($_SESSION['sessionToken']);
  146. +
  147.     return $client;
  148. +
  149. }
  150. +
  151.  
  152. +
  153. // -> Script execution begins here <-
  154. +
  155.  
  156. +
  157. // Make sure that the user has a valid session, so we can record the
  158. +
  159. // AuthSub session token once it is available.
  160. +
  161. +
  162.  
  163. +
  164. // Create an instance of the Calendar service, redirecting the user
  165. +
  166. // to the AuthSub server if necessary.
  167. +
  168. $service = new Zend_Gdata_Calendar(getAuthSubHttpClient());
+ + +

+ Finally, an unauthenticated server can be created for use with either public feeds + or MagicCookie authentication: +

+ +
  1. // Create an instance of the Calendar service using an unauthenticated
  2. +
  3. // HTTP client
  4. +
  5.  
  6. +
  7. $service = new Zend_Gdata_Calendar();
+ + +

+ Note that MagicCookie authentication is not supplied with the + HTTP connection, but is instead specified along with the desired + visibility when submitting queries. See the section on retrieving events below for + an example. +

+
+
+ +

Retrieving A Calendar List

+ + +

+ The calendar service supports retrieving a list of calendars for the authenticated + user. This is the same list of calendars which are displayed in the Google Calendar + UI, except those marked as "hidden" are also available. +

+ +

+ The calendar list is always private and must be accessed over an authenticated + connection. It is not possible to retrieve another user's calendar list and it cannot + be accessed using MagicCookie authentication. Attempting to access a calendar list + without holding appropriate credentials will fail and result in a 401 (Authentication + Required) status code. +

+ +
  1. $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Calendar($client);
  6. +
  7.  
  8. +
  9. try {
  10. +
  11.     $listFeed= $service->getCalendarListFeed();
  12. +
  13. } catch (Zend_Gdata_App_Exception $e) {
  14. +
  15.     echo "Error: " . $e->getMessage();
  16. +
  17. }
+ + +

+ Calling getCalendarListFeed() creates a new instance of + Zend_Gdata_Calendar_ListFeed containing each available calendar + as an instance of Zend_Gdata_Calendar_ListEntry. After retrieving + the feed, you can use the iterator and accessors contained within the feed to inspect + the enclosed calendars. +

+ +
  1. echo "<h1>Calendar List Feed</h1>";
  2. +
  3. echo "<ul>";
  4. +
  5. foreach ($listFeed as $calendar) {
  6. +
  7.     echo "<li>" . $calendar->title .
  8. +
  9.          " (Event Feed: " . $calendar->id . ")</li>";
  10. +
  11. }
  12. +
  13. echo "</ul>";
+ +
+ +

Retrieving Events

+ + +

+ Like the list of calendars, events are also retrieved using the + Zend_Gdata_Calendar service class. The event list returned is of + type Zend_Gdata_Calendar_EventFeed and contains each event as an + instance of Zend_Gdata_Calendar_EventEntry. As before, the + iterator and accessors contained within the event feed instance allow inspection of + individual events. +

+ +

Queries

+ + +

+ When retrieving events using the Calendar API, specially + constructed query URLs are used to describe what events should be + returned. The Zend_Gdata_Calendar_EventQuery class simplifies + this task by automatically constructing a query URL based on + provided parameters. A full list of these parameters is available at the » Queries section + of the Google Data APIs Protocol Reference. However, + there are three parameters that are worth special attention: +

+ +
    +
  • +

    + User + is used to specify the user whose calendar is being + searched for, and is specified as an email address. If + no user is provided, "default" will be used instead to + indicate the currently authenticated user (if + authenticated). +

    +
  • + +
  • +

    + Visibility + specifies whether a users public or private calendar + should be searched. If using an unauthenticated session + and no MagicCookie is available, only the public feed + will be available. +

    +
  • + +
  • +

    + Projection + specifies how much data should be returned by the + server and in what format. In most cases you will want + to use the "full" projection. Also available is the + "basic" projection, which places most meta-data into + each event's content field as human readable text, and + the "composite" projection which includes complete text + for any comments alongside each event. The "composite" + view is often much larger than the "full" view. +

    +
  • +
+
+ +

Retrieving Events In Order Of Start Time

+ + +

+ The example below illustrates the use of the Zend_Gdata_Query + class and specifies the private visibility feed, which requires that an + authenticated connection is available to the calendar servers. If a MagicCookie is + being used for authentication, the visibility should be instead set to + "private-magicCookieValue", where magicCookieValue is the + random string obtained when viewing the private XML address in + the Google Calendar UI. Events are requested chronologically by start time and only + events occurring in the future are returned. +

+ +
  1. $query = $service->newEventQuery();
  2. +
  3. $query->setUser('default');
  4. +
  5. // Set to $query->setVisibility('private-magicCookieValue') if using
  6. +
  7. // MagicCookie auth
  8. +
  9. $query->setVisibility('private');
  10. +
  11. $query->setProjection('full');
  12. +
  13. $query->setOrderby('starttime');
  14. +
  15. $query->setFutureevents('true');
  16. +
  17.  
  18. +
  19. // Retrieve the event list from the calendar server
  20. +
  21. try {
  22. +
  23.     $eventFeed = $service->getCalendarEventFeed($query);
  24. +
  25. } catch (Zend_Gdata_App_Exception $e) {
  26. +
  27.     echo "Error: " . $e->getMessage();
  28. +
  29. }
  30. +
  31.  
  32. +
  33. // Iterate through the list of events, outputting them as an HTML list
  34. +
  35. echo "<ul>";
  36. +
  37. foreach ($eventFeed as $event) {
  38. +
  39.     echo "<li>" . $event->title . " (Event ID: " . $event->id . ")</li>";
  40. +
  41. }
  42. +
  43. echo "</ul>";
+ + +

+ Additional properties such as ID, author, when, event status, visibility, web + content, and content, among others are available within + Zend_Gdata_Calendar_EventEntry. Refer to the + » Zend Framework + API Documentation and the + » Calendar Protocol + Reference for a complete list. +

+
+ +

Retrieving Events In A Specified Date Range

+ + +

+ To print out all events within a certain range, for example from December 1, + 2006 through December 15, 2007, add the following two lines to the previous sample. + Take care to remove "$query->setFutureevents('true')", since + futureevents will override startMin and + startMax. +

+ +
  1. $query->setStartMin('2006-12-01');
  2. +
  3. $query->setStartMax('2006-12-16');
+ + +

+ Note that startMin is inclusive whereas + startMax is exclusive. As a result, only events through + 2006-12-15 23:59:59 will be returned. +

+
+ +

Retrieving Events By Fulltext Query

+ + +

+ To print out all events which contain a specific word, for example "dogfood", use + the setQuery() method when creating the query. +

+ +
  1. $query->setQuery("dogfood");
+ +
+ +

Retrieving Individual Events

+ + +

+ Individual events can be retrieved by specifying their event ID as part of the + query. Instead of calling getCalendarEventFeed(), + getCalendarEventEntry() should be called instead. +

+ +
  1. $query = $service->newEventQuery();
  2. +
  3. $query->setUser('default');
  4. +
  5. $query->setVisibility('private');
  6. +
  7. $query->setProjection('full');
  8. +
  9. $query->setEvent($eventId);
  10. +
  11.  
  12. +
  13. try {
  14. +
  15.     $event = $service->getCalendarEventEntry($query);
  16. +
  17. } catch (Zend_Gdata_App_Exception $e) {
  18. +
  19.     echo "Error: " . $e->getMessage();
  20. +
  21. }
+ + +

+ In a similar fashion, if the event URL is known, it can be passed + directly into getCalendarEntry() to retrieve a specific + event. In this case, no query object is required since the event + URL contains all the necessary information to retrieve the event. +

+ +
  1. $eventURL = "http://www.google.com/calendar/feeds/default/private"
  2. +
  3.           . "/full/g829on5sq4ag12se91d10uumko";
  4. +
  5.  
  6. +
  7. try {
  8. +
  9.     $event = $service->getCalendarEventEntry($eventURL);
  10. +
  11. } catch (Zend_Gdata_App_Exception $e) {
  12. +
  13.     echo "Error: " . $e->getMessage();
  14. +
  15. }
+ +
+
+ +

Creating Events

+ + +

Creating Single-Occurrence Events

+ + +

+ Events are added to a calendar by creating an instance of + Zend_Gdata_EventEntry and populating it with the appropriate + data. The calendar service instance (Zend_Gdata_Calendar) is + then used to used to transparently covert the event into XML and + POST it to the calendar server. Creating events requires either an AuthSub or + ClientAuth authenticated connection to the calendar server. +

+ +

At a minimum, the following attributes should be set:

+ +
    +
  • +

    + Title + provides the headline that will appear above the event + within the Google Calendar UI. +

    +
  • + +
  • +

    + When + indicates the duration of the event and, optionally, + any reminders that are associated with it. See the next + section for more information on this attribute. +

    +
  • +
+ +

Other useful attributes that may optionally set include:

+ +
    +
  • +

    + Author + provides information about the user who created the + event. +

    +
  • + +
  • +

    + Content + provides additional information about the event which + appears when the event details are requested from + within Google Calendar. +

    +
  • + +
  • +

    + EventStatus + indicates whether the event is confirmed, tentative, or + canceled. +

    +
  • + +
  • +

    + Transparency + indicates whether the event should be consume time on + the user's free/busy list. +

    +
  • + +
  • +

    + WebContent + allows links to external content to be provided within + an event. +

    +
  • + +
  • +

    + Where + indicates the location of the event. +

    +
  • + +
  • +

    + Visibility + allows the event to be hidden from the public event + lists. +

    +
  • +
+ +

+ For a complete list of event attributes, refer to the » Zend Framework + API Documentation and the » Calendar Protocol + Reference. Attributes that can contain multiple values, such as where, + are implemented as arrays and need to be created accordingly. Be aware that all of + these attributes require objects as parameters. Trying instead to populate them + using strings or primitives will result in errors during conversion to + XML. +

+ +

+ Once the event has been populated, it can be uploaded to the calendar server by + passing it as an argument to the calendar service's + insertEvent() function. +

+ +
  1. // Create a new entry using the calendar service's magic factory method
  2. +
  3. $event= $service->newEventEntry();
  4. +
  5.  
  6. +
  7. // Populate the event with the desired information
  8. +
  9. // Note that each attribute is crated as an instance of a matching class
  10. +
  11. $event->title = $service->newTitle("My Event");
  12. +
  13. $event->where = array($service->newWhere("Mountain View, California"));
  14. +
  15. $event->content =
  16. +
  17.     $service->newContent(" This is my awesome event. RSVP required.");
  18. +
  19.  
  20. +
  21. // Set the date using RFC 3339 format.
  22. +
  23. $startDate = "2008-01-20";
  24. +
  25. $startTime = "14:00";
  26. +
  27. $endDate = "2008-01-20";
  28. +
  29. $endTime = "16:00";
  30. +
  31. $tzOffset = "-08";
  32. +
  33.  
  34. +
  35. $when = $service->newWhen();
  36. +
  37. $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00";
  38. +
  39. $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00";
  40. +
  41. $event->when = array($when);
  42. +
  43.  
  44. +
  45. // Upload the event to the calendar server
  46. +
  47. // A copy of the event as it is recorded on the server is returned
  48. +
  49. $newEvent = $service->insertEvent($event);
+ +
+ +

Event Schedules and Reminders

+ + +

+ An event's starting time and duration are determined by the value of its + when property, which contains the properties + startTime, endTime, and + valueString. StartTime and + EndTime control the duration of the + event, while the valueString property is currently unused. +

+ +

+ All-day events can be scheduled by specifying only the date omitting the time when + setting startTime and endTime. Likewise, + zero-duration events can be specified by omitting the endTime. + In all cases, date and time values should be provided in + » RFC3339 format. +

+ +
  1. // Schedule the event to occur on December 05, 2007 at 2 PM PST (UTC-8)
  2. +
  3. // with a duration of one hour.
  4. +
  5. $when = $service->newWhen();
  6. +
  7. $when->startTime = "2007-12-05T14:00:00-08:00";
  8. +
  9. $when->endTime="2007-12-05T15:00:00:00-08:00";
  10. +
  11.  
  12. +
  13. // Apply the when property to an event
  14. +
  15. $event->when = array($when);
+ + +

+ The when attribute also controls when reminders are sent to a + user. Reminders are stored in an array and each event may have up to find reminders + associated with it. +

+ +

+ For a reminder to be valid, it needs to have two attributes + set: method and a time. Method can accept + one of the following strings: "alert", "email", or "sms". The time should be entered + as an integer and can be set with either the property minutes, + hours, days, or + absoluteTime. However, a valid request may only have one of + these attributes set. If a mixed time is desired, convert to the most precise unit + available. For example, 1 hour and 30 minutes should be entered as 90 minutes. +

+ +
  1. // Create a new reminder object. It should be set to send an email
  2. +
  3. // to the user 10 minutes beforehand.
  4. +
  5. $reminder = $service->newReminder();
  6. +
  7. $reminder->method = "email";
  8. +
  9. $reminder->minutes = "10";
  10. +
  11.  
  12. +
  13. // Apply the reminder to an existing event's when property
  14. +
  15. $when = $event->when[0];
  16. +
  17. $when->reminders = array($reminder);
+ +
+ +

Creating Recurring Events

+ + +

+ Recurring events are created the same way as single-occurrence events, except a + recurrence attribute should be provided instead of a where attribute. The + recurrence attribute should hold a string describing the event's recurrence pattern + using properties defined in the iCalendar standard (» RFC 2445). +

+ +

+ Exceptions to the recurrence pattern will usually be specified by a distinct + recurrenceException attribute. However, the iCalendar standard + provides a secondary format for defining recurrences, and the possibility that + either may be used must be accounted for. +

+ +

+ Due to the complexity of parsing recurrence patterns, further information on this + them is outside the scope of this document. However, more information can be found + in the » Common + Elements section of the Google Data APIs Developer + Guide, as well as in RFC 2445. +

+ +
  1. // Create a new entry using the calendar service's magic factory method
  2. +
  3. $event= $service->newEventEntry();
  4. +
  5.  
  6. +
  7. // Populate the event with the desired information
  8. +
  9. // Note that each attribute is crated as an instance of a matching class
  10. +
  11. $event->title = $service->newTitle("My Recurring Event");
  12. +
  13. $event->where = array($service->newWhere("Palo Alto, California"));
  14. +
  15. $event->content =
  16. +
  17.     $service->newContent(' This is my other awesome event, ' .
  18. +
  19.                          ' occurring all-day every Tuesday from ' .
  20. +
  21.                          '2007-05-01 until 207-09-04. No RSVP required.');
  22. +
  23.  
  24. +
  25. // Set the duration and frequency by specifying a recurrence pattern.
  26. +
  27.  
  28. +
  29. $recurrence = "DTSTART;VALUE=DATE:20070501\r\n" .
  30. +
  31.         "DTEND;VALUE=DATE:20070502\r\n" .
  32. +
  33.         "RRULE:FREQ=WEEKLY;BYDAY=Tu;UNTIL=20070904\r\n";
  34. +
  35.  
  36. +
  37. $event->recurrence = $service->newRecurrence($recurrence);
  38. +
  39.  
  40. +
  41. // Upload the event to the calendar server
  42. +
  43. // A copy of the event as it is recorded on the server is returned
  44. +
  45. $newEvent = $service->insertEvent($event);
+ +
+ +

Using QuickAdd

+ + +

+ QuickAdd is a feature which allows events to be created using free-form text entry. + For example, the string "Dinner at Joe's Diner on Thursday" would create an event + with the title "Dinner", location "Joe's Diner", and date "Thursday". To take + advantage of QuickAdd, create a new QuickAdd property set to + TRUE and store the freeform text as a + content property. +

+ +
  1. // Create a new entry using the calendar service's magic factory method
  2. +
  3. $event= $service->newEventEntry();
  4. +
  5.  
  6. +
  7. // Populate the event with the desired information
  8. +
  9. $event->content= $service->newContent("Dinner at Joe's Diner on Thursday");
  10. +
  11. $event->quickAdd = $service->newQuickAdd("true");
  12. +
  13.  
  14. +
  15. // Upload the event to the calendar server
  16. +
  17. // A copy of the event as it is recorded on the server is returned
  18. +
  19. $newEvent = $service->insertEvent($event);
+ +
+
+ +

Modifying Events

+ + +

+ Once an instance of an event has been obtained, the event's attributes can be locally + modified in the same way as when creating an event. Once all modifications are + complete, calling the event's save() method will upload the + changes to the calendar server and return a copy of the event as it was created on the + server. +

+ +

+ In the event another user has modified the event since the local copy was retrieved, + save() will fail and the server will return a 409 (Conflict) + status code. To resolve this a fresh copy of the event must be retrieved from the server + before attempting to resubmit any modifications. +

+ +
  1. // Get the first event in the user's event list
  2. +
  3. $event = $eventFeed[0];
  4. +
  5.  
  6. +
  7. // Change the title to a new value
  8. +
  9. $event->title = $service->newTitle("Woof!");
  10. +
  11.  
  12. +
  13. // Upload the changes to the server
  14. +
  15. try {
  16. +
  17.     $event->save();
  18. +
  19. } catch (Zend_Gdata_App_Exception $e) {
  20. +
  21.     echo "Error: " . $e->getMessage();
  22. +
  23. }
+ +
+ +

Deleting Events

+ + +

+ Calendar events can be deleted either by calling the calendar service's + delete() method and providing the edit URL + of an event or by calling an existing event's own delete() + method. +

+ +

+ In either case, the deleted event will still show up on a user's private event feed if + an updateMin query parameter is provided. Deleted events can be + distinguished from regular events because they will have their + eventStatus property set to + "http://schemas.google.com/g/2005#event.canceled". +

+ +
  1. // Option 1: Events can be deleted directly
  2. +
  3. $event->delete();
+ + +
  1. // Option 2: Events can be deleted supplying the edit URL of the event
  2. +
  3. // to the calendar service, if known
  4. +
  5. $service->delete($event->getEditLink()->href);
+ +
+ +

Accessing Event Comments

+ + +

+ When using the full event view, comments are not directly stored within an entry. + Instead, each event contains a URL to its associated comment feed + which must be manually requested. +

+ +

+ Working with comments is fundamentally similar to working with events, with the only + significant difference being that a different feed and event class should be used and + that the additional meta-data for events such as where and when does not exist for + comments. Specifically, the comment's author is stored in the + author property, and the comment text is stored in the + content property. +

+ +
  1. // Extract the comment URL from the first event in a user's feed list
  2. +
  3. $event = $eventFeed[0];
  4. +
  5. $commentUrl = $event->comments->feedLink->url;
  6. +
  7.  
  8. +
  9. // Retrieve the comment list for the event
  10. +
  11. try {
  12. +
  13. $commentFeed = $service->getFeed($commentUrl);
  14. +
  15. } catch (Zend_Gdata_App_Exception $e) {
  16. +
  17.     echo "Error: " . $e->getMessage();
  18. +
  19. }
  20. +
  21.  
  22. +
  23. // Output each comment as an HTML list
  24. +
  25. echo "<ul>";
  26. +
  27. foreach ($commentFeed as $comment) {
  28. +
  29.     echo "<li><em>Comment By: " . $comment->author->name "</em><br/>" .
  30. +
  31.          $comment->content . "</li>";
  32. +
  33. }
  34. +
  35. echo "</ul>";
+ +
+
+
+ + + + + + + + + +
+ Authenticating with ClientLogin + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.gdata.clientlogin.html b/zend/documentation/manual/core/en/zend.gdata.clientlogin.html new file mode 100644 index 0000000..ef4a7f7 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.gdata.clientlogin.html @@ -0,0 +1,218 @@ + + + + + Authenticating with ClientLogin - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Using the Book Search Data API + + + + +
+
+

Authenticating with ClientLogin

+ + +

+ The ClientLogin mechanism enables you to write PHP application + that acquire authenticated access to Google Services, + specifying a user's credentials in the HTTP Client. +

+ +

+ See » http://code.google.com/apis/accounts/AuthForInstalledApps.html + for more information about Google Data ClientLogin authentication. +

+ +

+ The Google documentation says the ClientLogin mechanism is appropriate + for "installed applications" whereas the AuthSub mechanism is + for "web applications." The difference is that AuthSub requires + interaction from the user, and a browser interface that can react + to redirection requests. The ClientLogin solution uses PHP code to + supply the account credentials; the user is not required to enter her + credentials interactively. +

+ +

+ The account credentials supplied via the ClientLogin mechanism must + be valid credentials for Google services, but they are not required + to be those of the user who is using the PHP application. +

+ +

Creating a ClientLogin authenticated Http Client

+ + +

+ The process of creating an authenticated HTTP client using + the ClientLogin mechanism is to call the static function + Zend_Gdata_ClientLogin::getHttpClient() + and pass the Google account credentials in plain text. + The return value of this function is an object of class + Zend_Http_Client. +

+ +

+ The optional third parameter is the name of the Google Data + service. For instance, this can be 'cl' for Google Calendar. + The default is "xapi", which is recognized by Google Data + servers as a generic service name. +

+ +

+ The optional fourth parameter is an instance of Zend_Http_Client. + This allows you to set options in the client, such as proxy + server settings. If you pass NULL for this + parameter, a generic Zend_Http_Client object is created. +

+ +

+ The optional fifth parameter is a short string that Google Data + servers use to identify the client application for logging + purposes. By default this is string "Zend-ZendFramework"; +

+ +

+ The optional sixth parameter is a string ID for a + CAPTCHA challenge that has been issued by + the server. It is only necessary when logging in after receiving + a CAPTCHA challenge from a previous + login attempt. +

+ +

+ The optional seventh parameter is a user's response to a + CAPTCHA challenge that has been issued by + the server. It is only necessary when logging in after receiving + a CAPTCHA challenge from a previous + login attempt. +

+ +

+ Below is an example of PHP code for a web application + to acquire authentication to use the Google Calendar service + and create a Zend_Gdata client object using that authenticated + Zend_Http_Client. +

+ +
  1. // Enter your Google account credentials
  2. +
  3. $email = 'johndoe@gmail.com';
  4. +
  5. $passwd = 'xxxxxxxx';
  6. +
  7. try {
  8. +
  9.    $client = Zend_Gdata_ClientLogin::getHttpClient($email, $passwd, 'cl');
  10. +
  11. } catch (Zend_Gdata_App_CaptchaRequiredException $cre) {
  12. +
  13.     echo 'URL of CAPTCHA image: ' . $cre->getCaptchaUrl() . "\n";
  14. +
  15.     echo 'Token ID: ' . $cre->getCaptchaToken() . "\n";
  16. +
  17. } catch (Zend_Gdata_App_AuthException $ae) {
  18. +
  19.    echo 'Problem authenticating: ' . $ae->exception() . "\n";
  20. +
  21. }
  22. +
  23.  
  24. +
  25. $cal = new Zend_Gdata_Calendar($client);
+ +
+ +

Terminating a ClientLogin authenticated Http Client

+ + +

+ There is no method to revoke ClientLogin authentication as there + is in the AuthSub token-based solution. The credentials used + in the ClientLogin authentication are the login and password + to a Google account, and therefore these can be used repeatedly + in the future. +

+
+
+
+ + + + + + + + + +
+ Using the Book Search Data API + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.gdata.docs.html b/zend/documentation/manual/core/en/zend.gdata.docs.html new file mode 100644 index 0000000..f219a46 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.gdata.docs.html @@ -0,0 +1,266 @@ + + + + + Using Google Documents List Data API - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Using Google Calendar + + + + +
+
+

Using Google Documents List Data API

+ + +

+ The Google Documents List Data API allows client applications to + upload documents to Google Documents and list them in the form of + Google Data API ("GData") feeds. Your client application can request + a list of a user's documents, and query the content in an existing + document. +

+ +

+ See » http://code.google.com/apis/documents/overview.html + for more information about the Google Documents List API. +

+ +

Get a List of Documents

+ + +

+ You can get a list of the Google Documents for a particular user by using + the getDocumentListFeed() method of the docs + service. The service will return a + Zend_Gdata_Docs_DocumentListFeed object + containing a list of documents associated with the authenticated + user. +

+ +
  1. $service = Zend_Gdata_Docs::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $docs = new Zend_Gdata_Docs($client);
  6. +
  7. $feed = $docs->getDocumentListFeed();
+ + +

+ The resulting Zend_Gdata_Docs_DocumentListFeed object + represents the response from the server. This feed contains a list of + Zend_Gdata_Docs_DocumentListEntry objects + ($feed->entries), each of which represents a single + Google Document. +

+
+ +

Upload a Document

+ + +

+ You can create a new Google Document by uploading a word + processing document, spreadsheet, or presentation. This example + is from the interactive Docs.php sample which comes with the + library. It demonstrates uploading a file and printing + information about the result from the server. +

+ +
  1. /**
  2. +
  3. * Upload the specified document
  4. +
  5. *
  6. +
  7. * @param Zend_Gdata_Docs $docs The service object to use for communicating
  8. +
  9. *     with the Google Documents server.
  10. +
  11. * @param boolean $html True if output should be formatted for display in a
  12. +
  13. *     web browser.
  14. +
  15. * @param string $originalFileName The name of the file to be uploaded. The
  16. +
  17. *     MIME type of the file is determined from the extension on this file
  18. +
  19. *     name. For example, test.csv is uploaded as a comma separated volume
  20. +
  21. *     and converted into a spreadsheet.
  22. +
  23. * @param string $temporaryFileLocation (optional) The file in which the
  24. +
  25. *     data for the document is stored. This is used when the file has been
  26. +
  27. *     uploaded from the client's machine to the server and is stored in
  28. +
  29. *     a temporary file which does not have an extension. If this parameter
  30. +
  31. *     is null, the file is read from the originalFileName.
  32. +
  33. */
  34. +
  35. function uploadDocument($docs, $html, $originalFileName,
  36. +
  37.                         $temporaryFileLocation) {
  38. +
  39.   $fileToUpload = $originalFileName;
  40. +
  41.   if ($temporaryFileLocation) {
  42. +
  43.     $fileToUpload = $temporaryFileLocation;
  44. +
  45.   }
  46. +
  47.  
  48. +
  49.   // Upload the file and convert it into a Google Document. The original
  50. +
  51.   // file name is used as the title of the document and the MIME type
  52. +
  53.   // is determined based on the extension on the original file name.
  54. +
  55.   $newDocumentEntry = $docs->uploadFile($fileToUpload, $originalFileName,
  56. +
  57.       null, Zend_Gdata_Docs::DOCUMENTS_LIST_FEED_URI);
  58. +
  59.  
  60. +
  61.   echo "New Document Title: ";
  62. +
  63.  
  64. +
  65.   if ($html) {
  66. +
  67.       // Find the URL of the HTML view of this document.
  68. +
  69.       $alternateLink = '';
  70. +
  71.       foreach ($newDocumentEntry->link as $link) {
  72. +
  73.           if ($link->getRel() === 'alternate') {
  74. +
  75.               $alternateLink = $link->getHref();
  76. +
  77.           }
  78. +
  79.       }
  80. +
  81.       // Make the title link to the document on docs.google.com.
  82. +
  83.       echo "<a href=\"$alternateLink\">\n";
  84. +
  85.   }
  86. +
  87.   echo $newDocumentEntry->title."\n";
  88. +
  89.   if ($html) {echo "</a>\n";}
  90. +
  91. }
+ +
+ +

Searching the documents feed

+ + +

+ You can search the Document List using some of the » standard + Google Data API query parameters. Categories are used to + restrict the + type of document (word processor document, spreadsheet) returned. + The full-text query string is used to search the content of all + the documents. More detailed information on parameters specific + to the Documents List can be found in the » Documents List + Data API Reference Guide. +

+ +

Get a List of Word Processing Documents

+ + +

+ You can also request a feed containing all of your documents of a specific type. For + example, to see a list of your work processing documents, you would perform a + category query as follows. +

+ +
  1. $feed = $docs->getDocumentListFeed(
  2. +
  3.     'http://docs.google.com/feeds/documents/private/full/-/document');
+ +
+ +

Get a List of Spreadsheets

+ + +

+ To request a list of your Google Spreadsheets, use the following category query: +

+ +
  1. $feed = $docs->getDocumentListFeed(
  2. +
  3.     'http://docs.google.com/feeds/documents/private/full/-/spreadsheet');
+ +
+ +

Performing a text query

+ + +

+ You can search the content of documents by using a + Zend_Gdata_Docs_Query in your request. A Query object + can be used to construct the query URI, with the search term + being passed in as a parameter. Here is an example method which queries + the documents list for documents which contain the search string: +

+ +
  1. $docsQuery = new Zend_Gdata_Docs_Query();
  2. +
  3. $docsQuery->setQuery($query);
  4. +
  5. $feed = $client->getDocumentListFeed($docsQuery);
+ +
+
+
+
+ + + + + + + + + +
+ Using Google Calendar + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.gdata.exception.html b/zend/documentation/manual/core/en/zend.gdata.exception.html new file mode 100644 index 0000000..7d5fdfd --- /dev/null +++ b/zend/documentation/manual/core/en/zend.gdata.exception.html @@ -0,0 +1,206 @@ + + + + + Catching Gdata Exceptions - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Using the YouTube Data API + + + + +
+
+

Catching Gdata Exceptions

+ + +

+ The Zend_Gdata_App_Exception class is a base class + for exceptions thrown by Zend_Gdata. You can catch any exception + thrown by Zend_Gdata by catching + Zend_Gdata_App_Exception. +

+ +
  1. try {
  2. +
  3.     $client =
  4. +
  5.         Zend_Gdata_ClientLogin::getHttpClient($username, $password);
  6. +
  7. } catch(Zend_Gdata_App_Exception $ex) {
  8. +
  9.     // Report the exception to the user
  10. +
  11.     die($ex->getMessage());
  12. +
  13. }
+ + +

+ The following exception subclasses are used by Zend_Gdata: + +

    +
  • +

    + Zend_Gdata_App_AuthException + indicates that the user's account credentials were not valid. +

    +
  • + +
  • +

    + Zend_Gdata_App_BadMethodCallException + indicates that a method was called for a service + that does not support the method. For example, + the CodeSearch service does not support post(). +

    +
  • + +
  • +

    + Zend_Gdata_App_HttpException + indicates that an HTTP request was not successful. + Provides the ability to get the full Zend_Http_Response + object to determine the exact cause of the failure in + cases where $e->getMessage() does not provide + enough details. +

    +
  • + +
  • +

    + Zend_Gdata_App_InvalidArgumentException + is thrown when the application provides a value that + is not valid in a given context. For example, + specifying a Calendar visibility value of "banana", + or fetching a Blogger feed without specifying + any blog name. +

    +
  • + +
  • +

    + Zend_Gdata_App_CaptchaRequiredException + is thrown when a ClientLogin attempt receives a + CAPTCHA challenge from the + authentication service. This exception contains a token + ID and a URL to a CAPTCHA + challenge image. The image is a visual puzzle that + should be displayed to the user. After + collecting the user's response to the challenge + image, the response can be included with the next + ClientLogin attempt.The user can alternatively be + directed to this website: + https://www.google.com/accounts/DisplayUnlockCaptcha + Further information can be found in the + ClientLogin documentation. +

    +
  • +
+

+ +

+ You can use these exception subclasses to handle specific exceptions + differently. See the API documentation for information on which + exception subclasses are thrown by which methods in Zend_Gdata. +

+ +
  1. try {
  2. +
  3.     $client = Zend_Gdata_ClientLogin::getHttpClient($username,
  4. +
  5.                                                     $password,
  6. +
  7.                                                     $service);
  8. +
  9. } catch(Zend_Gdata_App_AuthException $authEx) {
  10. +
  11.     // The user's credentials were incorrect.
  12. +
  13.     // It would be appropriate to give the user a second try.
  14. +
  15.     ...
  16. +
  17. } catch(Zend_Gdata_App_HttpException $httpEx) {
  18. +
  19.     // Google Data servers cannot be contacted.
  20. +
  21.     die($httpEx->getMessage);}
+ +
+
+ + + + + + + + + +
+ Using the YouTube Data API + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.gdata.gapps.html b/zend/documentation/manual/core/en/zend.gdata.gapps.html new file mode 100644 index 0000000..4e8598b --- /dev/null +++ b/zend/documentation/manual/core/en/zend.gdata.gapps.html @@ -0,0 +1,1287 @@ + + + + + Using Google Apps Provisioning - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Using Google Spreadsheets + + + + +
+
+

Using Google Apps Provisioning

+ + +

+ Google Apps is a service which allows domain administrators to offer + their users managed access to Google services such as Mail, Calendar, + and Docs & Spreadsheets. The Provisioning API offers a programmatic + interface to configure this service. Specifically, this API allows + administrators the ability to create, retrieve, update, and delete + user accounts, nicknames, groups, and email lists. +

+ +

+ This library implements version 2.0 of the Provisioning API. Access to + your account via the Provisioning API must be manually enabled for + each domain using the Google Apps control panel. Only certain + account types are able to enable this feature. +

+ +

+ For more information on the Google Apps Provisioning API, including + instructions for enabling API access, refer to the » Provisioning + API V2.0 Reference. +

+ +

Note: Authentication
+ + + + The Provisioning API does not support authentication via AuthSub + and anonymous access is not permitted. All HTTP connections must + be authenticated using ClientAuth authentication. +
+

+ +

Setting the current domain

+ + +

+ In order to use the Provisioning API, the domain being + administered needs to be specified in all request URIs. In order + to ease development, this information is stored within both the + Gapps service and query classes to use when constructing + requests. +

+ +

Setting the domain for the service class

+ + +

+ To set the domain for requests made by the service class, + either call setDomain() or specify the domain + when instantiating the service class. For example: +

+ +
  1. $domain = "example.com";
  2. +
  3. $gdata = new Zend_Gdata_Gapps($client, $domain);
+ +
+ +

Setting the domain for query classes

+ + +

+ Setting the domain for requests made by query classes is + similar to setting it for the service class-either call + setDomain() or specify the domain when creating + the query. For example: +

+ +
  1. $domain = "example.com";
  2. +
  3. $query = new Zend_Gdata_Gapps_UserQuery($domain, $arg);
+ + +

+ When using a service class factory method to create a query, + the service class will automatically set the query's domain to + match its own domain. As a result, it is not necessary to + specify the domain as part of the constructor arguments. +

+ +
  1. $domain = "example.com";
  2. +
  3. $gdata = new Zend_Gdata_Gapps($client, $domain);
  4. +
  5. $query = $gdata->newUserQuery($arg);
+ +
+
+ +

Interacting with users

+ + +

+ Each user account on a Google Apps hosted domain is represented as + an instance of Zend_Gdata_Gapps_UserEntry. This class provides + access to all account properties including name, username, + password, access rights, and current quota. +

+ +

Creating a user account

+ + +

+ User accounts can be created by calling the + createUser() convenience method: +

+ +
  1. $gdata->createUser('foo', 'Random', 'User', '••••••••');
+ + +

+ Users can also be created by instantiating UserEntry, + providing a username, given name, family name, and password, + then calling insertUser() on a service object to + upload the entry to the server. +

+ +
  1. $user = $gdata->newUserEntry();
  2. +
  3. $user->login = $gdata->newLogin();
  4. +
  5. $user->login->username = 'foo';
  6. +
  7. $user->login->password = '••••••••';
  8. +
  9. $user->name = $gdata->newName();
  10. +
  11. $user->name->givenName = 'Random';
  12. +
  13. $user->name->familyName = 'User';
  14. +
  15. $user = $gdata->insertUser($user);
+ + +

+ The user's password should normally be provided as cleartext. + Optionally, the password can be provided as an SHA-1 digest if + login->passwordHashFunction is set to + 'SHA-1'. +

+
+ +

Retrieving a user account

+ + +

+ Individual user accounts can be retrieved by calling the + retrieveUser() convenience method. If the user is + not found, NULL will be returned. +

+ +
  1. $user = $gdata->retrieveUser('foo');
  2. +
  3.  
  4. +
  5. echo 'Username: ' . $user->login->userName . "\n";
  6. +
  7. echo 'Given Name: ' . $user->name->givenName . "\n";
  8. +
  9. echo 'Family Name: ' . $user->name->familyName . "\n";
  10. +
  11. echo 'Suspended: ' . ($user->login->suspended ? 'Yes' : 'No') . "\n";
  12. +
  13. echo 'Admin: ' . ($user->login->admin ? 'Yes' : 'No') . "\n"
  14. +
  15. echo 'Must Change Password: ' .
  16. +
  17.      ($user->login->changePasswordAtNextLogin ? 'Yes' : 'No') . "\n";
  18. +
  19. echo 'Has Agreed To Terms: ' .
  20. +
  21.      ($user->login->agreedToTerms ? 'Yes' : 'No') . "\n";
+ + +

+ Users can also be retrieved by creating an + instance of Zend_Gdata_Gapps_UserQuery, setting its username + property to equal the username of the user that is to be + retrieved, and calling getUserEntry() on a + service object with that query. +

+ +
  1. $query = $gdata->newUserQuery('foo');
  2. +
  3. $user = $gdata->getUserEntry($query);
  4. +
  5.  
  6. +
  7. echo 'Username: ' . $user->login->userName . "\n";
  8. +
  9. echo 'Given Name: ' . $user->login->givenName . "\n";
  10. +
  11. echo 'Family Name: ' . $user->login->familyName . "\n";
  12. +
  13. echo 'Suspended: ' . ($user->login->suspended ? 'Yes' : 'No') . "\n";
  14. +
  15. echo 'Admin: ' . ($user->login->admin ? 'Yes' : 'No') . "\n"
  16. +
  17. echo 'Must Change Password: ' .
  18. +
  19.      ($user->login->changePasswordAtNextLogin ? 'Yes' : 'No') . "\n";
  20. +
  21. echo 'Has Agreed To Terms: ' .
  22. +
  23.      ($user->login->agreedToTerms ? 'Yes' : 'No') . "\n";
+ + +

+ If the specified user cannot be located a ServiceException + will be thrown with an error code of + Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST. + ServiceExceptions will be covered in the exceptions chapter. +

+
+ +

Retrieving all users in a domain

+ + +

+ To retrieve all users in a domain, call the + retrieveAllUsers() convenience method. +

+ +
  1. $feed = $gdata->retrieveAllUsers();
  2. +
  3.  
  4. +
  5. foreach ($feed as $user) {
  6. +
  7.     echo "  * " . $user->login->username . ' (' . $user->name->givenName .
  8. +
  9.         ' ' . $user->name->familyName . ")\n";
  10. +
  11. }
+ + +

+ This will create a Zend_Gdata_Gapps_UserFeed object which + holds each user on the domain. +

+ +

+ Alternatively, call getUserFeed() with no + options. Keep in mind that on larger + domains this feed may be paged by the server. For more + information on paging, see the paging chapter. +

+ +
  1. $feed = $gdata->getUserFeed();
  2. +
  3.  
  4. +
  5. foreach ($feed as $user) {
  6. +
  7.     echo "  * " . $user->login->username . ' (' . $user->name->givenName .
  8. +
  9.         ' ' . $user->name->familyName . ")\n";
  10. +
  11. }
+ +
+ +

Updating a user account

+ + +

+ The easiest way to update a user account is to retrieve the + user as described in the previous sections, make any desired + changes, then call save() on that user. Any + changes made will be propagated to the server. +

+ +
  1. $user = $gdata->retrieveUser('foo');
  2. +
  3. $user->name->givenName = 'Foo';
  4. +
  5. $user->name->familyName = 'Bar';
  6. +
  7. $user = $user->save();
+ + +

Resetting a user's password

+ + +

+ A user's password can be reset to a new value by updating + the login->password property. +

+ +
  1. $user = $gdata->retrieveUser('foo');
  2. +
  3. $user->login->password = '••••••••';
  4. +
  5. $user = $user->save();
+ + +

+ Note that it is not possible to recover a password in this + manner as stored passwords are not made available via the + Provisioning API for security reasons. +

+
+ +

Forcing a user to change their password

+ + +

+ A user can be forced to change their password at their + next login by setting the + login->changePasswordAtNextLogin property to + TRUE. +

+ +
  1. $user = $gdata->retrieveUser('foo');
  2. +
  3. $user->login->changePasswordAtNextLogin = true;
  4. +
  5. $user = $user->save();
+ + +

+ Similarly, this can be undone by setting the + login->changePasswordAtNextLogin property to + FALSE. +

+
+ +

Suspending a user account

+ + +

+ Users can be restricted from logging in without deleting + their user account by instead + suspending their user account. + Accounts can be suspended or restored by using the + suspendUser() and + restoreUser() convenience methods: +

+ +
  1. $gdata->suspendUser('foo');
  2. +
  3. $gdata->restoreUser('foo');
+ + +

+ Alternatively, you can set the UserEntry's + login->suspended property to + TRUE. +

+ +
  1. $user = $gdata->retrieveUser('foo');
  2. +
  3. $user->login->suspended = true;
  4. +
  5. $user = $user->save();
+ + +

+ To restore the user's access, set the + login->suspended property to + FALSE. +

+
+ +

Granting administrative rights

+ + +

+ Users can be granted the ability to administer your domain + by setting their login->admin property to + TRUE. +

+ +
  1. $user = $gdata->retrieveUser('foo');
  2. +
  3. $user->login->admin = true;
  4. +
  5. $user = $user->save();
+ + +

+ And as expected, setting a user's login->admin + property to FALSE revokes their + administrative rights. +

+
+
+ +

Deleting user accounts

+ + +

+ Deleting a user account to which you already hold a UserEntry + is a simple as calling delete() on that + entry. +

+ +
  1. $user = $gdata->retrieveUser('foo');
  2. +
  3. $user->delete();
+ + +

+ If you do not have access to a UserEntry object for an + account, use the deleteUser() convenience method. +

+ +
  1. $gdata->deleteUser('foo');
+ +
+
+ +

Interacting with nicknames

+ + +

+ Nicknames serve as email aliases for existing users. Each nickname + contains precisely two key properties: its name and its owner. Any + email addressed to a nickname is forwarded to the user who owns + that nickname. +

+ +

+ Nicknames are represented as an instances of + Zend_Gdata_Gapps_NicknameEntry. +

+ +

Creating a nickname

+ + +

+ Nicknames can be created by calling the + createNickname() convenience method: +

+ +
  1. $gdata->createNickname('foo', 'bar');
+ + +

+ Nicknames can also be created by instantiating NicknameEntry, + providing the nickname with a name and an owner, then calling + insertNickname() on a service object to upload + the entry to the server. +

+ +
  1. $nickname = $gdata->newNicknameEntry();
  2. +
  3. $nickname->login = $gdata->newLogin('foo');
  4. +
  5. $nickname->nickname = $gdata->newNickname('bar');
  6. +
  7. $nickname = $gdata->insertNickname($nickname);
+ +
+ +

Retrieving a nickname

+ + +

+ Nicknames can be retrieved by calling the + retrieveNickname() convenience method. This will + return NULL if a user is not found. +

+ +
  1. $nickname = $gdata->retrieveNickname('bar');
  2. +
  3.  
  4. +
  5. echo 'Nickname: ' . $nickname->nickname->name . "\n";
  6. +
  7. echo 'Owner: ' . $nickname->login->username . "\n";
+ + +

+ Individual nicknames can also be retrieved by creating an + instance of Zend_Gdata_Gapps_NicknameQuery, setting its + nickname property to equal the nickname that is to be + retrieved, and calling getNicknameEntry() on a + service object with that query. +

+ +
  1. $query = $gdata->newNicknameQuery('bar');
  2. +
  3. $nickname = $gdata->getNicknameEntry($query);
  4. +
  5.  
  6. +
  7. echo 'Nickname: ' . $nickname->nickname->name . "\n";
  8. +
  9. echo 'Owner: ' . $nickname->login->username . "\n";
+ + +

+ As with users, if no corresponding nickname is found a + ServiceException will be thrown with an error code of + Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST. Again, these + will be discussed in the exceptions chapter. +

+
+ +

Retrieving all nicknames for a user

+ + +

+ To retrieve all nicknames associated with a given user, call + the convenience method retrieveNicknames(). +

+ +
  1. $feed = $gdata->retrieveNicknames('foo');
  2. +
  3.  
  4. +
  5. foreach ($feed as $nickname) {
  6. +
  7.     echo '  * ' . $nickname->nickname->name . "\n";
  8. +
  9. }
+ + +

+ This will create a Zend_Gdata_Gapps_NicknameFeed object which + holds each nickname associated with the specified user. +

+ +

+ Alternatively, create a new Zend_Gdata_Gapps_NicknameQuery, + set its username property to the desired user, and submit the + query by calling getNicknameFeed() on a service + object. +

+ +
  1. $query = $gdata->newNicknameQuery();
  2. +
  3. $query->setUsername('foo');
  4. +
  5. $feed = $gdata->getNicknameFeed($query);
  6. +
  7.  
  8. +
  9. foreach ($feed as $nickname) {
  10. +
  11.     echo '  * ' . $nickname->nickname->name . "\n";
  12. +
  13. }
+ +
+ +

Retrieving all nicknames in a domain

+ + +

+ To retrieve all nicknames in a feed, simply call the + convenience method retrieveAllNicknames() +

+ +
  1. $feed = $gdata->retrieveAllNicknames();
  2. +
  3.  
  4. +
  5. foreach ($feed as $nickname) {
  6. +
  7.     echo '  * ' . $nickname->nickname->name . ' => ' .
  8. +
  9.         $nickname->login->username . "\n";
  10. +
  11. }
+ + +

+ This will create a Zend_Gdata_Gapps_NicknameFeed object which + holds each nickname on the domain. +

+ +

+ Alternatively, call getNicknameFeed() on a + service object with no arguments. +

+ +
  1. $feed = $gdata->getNicknameFeed();
  2. +
  3.  
  4. +
  5. foreach ($feed as $nickname) {
  6. +
  7.     echo '  * ' . $nickname->nickname->name . ' => ' .
  8. +
  9.         $nickname->login->username . "\n";
  10. +
  11. }
+ +
+ +

Deleting a nickname

+ + +

+ Deleting a nickname to which you already hold a NicknameEntry + for is a simple as calling delete() on that + entry. +

+ +
  1. $nickname = $gdata->retrieveNickname('bar');
  2. +
  3. $nickname->delete();
+ + +

+ For nicknames which you do not hold a NicknameEntry for, use + the deleteNickname() convenience method. +

+ +
  1. $gdata->deleteNickname('bar');
+ +
+
+ +

Interacting with groups

+ + +

+ Google Groups allows people to post messages like an email list. Google + is depreciating the Email List API. Google Groups provides some neat + features like nested groups and group owners. If you want to start + a new email lst, it is advisable to use Google Groups instead. + Google's Email List is not compatible with Google Groups. So if you + create an email list, it will not show up as a group. The opposite is + true as well. +

+ +

+ Each group on a domain is represented as an instance of + Zend_Gdata_Gapps_GroupEntry. +

+ +

Creating a group

+ + +

+ Groups can be created by calling the + createGroup() convenience method: +

+ +
  1. $gdata->createGroup('friends', 'The Friends Group');
+ + +

+ Groups can also be created by instantiating + GroupEntry, providing a group id and name for the group, + then calling insertGroup() on a service + object to upload the entry to the server. +

+ +
  1. $group = $gdata->newGroupEntry();
  2. +
  3.  
  4. +
  5. $properties[0] = $this->newProperty();
  6. +
  7. $properties[0]->name = 'groupId';
  8. +
  9. $properties[0]->value = 'friends';
  10. +
  11. $properties[1] = $this->newProperty();
  12. +
  13. $properties[1]->name = 'groupName';
  14. +
  15. $properties[1]->value = 'The Friends Group';
  16. +
  17.  
  18. +
  19. $group->property = $properties;
  20. +
  21.  
  22. +
  23. $group = $gdata->insertGroup($group);
+ +
+ +

Retrieving an individual group

+ + +

+ To retrieve an individual group, call the + retrieveGroup() convenience method: +

+ +
  1. $entry = $gdata->retrieveGroup('friends');
  2. +
  3.  
  4. +
  5. foreach ($entry->property as $p) {
  6. +
  7.     echo "Property Name: " . $p->name;
  8. +
  9.     echo "\nProperty Value: " . $p->value . "\n\n";
  10. +
  11. }
+ + +

+ This will create a Zend_Gdata_Gapps_GroupEntry + object which holds the properties about the group. +

+ +

+ Alternatively, create a new Zend_Gdata_Gapps_GroupQuery, + set its groupId property to the desired group id, and + submit the query by calling getGroupEntry() + on a service object. +

+ +
  1. $query = $gdata->newGroupQuery();
  2. +
  3. $query->setGroupId('friends');
  4. +
  5. $entry = $gdata->getGroupEntry($query);
  6. +
  7.  
  8. +
  9. foreach ($entry->property as $p) {
  10. +
  11.     echo "Property Name: " . $p->name;
  12. +
  13.     echo "\nProperty Value: " . $p->value . "\n\n";
  14. +
  15. }
+ +
+ +

Retrieving all groups in a domain

+ + +

+ To retrieve all groups in a domain, call the convenience + method retrieveAllGroups(). +

+ +
  1. $feed = $gdata->retrieveAllGroups();
  2. +
  3.  
  4. +
  5. foreach ($feed->entry as $entry) {
  6. +
  7.     foreach ($entry->property as $p) {
  8. +
  9.         echo "Property Name: " . $p->name;
  10. +
  11.         echo "\nProperty Value: " . $p->value . "\n\n";
  12. +
  13.     }
  14. +
  15.     echo "\n\n";
  16. +
  17. }
+ + +

+ This will create a Zend_Gdata_Gapps_GroupFeed + object which holds each group on the domain. +

+ +

+ Alternatively, call getGroupFeed() on a + service object with no arguments. +

+ +
  1. $feed = $gdata->getGroupFeed();
  2. +
  3.  
  4. +
  5. foreach ($feed->entry as $entry) {
  6. +
  7.     foreach ($entry->property as $p) {
  8. +
  9.         echo "Property Name: " . $p->name;
  10. +
  11.         echo "\nProperty Value: " . $p->value . "\n\n";
  12. +
  13.     }
  14. +
  15.     echo "\n\n";
  16. +
  17. }
+ +
+ +

Deleting a group

+ + +

+ To delete a group, call the deleteGroup() convenience + method: +

+ +
  1. $gdata->deleteGroup('friends');
+ +
+ +

Updating a group

+ + +

+ Groups can be updated by calling the + updateGroup() convenience method: +

+ +
  1. $gdata->updateGroup('group-id-here', 'Group Name Here');
+ + +

+ The first parameter is required. The second, third and fourth parameter, + representing the group name, group descscription, and email permission, + respectively are optional. Setting any of these optional parameters + to null will not update that item. +

+
+ +

Retrieving all groups to which a person is a member

+ + +

+ To retrieve all groups to which a particular person is a + member, call the retrieveGroups() + convenience method: +

+ +
  1. $feed = $gdata->retrieveGroups('baz@somewhere.com');
  2. +
  3.  
  4. +
  5. foreach ($feed->entry as $entry) {
  6. +
  7.     foreach ($entry->property as $p) {
  8. +
  9.         echo "Property Name: " . $p->name;
  10. +
  11.         echo "\nProperty Value: " . $p->value . "\n\n";
  12. +
  13.     }
  14. +
  15.     echo "\n\n";
  16. +
  17. }
+ + +

+ This will create a Zend_Gdata_Gapps_GroupFeed + object which holds each group associated with the specified member. +

+ +

+ Alternatively, create a new Zend_Gdata_Gapps_GroupQuery, + set its member property to the desired email address, and + submit the query by calling getGroupFeed() + on a service object. +

+ +
  1. $query = $gdata->newGroupQuery();
  2. +
  3. $query->setMember('baz@somewhere.com');
  4. +
  5. $feed = $gdata->getGroupFeed($query);
  6. +
  7.  
  8. +
  9. foreach ($feed->entry as $entry) {
  10. +
  11.     foreach ($entry->property as $p) {
  12. +
  13.         echo "Property Name: " . $p->name;
  14. +
  15.         echo "\nProperty Value: " . $p->value . "\n\n";
  16. +
  17.     }
  18. +
  19.     echo "\n\n";
  20. +
  21. }
+ +
+
+ +

Interacting with group members

+ + +

+ Each member subscribed to a group is represented by an + instance of Zend_Gdata_Gapps_MemberEntry. + Through this class, individual recipients can be added and removed + from groups. +

+ +

Adding a member to a group

+ + +

+ To add a member to a group, simply call the + addMemberToGroup() convenience method: +

+ +
  1. $gdata->addMemberToGroup('bar@somewhere.com', 'friends');
+ +
+ +

Check to see if member belongs to group

+ + +

+ To check to see if member belongs to group, simply call the + isMember() convenience method: +

+ +
  1. $isMember = $gdata->isMember('bar@somewhere.com', 'friends');
  2. +
  3. var_dump($isMember);
+ + +

+ The method returns a boolean value. If the member belongs to the + group specified, the method returns true, else it returns false. +

+
+ +

Removing a member from a group

+ + +

+ To remove a member from a group, call the + removeMemberFromGroup() convenience + method: +

+ +
  1. $gdata->removeMemberFromGroup('baz', 'friends');
+ +
+ +

Retrieving the list of members to a group

+ + +

+ The convenience method retrieveAllMembers() + can be used to retrieve the list of members of a group: +

+ +
  1. $feed = $gdata->retrieveAllMembers('friends');
  2. +
  3.  
  4. +
  5. foreach ($feed as $member) {
  6. +
  7.     foreach ($member->property as $p) {
  8. +
  9.         echo "Property Name: " . $p->name;
  10. +
  11.         echo "\nProperty Value: " . $p->value . "\n\n";
  12. +
  13.     }
  14. +
  15. }
+ + +

+ Alternatively, construct a new MemberQuery, set its groupId + property to match the desired group id, and call + getMemberFeed() on a service object. +

+ +
  1. $query = $gdata->newMemberQuery();
  2. +
  3. $query->setGroupId('friends');
  4. +
  5. $feed = $gdata->getMemberFeed($query);
  6. +
  7.  
  8. +
  9. foreach ($feed as $member) {
  10. +
  11.     foreach ($member->property as $p) {
  12. +
  13.         echo "Property Name: " . $p->name;
  14. +
  15.         echo "\nProperty Value: " . $p->value . "\n\n";
  16. +
  17.     }
  18. +
  19. }
+ + +

+ This will create a Zend_Gdata_Gapps_MemberFeed + object which holds each member for the selected group. +

+
+
+ +

Interacting with group owners

+ + +

+ Each owner associated with a group is represented by an + instance of Zend_Gdata_Gapps_OwnerEntry. + Through this class, individual owners can be added and removed + from groups. +

+ +

Adding an owner to a group

+ + +

+ To add an owner to a group, simply call the + addOwnerToGroup() convenience method: +

+ +
  1. $gdata->addOwnerToGroup('bar@somewhere.com', 'friends');
+ +
+ +

Retrieving the list of the owner of a group

+ + +

+ The convenience method retrieveGroupOwners() + can be used to retrieve the list of the owners of a group: +

+ +
  1. $feed = $gdata->retrieveGroupOwners('friends');
  2. +
  3.  
  4. +
  5. foreach ($feed as $owner) {
  6. +
  7.     foreach ($owner->property as $p) {
  8. +
  9.         echo "Property Name: " . $p->name;
  10. +
  11.         echo "\nProperty Value: " . $p->value . "\n\n";
  12. +
  13.     }
  14. +
  15. }
+ + +

+ Alternatively, construct a new OwnerQuery, set its groupId + property to match the desired group id, and call + getOwnerFeed() on a service object. +

+ +
  1. $query = $gdata->newOwnerQuery();
  2. +
  3. $query->setGroupId('friends');
  4. +
  5. $feed = $gdata->getOwnerFeed($query);
  6. +
  7.  
  8. +
  9. foreach ($feed as $owner) {
  10. +
  11.     foreach ($owner->property as $p) {
  12. +
  13.         echo "Property Name: " . $p->name;
  14. +
  15.         echo "\nProperty Value: " . $p->value . "\n\n";
  16. +
  17.     }
  18. +
  19. }
+ + +

+ This will create a Zend_Gdata_Gapps_OwnerFeed + object which holds each member for the selected group. +

+
+ +

Check to see if an email is the owner of a group

+ + +

+ To check to see if an email is the owner of a group, simply call + the isOwner() convenience method: +

+ +
  1. $isOwner = $gdata->isOwner('bar@somewhere.com', 'friends');
  2. +
  3. var_dump($isOwner);
+ + +

+ The method returns a boolean value. If the email is the owner of + the group specified, the method returns true, else it returns false. +

+
+ +

Removing an owner from a group

+ + +

+ To remove an owner from a group, call the + removeOwnerFromGroup() convenience + method: +

+ +
  1. $gdata->removeOwnerFromGroup('baz@somewhere.com', 'friends');
+ +
+
+ +

Interacting with email lists

+ + +

+ Email lists allow several users to retrieve email addressed to a + single email address. Users do not need to be a + member of this domain in order to subscribe to an email list + provided their complete email address (including domain) is used. +

+ +

+ Each email list on a domain is represented as an instance of + Zend_Gdata_Gapps_EmailListEntry. +

+ +

Creating an email list

+ + +

+ Email lists can be created by calling the + createEmailList() convenience method: +

+ +
  1. $gdata->createEmailList('friends');
+ + +

+ Email lists can also be created by instantiating + EmailListEntry, providing a name for the list, then calling + insertEmailList() on a service object to upload + the entry to the server. +

+ +
  1. $list = $gdata->newEmailListEntry();
  2. +
  3. $list->emailList = $gdata->newEmailList('friends');
  4. +
  5. $list = $gdata->insertEmailList($list);
+ +
+ +

Retrieving all email lists to which a recipient is subscribed

+ + +

+ To retrieve all email lists to which a particular recipient is + subscribed, call the retrieveEmailLists() + convenience method: +

+ +
  1. $feed = $gdata->retrieveEmailLists('baz@somewhere.com');
  2. +
  3.  
  4. +
  5. foreach ($feed as $list) {
  6. +
  7.     echo '  * ' . $list->emailList->name . "\n";
  8. +
  9. }
+ + +

+ This will create a Zend_Gdata_Gapps_EmailListFeed object + which holds each email list associated with the specified recipient. +

+ +

+ Alternatively, create a new Zend_Gdata_Gapps_EmailListQuery, + set its recipient property to the desired email address, and + submit the query by calling getEmailListFeed() on + a service object. +

+ +
  1. $query = $gdata->newEmailListQuery();
  2. +
  3. $query->setRecipient('baz@somewhere.com');
  4. +
  5. $feed = $gdata->getEmailListFeed($query);
  6. +
  7.  
  8. +
  9. foreach ($feed as $list) {
  10. +
  11.     echo '  * ' . $list->emailList->name . "\n";
  12. +
  13. }
+ +
+ +

Retrieving all email lists in a domain

+ + +

+ To retrieve all email lists in a domain, call the convenience + method retrieveAllEmailLists(). +

+ +
  1. $feed = $gdata->retrieveAllEmailLists();
  2. +
  3.  
  4. +
  5. foreach ($feed as $list) {
  6. +
  7.     echo '  * ' . $list->emailList->name . "\n";
  8. +
  9. }
+ + +

+ This will create a Zend_Gdata_Gapps_EmailListFeed object + which holds each email list on the domain. +

+ +

+ Alternatively, call getEmailListFeed() on a + service object with no arguments. +

+ +
  1. $feed = $gdata->getEmailListFeed();
  2. +
  3.  
  4. +
  5. foreach ($feed as $list) {
  6. +
  7.     echo '  * ' . $list->emailList->name . "\n";
  8. +
  9. }
+ +
+ +

Deleting an email list

+ + +

+ To delete an email list, call the deleteEmailList() + convenience method: +

+ +
  1. $gdata->deleteEmailList('friends');
+ +
+
+ +

Interacting with email list recipients

+ + +

+ Each recipient subscribed to an email list is represented by an + instance of Zend_Gdata_Gapps_EmailListRecipient. Through this + class, individual recipients can be added and removed from email + lists. +

+ +

Adding a recipient to an email list

+ + +

+ To add a recipient to an email list, simply call the + addRecipientToEmailList() convenience method: +

+ +
  1. $gdata->addRecipientToEmailList('bar@somewhere.com', 'friends');
+ +
+ +

Retrieving the list of subscribers to an email list

+ + +

+ The convenience method retrieveAllRecipients() + can be used to retrieve the list of subscribers to an email list: +

+ +
  1. $feed = $gdata->retrieveAllRecipients('friends');
  2. +
  3.  
  4. +
  5. foreach ($feed as $recipient) {
  6. +
  7.     echo '  * ' . $recipient->who->email . "\n";
  8. +
  9. }
+ + +

+ Alternatively, construct a new EmailListRecipientQuery, set + its emailListName property to match the desired email list, + and call getEmailListRecipientFeed() on a service + object. +

+ +
  1. $query = $gdata->newEmailListRecipientQuery();
  2. +
  3. $query->setEmailListName('friends');
  4. +
  5. $feed = $gdata->getEmailListRecipientFeed($query);
  6. +
  7.  
  8. +
  9. foreach ($feed as $recipient) {
  10. +
  11.     echo '  * ' . $recipient->who->email . "\n";
  12. +
  13. }
+ + +

+ This will create a Zend_Gdata_Gapps_EmailListRecipientFeed + object which holds each recipient for the selected email list. +

+
+ +

Removing a recipient from an email list

+ + +

+ To remove a recipient from an email list, call the + removeRecipientFromEmailList() convenience + method: +

+ +
  1. $gdata->removeRecipientFromEmailList('baz@somewhere.com', 'friends');
+ +
+
+ +

Handling errors

+ + +

+ In addition to the standard suite of exceptions thrown by + Zend_Gdata, requests using the Provisioning + API may also throw a + Zend_Gdata_Gapps_ServiceException. These exceptions + indicate that a API specific error occurred which prevents the + request from completing. +

+ +

+ Each ServiceException instance may hold one or more Error objects. + Each of these objects contains an error code, reason, and + (optionally) the input which triggered the exception. A complete + list of known error codes is provided in Zend Framework's API + documentation under Zend_Gdata_Gapps_Error. Additionally, the + authoritative error list is available online at » Google + Apps Provisioning API V2.0 Reference: Appendix D. +

+ +

+ While the complete list of errors received is available within + ServiceException as an array by calling getErrors(), + often it is convenient to know if one specific error occurred. For + these cases the presence of an error can be determined by calling + hasError(). +

+ +

+ The following example demonstrates how to detect if a requested + resource doesn't exist and handle the fault gracefully: +

+ +
  1. function retrieveUser ($username) {
  2. +
  3.     $query = $gdata->newUserQuery($username);
  4. +
  5.     try {
  6. +
  7.         $user = $gdata->getUserEntry($query);
  8. +
  9.     } catch (Zend_Gdata_Gapps_ServiceException $e) {
  10. +
  11.         // Set the user to null if not found
  12. +
  13.         if ($e->hasError(Zend_Gdata_Gapps_Error::ENTITY_DOES_NOT_EXIST)) {
  14. +
  15.             $user = null;
  16. +
  17.         } else {
  18. +
  19.             throw $e;
  20. +
  21.         }
  22. +
  23.     }
  24. +
  25.     return $user;
  26. +
  27. }
+ +
+
+
+ + + + + + + + + +
+ Using Google Spreadsheets + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.gdata.html b/zend/documentation/manual/core/en/zend.gdata.html new file mode 100644 index 0000000..91d0e18 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.gdata.html @@ -0,0 +1,195 @@ + + + + + Zend_Gdata - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Form + + + + +
+
+ +
+ + + + + + + + + +
+ Zend_Form + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.gdata.photos.html b/zend/documentation/manual/core/en/zend.gdata.photos.html new file mode 100644 index 0000000..036cd9b --- /dev/null +++ b/zend/documentation/manual/core/en/zend.gdata.photos.html @@ -0,0 +1,959 @@ + + + + + Using Picasa Web Albums - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Using Google Apps Provisioning + + + + +
+
+

Using Picasa Web Albums

+ + +

+ Picasa Web Albums is a service which allows users to maintain albums of + their own pictures, and browse the albums and pictures of others. + The API offers a programmatic interface to this service, allowing + users to add to, update, and remove from their albums, as well as + providing the ability to tag and comment on photos. +

+ +

+ Access to public albums and photos is not restricted by account, + however, a user must be logged in for non-read-only access. +

+ +

+ For more information on the API, including + instructions for enabling API access, refer to the » Picasa + Web Albums Data API Overview. +

+ +

Note: Authentication
+ + + + The API provides authentication via AuthSub (recommended) + and ClientAuth. HTTP connections must be authenticated for write + support, but non-authenticated connections have read-only access. +
+

+ +

Connecting To The Service

+ + +

+ The Picasa Web Albums API, like all GData APIs, is + based off of the Atom Publishing Protocol (APP), an XML based format + for managing web-based resources. Traffic between a client and the servers occurs over + HTTP and allows for both authenticated and unauthenticated + connections. +

+ +

+ Before any transactions can occur, this connection needs to be made. Creating a + connection to the Picasa servers involves two steps: creating an HTTP + client and binding a Zend_Gdata_Photos + service instance to that client. +

+ +

Authentication

+ + +

+ The Google Picasa API allows access to both public and private + photo feeds. Public feeds do not require authentication, but are read-only and offer + reduced functionality. Private feeds offers the most complete functionality but + requires an authenticated connection to the Picasa servers. There are three + authentication schemes that are supported by Google Picasa : +

+ +
    +
  • +

    + ClientAuth + provides direct username/password authentication to the + Picasa servers. Since this scheme requires that users + provide your application with their password, this + authentication is only recommended when other + authentication schemes are insufficient. +

    +
  • + +
  • +

    + AuthSub + allows authentication to the Picasa servers via a + Google proxy server. This provides the same level of + convenience as ClientAuth but without the security + risk, making this an ideal choice for web-based + applications. +

    +
  • +
+ +

+ The + Zend_Gdata + library provides support for both authentication schemes. + The rest of this chapter will assume that you are familiar the + authentication schemes available and how to create an + appropriate authenticated connection. For more information, + please see section the + Authentication section + of this manual or the » Authentication Overview in the + Google Data API Developer's Guide. +

+
+ +

Creating A Service Instance

+ + +

+ In order to interact with the servers, this library provides the + Zend_Gdata_Photos service class. This class provides a common + interface to the Google Data and Atom Publishing Protocol models and assists in + marshaling requests to and from the servers. +

+ +

+ Once deciding on an authentication scheme, the next step is to create an instance of + Zend_Gdata_Photos. The class constructor takes an instance of + Zend_Http_Client as a single argument. This provides an + interface for AuthSub and ClientAuth authentication, as both of these require + creation of a special authenticated HTTP client. If no arguments + are provided, an unauthenticated instance of Zend_Http_Client + will be automatically created. +

+ +

+ The example below shows how to create a service class using ClientAuth + authentication: +

+ +
  1. // Parameters for ClientAuth authentication
  2. +
  3. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  4. +
  5. $user = "sample.user@gmail.com";
  6. +
  7. $pass = "pa$$w0rd";
  8. +
  9.  
  10. +
  11. // Create an authenticated HTTP client
  12. +
  13. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  14. +
  15.  
  16. +
  17. // Create an instance of the service
  18. +
  19. $service = new Zend_Gdata_Photos($client);
+ + +

+ A service instance using AuthSub can be created in a similar, though slightly more + lengthy fashion: +

+ +
  1. +
  2.  
  3. +
  4. /**
  5. +
  6. * Returns the full URL of the current page, based upon env variables
  7. +
  8. *
  9. +
  10. * Env variables used:
  11. +
  12. * $_SERVER['HTTPS'] = (on|off|)
  13. +
  14. * $_SERVER['HTTP_HOST'] = value of the Host: header
  15. +
  16. * $_SERVER['SERVER_PORT'] = port number (only used if not http/80,https/443)
  17. +
  18. * $_SERVER['REQUEST_URI'] = the URI after the method of the HTTP request
  19. +
  20. *
  21. +
  22. * @return string Current URL
  23. +
  24. */
  25. +
  26. function getCurrentUrl()
  27. +
  28. {
  29. +
  30.     global $_SERVER;
  31. +
  32.  
  33. +
  34.     /**
  35. +
  36.      * Filter php_self to avoid a security vulnerability.
  37. +
  38.      */
  39. +
  40.     $php_request_uri = htmlentities(substr($_SERVER['REQUEST_URI'], 0,
  41. +
  42.     strcspn($_SERVER['REQUEST_URI'], "\n\r")), ENT_QUOTES);
  43. +
  44.  
  45. +
  46.     if (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') {
  47. +
  48.         $protocol = 'https://';
  49. +
  50.     } else {
  51. +
  52.         $protocol = 'http://';
  53. +
  54.     }
  55. +
  56.     $host = $_SERVER['HTTP_HOST'];
  57. +
  58.     if ($_SERVER['SERVER_PORT'] != '' &&
  59. +
  60.         (($protocol == 'http://' && $_SERVER['SERVER_PORT'] != '80') ||
  61. +
  62.         ($protocol == 'https://' && $_SERVER['SERVER_PORT'] != '443'))) {
  63. +
  64.             $port = ':' . $_SERVER['SERVER_PORT'];
  65. +
  66.     } else {
  67. +
  68.         $port = '';
  69. +
  70.     }
  71. +
  72.     return $protocol . $host . $port . $php_request_uri;
  73. +
  74. }
  75. +
  76.  
  77. +
  78. /**
  79. +
  80. * Returns the AuthSub URL which the user must visit to authenticate requests
  81. +
  82. * from this application.
  83. +
  84. *
  85. +
  86. * Uses getCurrentUrl() to get the next URL which the user will be redirected
  87. +
  88. * to after successfully authenticating with the Google service.
  89. +
  90. *
  91. +
  92. * @return string AuthSub URL
  93. +
  94. */
  95. +
  96. function getAuthSubUrl()
  97. +
  98. {
  99. +
  100.     $next = getCurrentUrl();
  101. +
  102.     $scope = 'http://picasaweb.google.com/data';
  103. +
  104.     $secure = false;
  105. +
  106.     $session = true;
  107. +
  108.     return Zend_Gdata_AuthSub::getAuthSubTokenUri($next, $scope, $secure,
  109. +
  110.         $session);
  111. +
  112. }
  113. +
  114.  
  115. +
  116. /**
  117. +
  118. * Returns a HTTP client object with the appropriate headers for communicating
  119. +
  120. * with Google using AuthSub authentication.
  121. +
  122. *
  123. +
  124. * Uses the $_SESSION['sessionToken'] to store the AuthSub session token after
  125. +
  126. * it is obtained. The single use token supplied in the URL when redirected
  127. +
  128. * after the user succesfully authenticated to Google is retrieved from the
  129. +
  130. * $_GET['token'] variable.
  131. +
  132. *
  133. +
  134. * @return Zend_Http_Client
  135. +
  136. */
  137. +
  138. function getAuthSubHttpClient()
  139. +
  140. {
  141. +
  142.     global $_SESSION, $_GET;
  143. +
  144.     if (!isset($_SESSION['sessionToken']) && isset($_GET['token'])) {
  145. +
  146.         $_SESSION['sessionToken'] =
  147. +
  148.             Zend_Gdata_AuthSub::getAuthSubSessionToken($_GET['token']);
  149. +
  150.     }
  151. +
  152.     $client = Zend_Gdata_AuthSub::getHttpClient($_SESSION['sessionToken']);
  153. +
  154.     return $client;
  155. +
  156. }
  157. +
  158.  
  159. +
  160. /**
  161. +
  162. * Create a new instance of the service, redirecting the user
  163. +
  164. * to the AuthSub server if necessary.
  165. +
  166. */
  167. +
  168. $service = new Zend_Gdata_Photos(getAuthSubHttpClient());
+ + +

+ Finally, an unauthenticated server can be created for use with public feeds: +

+ +
  1. // Create an instance of the service using an unauthenticated HTTP client
  2. +
  3. $service = new Zend_Gdata_Photos();
+ +
+
+ +

Understanding and Constructing Queries

+ + +

+ The primary method to request data from the service is by constructing a query. There + are query classes for each of the following types: +

+ +
    +
  • +

    + User is used to specify the user whose data is being + searched for, and is specified as a username. if no user is provided, "default" + will be used instead to indicate the currently authenticated user (if + authenticated). +

    +
  • + +
  • +

    + Album is used to specify the album which is being + searched for, and is specified as either an id, or an album name. +

    +
  • + +
  • +

    + Photo is used to specify the photo which is being + searched for, and is specified as an id. +

    +
  • +
+ +

A new UserQuery can be constructed as followed:

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $query = new Zend_Gdata_Photos_UserQuery();
  10. +
  11. $query->setUser("sample.user");
+ + +

+ for each query, a number of parameters limiting the search can be requested, or + specified, with get(Parameter) and set(Parameter), respectively. They are as follows: +

+ +
    +
  • +

    + Projection sets the format of the data returned in the + feed, as either "api" or "base". Normally, "api" is desired. The default is + "api". +

    +
  • + +
  • +

    + Type sets the type of element to be returned, as either + "feed" or "entry". The default is "feed". +

    +
  • + +
  • +

    + Access sets the visibility of items to be returned, as + "all", "public", or "private". The default is "all". Non-public elements will + only be returned if the query is searching for the authenticated user. +

    +
  • + +
  • +

    + Tag sets a tag filter for returned items. When a tag is + set, only items tagged with this value will return. +

    +
  • + +
  • +

    + Kind sets the kind of elements to return. When kind is + specified, only entries that match this value will be returned. +

    +
  • + +
  • +

    + ImgMax sets the maximum image size for entries returned. + Only image entries smaller than this value will be returned. +

    +
  • + +
  • +

    + Thumbsize sets the thumbsize of entries that are + returned. Any retrieved entry will have a thumbsize equal to this value. +

    +
  • + +
  • +

    + User sets the user whose data is being searched for. The + default is "default". +

    +
  • + +
  • +

    + AlbumId sets the id of the album being searched for. This + element only applies to album and photo queries. In the case of photo queries, + this specifies the album that contains the requested photo. The album id is + mutually exclusive with the album's name. Setting one unsets the other. +

    +
  • + +
  • +

    + AlbumName sets the name of the album being searched for. + This element only applies to the album and photo queries. In the case of photo + queries, this specifies the album that contains the requested photo. The album + name is mutually exclusive with the album's id. Setting one unsets the other. +

    +
  • + +
  • +

    + PhotoId sets the id of the photo being searched for. This + element only applies to photo queries. +

    +
  • +
+
+ +

Retrieving Feeds And Entries

+ + +

+ The service has functions to retrieve a feed, or individual entries, for users, albums, + and individual photos. +

+ +

Retrieving A User

+ + +

+ The service supports retrieving a user feed and list of the user's content. If the + requested user is also the authenticated user, entries marked as + "hidden" will also be returned. +

+ +

+ The user feed can be accessed by passing the username to the + getUserFeed() method: +

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. try {
  10. +
  11.     $userFeed = $service->getUserFeed("sample.user");
  12. +
  13. } catch (Zend_Gdata_App_Exception $e) {
  14. +
  15.     echo "Error: " . $e->getMessage();
  16. +
  17. }
+ + +

Or, the feed can be accessed by constructing a query, first:

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $query = new Zend_Gdata_Photos_UserQuery();
  10. +
  11. $query->setUser("sample.user");
  12. +
  13.  
  14. +
  15. try {
  16. +
  17.     $userFeed = $service->getUserFeed(null, $query);
  18. +
  19. } catch (Zend_Gdata_App_Exception $e) {
  20. +
  21.     echo "Error: " . $e->getMessage();
  22. +
  23. }
+ + +

+ Constructing a query also provides the ability to request a user entry object: +

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $query = new Zend_Gdata_Photos_UserQuery();
  10. +
  11. $query->setUser("sample.user");
  12. +
  13. $query->setType("entry");
  14. +
  15.  
  16. +
  17. try {
  18. +
  19.     $userEntry = $service->getUserEntry($query);
  20. +
  21. } catch (Zend_Gdata_App_Exception $e) {
  22. +
  23.     echo "Error: " . $e->getMessage();
  24. +
  25. }
+ +
+ +

Retrieving An Album

+ + +

+ The service supports retrieving an album feed and a list of the album's content. +

+ +

+ The album feed is accessed by constructing a query object and passing it to + getAlbumFeed(): +

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $query = new Zend_Gdata_Photos_AlbumQuery();
  10. +
  11. $query->setUser("sample.user");
  12. +
  13. $query->setAlbumId("1");
  14. +
  15.  
  16. +
  17. try {
  18. +
  19.     $albumFeed = $service->getAlbumFeed($query);
  20. +
  21. } catch (Zend_Gdata_App_Exception $e) {
  22. +
  23.     echo "Error: " . $e->getMessage();
  24. +
  25. }
+ + +

+ Alternatively, the query object can be given an album name with + setAlbumName(). Setting the album name is mutually + exclusive with setting the album id, and setting one will unset the other. +

+ +

+ Constructing a query also provides the ability to request an album entry object: +

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $query = new Zend_Gdata_Photos_AlbumQuery();
  10. +
  11. $query->setUser("sample.user");
  12. +
  13. $query->setAlbumId("1");
  14. +
  15. $query->setType("entry");
  16. +
  17.  
  18. +
  19. try {
  20. +
  21.     $albumEntry = $service->getAlbumEntry($query);
  22. +
  23. } catch (Zend_Gdata_App_Exception $e) {
  24. +
  25.     echo "Error: " . $e->getMessage();
  26. +
  27. }
+ +
+ +

Retrieving A Photo

+ + +

+ The service supports retrieving a photo feed and a list of associated comments and + tags. +

+ +

+ The photo feed is accessed by constructing a query object and passing it to + getPhotoFeed(): +

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $query = new Zend_Gdata_Photos_PhotoQuery();
  10. +
  11. $query->setUser("sample.user");
  12. +
  13. $query->setAlbumId("1");
  14. +
  15. $query->setPhotoId("100");
  16. +
  17.  
  18. +
  19. try {
  20. +
  21.     $photoFeed = $service->getPhotoFeed($query);
  22. +
  23. } catch (Zend_Gdata_App_Exception $e) {
  24. +
  25.     echo "Error: " . $e->getMessage();
  26. +
  27. }
+ + +

+ Constructing a query also provides the ability to request a photo entry object: +

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $query = new Zend_Gdata_Photos_PhotoQuery();
  10. +
  11. $query->setUser("sample.user");
  12. +
  13. $query->setAlbumId("1");
  14. +
  15. $query->setPhotoId("100");
  16. +
  17. $query->setType("entry");
  18. +
  19.  
  20. +
  21. try {
  22. +
  23.     $photoEntry = $service->getPhotoEntry($query);
  24. +
  25. } catch (Zend_Gdata_App_Exception $e) {
  26. +
  27.     echo "Error: " . $e->getMessage();
  28. +
  29. }
+ +
+ +

Retrieving A Comment

+ + +

+ The service supports retrieving comments from a feed of a different type. By setting + a query to return a kind of "comment", a feed request can return comments associated + with a specific user, album, or photo. +

+ +

+ Performing an action on each of the comments on a given photo can be accomplished + as follows: +

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $query = new Zend_Gdata_Photos_PhotoQuery();
  10. +
  11. $query->setUser("sample.user");
  12. +
  13. $query->setAlbumId("1");
  14. +
  15. $query->setPhotoId("100");
  16. +
  17. $query->setKind("comment");
  18. +
  19.  
  20. +
  21. try {
  22. +
  23.     $photoFeed = $service->getPhotoFeed($query);
  24. +
  25.  
  26. +
  27.     foreach ($photoFeed as $entry) {
  28. +
  29.         if ($entry instanceof Zend_Gdata_Photos_CommentEntry) {
  30. +
  31.             // Do something with the comment
  32. +
  33.         }
  34. +
  35.     }
  36. +
  37. } catch (Zend_Gdata_App_Exception $e) {
  38. +
  39.     echo "Error: " . $e->getMessage();
  40. +
  41. }
+ +
+ +

Retrieving A Tag

+ + +

+ The service supports retrieving tags from a feed of a different type. By setting a + query to return a kind of "tag", a feed request can return tags associated with a + specific photo. +

+ +

+ Performing an action on each of the tags on a given photo can be accomplished as + follows: +

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $query = new Zend_Gdata_Photos_PhotoQuery();
  10. +
  11. $query->setUser("sample.user");
  12. +
  13. $query->setAlbumId("1");
  14. +
  15. $query->setPhotoId("100");
  16. +
  17. $query->setKind("tag");
  18. +
  19.  
  20. +
  21. try {
  22. +
  23.     $photoFeed = $service->getPhotoFeed($query);
  24. +
  25.  
  26. +
  27.     foreach ($photoFeed as $entry) {
  28. +
  29.         if ($entry instanceof Zend_Gdata_Photos_TagEntry) {
  30. +
  31.             // Do something with the tag
  32. +
  33.         }
  34. +
  35.     }
  36. +
  37. } catch (Zend_Gdata_App_Exception $e) {
  38. +
  39.     echo "Error: " . $e->getMessage();
  40. +
  41. }
+ +
+
+ +

Creating Entries

+ + +

The service has functions to create albums, photos, comments, and tags.

+ +

Creating An Album

+ + +

The service supports creating a new album for an authenticated user:

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $entry = new Zend_Gdata_Photos_AlbumEntry();
  10. +
  11. $entry->setTitle($service->newTitle("test album"));
  12. +
  13.  
  14. +
  15. $service->insertAlbumEntry($entry);
+ +
+ +

Creating A Photo

+ + +

The service supports creating a new photo for an authenticated user:

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. // $photo is the name of a file uploaded via an HTML form
  10. +
  11.  
  12. +
  13. $fd = $service->newMediaFileSource($photo["tmp_name"]);
  14. +
  15. $fd->setContentType($photo["type"]);
  16. +
  17.  
  18. +
  19. $entry = new Zend_Gdata_Photos_PhotoEntry();
  20. +
  21. $entry->setMediaSource($fd);
  22. +
  23. $entry->setTitle($service->newTitle($photo["name"]));
  24. +
  25.  
  26. +
  27. $albumQuery = new Zend_Gdata_Photos_AlbumQuery;
  28. +
  29. $albumQuery->setUser("sample.user");
  30. +
  31. $albumQuery->setAlbumId("1");
  32. +
  33.  
  34. +
  35. $albumEntry = $service->getAlbumEntry($albumQuery);
  36. +
  37.  
  38. +
  39. $service->insertPhotoEntry($entry, $albumEntry);
+ +
+ +

Creating A Comment

+ + +

The service supports creating a new comment for a photo:

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $entry = new Zend_Gdata_Photos_CommentEntry();
  10. +
  11. $entry->setTitle($service->newTitle("comment"));
  12. +
  13. $entry->setContent($service->newContent("comment"));
  14. +
  15.  
  16. +
  17. $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
  18. +
  19. $photoQuery->setUser("sample.user");
  20. +
  21. $photoQuery->setAlbumId("1");
  22. +
  23. $photoQuery->setPhotoId("100");
  24. +
  25. $photoQuery->setType('entry');
  26. +
  27.  
  28. +
  29. $photoEntry = $service->getPhotoEntry($photoQuery);
  30. +
  31.  
  32. +
  33. $service->insertCommentEntry($entry, $photoEntry);
+ +
+ +

Creating A Tag

+ + +

The service supports creating a new tag for a photo:

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $entry = new Zend_Gdata_Photos_TagEntry();
  10. +
  11. $entry->setTitle($service->newTitle("tag"));
  12. +
  13.  
  14. +
  15. $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
  16. +
  17. $photoQuery->setUser("sample.user");
  18. +
  19. $photoQuery->setAlbumId("1");
  20. +
  21. $photoQuery->setPhotoId("100");
  22. +
  23. $photoQuery->setType('entry');
  24. +
  25.  
  26. +
  27. $photoEntry = $service->getPhotoEntry($photoQuery);
  28. +
  29.  
  30. +
  31. $service->insertTagEntry($entry, $photoEntry);
+ +
+
+ +

Deleting Entries

+ + +

The service has functions to delete albums, photos, comments, and tags.

+ +

Deleting An Album

+ + +

The service supports deleting an album for an authenticated user:

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $albumQuery = new Zend_Gdata_Photos_AlbumQuery;
  10. +
  11. $albumQuery->setUser("sample.user");
  12. +
  13. $albumQuery->setAlbumId("1");
  14. +
  15. $albumQuery->setType('entry');
  16. +
  17.  
  18. +
  19. $entry = $service->getAlbumEntry($albumQuery);
  20. +
  21.  
  22. +
  23. $service->deleteAlbumEntry($entry, true);
+ +
+ +

Deleting A Photo

+ + +

The service supports deleting a photo for an authenticated user:

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
  10. +
  11. $photoQuery->setUser("sample.user");
  12. +
  13. $photoQuery->setAlbumId("1");
  14. +
  15. $photoQuery->setPhotoId("100");
  16. +
  17. $photoQuery->setType('entry');
  18. +
  19.  
  20. +
  21. $entry = $service->getPhotoEntry($photoQuery);
  22. +
  23.  
  24. +
  25. $service->deletePhotoEntry($entry, true);
+ +
+ +

Deleting A Comment

+ + +

The service supports deleting a comment for an authenticated user:

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
  10. +
  11. $photoQuery->setUser("sample.user");
  12. +
  13. $photoQuery->setAlbumId("1");
  14. +
  15. $photoQuery->setPhotoId("100");
  16. +
  17. $photoQuery->setType('entry');
  18. +
  19.  
  20. +
  21. $path = $photoQuery->getQueryUrl() . '/commentid/' . "1000";
  22. +
  23.  
  24. +
  25. $entry = $service->getCommentEntry($path);
  26. +
  27.  
  28. +
  29. $service->deleteCommentEntry($entry, true);
+ +
+ +

Deleting A Tag

+ + +

The service supports deleting a tag for an authenticated user:

+ +
  1. $service = Zend_Gdata_Photos::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $service = new Zend_Gdata_Photos($client);
  6. +
  7.  
  8. +
  9. $photoQuery = new Zend_Gdata_Photos_PhotoQuery;
  10. +
  11. $photoQuery->setUser("sample.user");
  12. +
  13. $photoQuery->setAlbumId("1");
  14. +
  15. $photoQuery->setPhotoId("100");
  16. +
  17. $photoQuery->setKind("tag");
  18. +
  19. $query = $photoQuery->getQueryUrl();
  20. +
  21.  
  22. +
  23. $photoFeed = $service->getPhotoFeed($query);
  24. +
  25.  
  26. +
  27. foreach ($photoFeed as $entry) {
  28. +
  29.     if ($entry instanceof Zend_Gdata_Photos_TagEntry) {
  30. +
  31.         if ($entry->getContent() == $tagContent) {
  32. +
  33.             $tagEntry = $entry;
  34. +
  35.         }
  36. +
  37.     }
  38. +
  39. }
  40. +
  41.  
  42. +
  43. $service->deleteTagEntry($tagEntry, true);
+ +
+ +

Optimistic Concurrency (Notes On Deletion)

+ + +

+ GData feeds, including those of the Picasa Web Albums service, implement optimistic + concurrency, a versioning system that prevents users from overwriting changes, + inadvertently. When deleting a entry through the service class, if the entry has + been modified since it was last fetched, an exception will be thrown, unless + explicitly set otherwise (in which case the deletion is retried on the updated + entry). +

+ +

+ An example of how to handle versioning during a deletion is shown by + deleteAlbumEntry(): +

+ +
  1. // $album is the albumEntry to be deleted
  2. +
  3. try {
  4. +
  5.     $this->delete($album);
  6. +
  7. } catch (Zend_Gdata_App_HttpException $e) {
  8. +
  9.     if ($e->getMessage()->getStatus() === 409) {
  10. +
  11.         $entry =
  12. +
  13.             new Zend_Gdata_Photos_AlbumEntry($e->getMessage()->getBody());
  14. +
  15.         $this->delete($entry->getLink('edit')->href);
  16. +
  17.     } else {
  18. +
  19.         throw $e;
  20. +
  21.     }
  22. +
  23. }
+ +
+
+
+
+ + + + + + + + + +
+ Using Google Apps Provisioning + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.gdata.spreadsheets.html b/zend/documentation/manual/core/en/zend.gdata.spreadsheets.html new file mode 100644 index 0000000..56fd87e --- /dev/null +++ b/zend/documentation/manual/core/en/zend.gdata.spreadsheets.html @@ -0,0 +1,480 @@ + + + + + Using Google Spreadsheets - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Using Google Documents List Data API + + + + +
+
+

Using Google Spreadsheets

+ + +

+ The Google Spreadsheets data API allows client applications to view + and update Spreadsheets content in the form of Google data API feeds. + Your client application can request a list of a user's spreadsheets, + edit or delete content in an existing Spreadsheets worksheet, and + query the content in an existing Spreadsheets worksheet. +

+ +

+ See » http://code.google.com/apis/spreadsheets/overview.html + for more information about the Google Spreadsheets API. +

+ +

Create a Spreadsheet

+ + +

+ The Spreadsheets data API does not currently provide a way to + programmatically create or delete a spreadsheet. +

+
+ +

Get a List of Spreadsheets

+ + +

+ You can get a list of spreadsheets for a particular user by using + the getSpreadsheetFeed() method of the Spreadsheets + service. The service will return a + Zend_Gdata_Spreadsheets_SpreadsheetFeed object + containing a list of spreadsheets associated with the authenticated + user. +

+ +
  1. $service = Zend_Gdata_Spreadsheets::AUTH_SERVICE_NAME;
  2. +
  3. $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service);
  4. +
  5. $spreadsheetService = new Zend_Gdata_Spreadsheets($client);
  6. +
  7. $feed = $spreadsheetService->getSpreadsheetFeed();
+ +
+ +

Get a List of Worksheets

+ + +

+ A given spreadsheet may contain multiple worksheets. For each + spreadsheet, there's a worksheets metafeed listing all the + worksheets in that spreadsheet. +

+ +

+ Given the spreadsheet key from the <id> of a + Zend_Gdata_Spreadsheets_SpreadsheetEntry + object you've already retrieved, you can fetch a feed + containing a list of worksheets associated with that spreadsheet. +

+ +
  1. $query = new Zend_Gdata_Spreadsheets_DocumentQuery();
  2. +
  3. $query->setSpreadsheetKey($spreadsheetKey);
  4. +
  5. $feed = $spreadsheetService->getWorksheetFeed($query);
+ + +

+ The resulting Zend_Gdata_Spreadsheets_WorksheetFeed + object feed represents the response from the server. Among other + things, this feed contains a list of + Zend_Gdata_Spreadsheets_WorksheetEntry + objects ($feed->entries), each of which represents a + single worksheet. +

+
+ +

Interacting With List-based Feeds

+ + +

+ A given worksheet generally contains multiple rows, each + containing multiple cells. You can request data from the + worksheet either as a list-based feed, in which each entry + represents a row, or as a cell-based feed, in which each + entry represents a single cell. For information on cell-based feeds, see Interacting with cell-based + feeds. +

+ +

+ The following sections describe how to get a list-based feed, + add a row to a worksheet, and send queries with various query + parameters. +

+ +

+ The list feed makes some assumptions about how the data is laid + out in the spreadsheet. +

+ +

+ In particular, the list feed treats the first row of the + worksheet as a header row; Spreadsheets dynamically creates + XML elements named after the contents of header-row cells. + Users who want to provide Gdata feeds should not put any data + other than column headers in the first row of a worksheet. +

+ +

+ The list feed contains all rows after the first row up to the + first blank row. The first blank row terminates the data set. + If expected data isn't appearing in a feed, check the worksheet + manually to see whether there's an unexpected blank row in the + middle of the data. In particular, if the second row of the + spreadsheet is blank, then the list feed will contain no data. +

+ +

+ A row in a list feed is as many columns wide as the worksheet itself. +

+ +

Get a List-based Feed

+ + +

+ To retrieve a worksheet's list feed, use the + getListFeed() method of the Spreadsheets service. +

+ +
  1. $query = new Zend_Gdata_Spreadsheets_ListQuery();
  2. +
  3. $query->setSpreadsheetKey($spreadsheetKey);
  4. +
  5. $query->setWorksheetId($worksheetId);
  6. +
  7. $listFeed = $spreadsheetService->getListFeed($query);
+ + +

+ The resulting Zend_Gdata_Spreadsheets_ListFeed + object $listfeed represents a response from the + server. Among other things, this feed contains an array of + Zend_Gdata_Spreadsheets_ListEntry objects + ($listFeed->entries), each of which represents + a single row in a worksheet. +

+ +

+ Each Zend_Gdata_Spreadsheets_ListEntry contains an + array, custom, which contains the data for that + row. You can extract and display this array: +

+ +
  1. $rowData = $listFeed->entries[1]->getCustom();
  2. +
  3. foreach($rowData as $customEntry) {
  4. +
  5.   echo $customEntry->getColumnName() . " = " . $customEntry->getText();
  6. +
  7. }
+ + +

+ An alternate version of this array, customByName, + allows direct access to an entry's cells by name. This is + convenient when trying to access a specific header: +

+ +
  1. $customEntry = $listFeed->entries[1]->getCustomByName('my_heading');
  2. +
  3. echo $customEntry->getColumnName() . " = " . $customEntry->getText();
+ +
+ +

Reverse-sort Rows

+ + +

+ By default, rows in the feed appear in the same order as the + corresponding rows in the GUI; that is, they're in order by + row number. To get rows in reverse order, set the reverse + properties of the Zend_Gdata_Spreadsheets_ListQuery + object to TRUE: +

+ +
  1. $query = new Zend_Gdata_Spreadsheets_ListQuery();
  2. +
  3. $query->setSpreadsheetKey($spreadsheetKey);
  4. +
  5. $query->setWorksheetId($worksheetId);
  6. +
  7. $query->setReverse('true');
  8. +
  9. $listFeed = $spreadsheetService->getListFeed($query);
+ + +

+ Note that if you want to order (or reverse sort) by a + particular column, rather than by position in the worksheet, + you can set the orderby value of the + Zend_Gdata_Spreadsheets_ListQuery object to + column:<the header of that column>. +

+
+ +

Send a Structured Query

+ + +

+ You can set a Zend_Gdata_Spreadsheets_ListQuery's + sq value to produce a feed with entries that meet + the specified criteria. For example, suppose you have a worksheet + containing personnel data, in which each row represents + information about a single person. You wish to retrieve all rows + in which the person's name is "John" and the person's age is over + 25. To do so, you would set sq as follows: +

+ +
  1. $query = new Zend_Gdata_Spreadsheets_ListQuery();
  2. +
  3. $query->setSpreadsheetKey($spreadsheetKey);
  4. +
  5. $query->setWorksheetId($worksheetId);
  6. +
  7. $query->setSpreadsheetQuery('name=John and age>25');
  8. +
  9. $listFeed = $spreadsheetService->getListFeed($query);
+ +
+ +

Add a Row

+ + +

+ Rows can be added to a spreadsheet by using the + insertRow() method of the Spreadsheet service. +

+ +
  1. $insertedListEntry = $spreadsheetService->insertRow($rowData,
  2. +
  3.                                                     $spreadsheetKey,
  4. +
  5.                                                     $worksheetId);
+ + +

+ The $rowData parameter contains an array of column + keys to data values. The method returns a + Zend_Gdata_Spreadsheets_SpreadsheetsEntry object + which represents the inserted row. +

+ +

+ Spreadsheets inserts the new row immediately after the last row + that appears in the list-based feed, which is to say + immediately before the first entirely blank row. +

+
+ +

Edit a Row

+ + +

+ Once a Zend_Gdata_Spreadsheets_ListEntry object + is fetched, its rows can be updated by using the + updateRow() method of the Spreadsheet service. +

+ +
  1. $updatedListEntry = $spreadsheetService->updateRow($oldListEntry,
  2. +
  3.                                                    $newRowData);
+ + +

+ The $oldListEntry parameter contains the list entry + to be updated. $newRowData contains an array of + column keys to data values, to be used as the new row data. + The method returns a + Zend_Gdata_Spreadsheets_SpreadsheetsEntry object + which represents the updated row. +

+
+ +

Delete a Row

+ + +

+ To delete a row, simply invoke deleteRow() on the + Zend_Gdata_Spreadsheets object with the existing + entry to be deleted: +

+ +
  1. $spreadsheetService->deleteRow($listEntry);
+ + +

+ Alternatively, you can call the delete() method of + the entry itself: +

+ +
  1. $listEntry->delete();
+ +
+
+ +

Interacting With Cell-based Feeds

+ + +

+ In a cell-based feed, each entry represents a single cell. +

+ +

+ Note that we don't recommend interacting with both a cell-based + feed and a list-based feed for the same worksheet at the same time. +

+ +

Get a Cell-based Feed

+ + +

+ To retrieve a worksheet's cell feed, use the + getCellFeed() method of the Spreadsheets service. +

+ +
  1. $query = new Zend_Gdata_Spreadsheets_CellQuery();
  2. +
  3. $query->setSpreadsheetKey($spreadsheetKey);
  4. +
  5. $query->setWorksheetId($worksheetId);
  6. +
  7. $cellFeed = $spreadsheetService->getCellFeed($query);
+ + +

+ The resulting Zend_Gdata_Spreadsheets_CellFeed + object $cellFeed represents a response from the + server. Among other things, this feed contains an array of + Zend_Gdata_Spreadsheets_CellEntry objects + ($cellFeed>entries), each of which represents + a single cell in a worksheet. You can display this information: +

+ +
  1. foreach($cellFeed as $cellEntry) {
  2. +
  3.   $row = $cellEntry->cell->getRow();
  4. +
  5.   $col = $cellEntry->cell->getColumn();
  6. +
  7.   $val = $cellEntry->cell->getText();
  8. +
  9.   echo "$row, $col = $val\n";
  10. +
  11. }
+ +
+ +

Send a Cell Range Query

+ + +

+ Suppose you wanted to retrieve the cells in the first column + of a worksheet. You can request a cell feed containing only + this column as follows: +

+ +
  1. $query = new Zend_Gdata_Spreadsheets_CellQuery();
  2. +
  3. $query->setMinCol(1);
  4. +
  5. $query->setMaxCol(1);
  6. +
  7. $query->setMinRow(2);
  8. +
  9. $feed = $spreadsheetService->getCellsFeed($query);
+ + +

+ This requests all the data in column 1, starting with row 2. +

+
+ +

Change Contents of a Cell

+ + +

+ To modify the contents of a cell, call + updateCell() with the row, column, + and new value of the cell. +

+ +
  1. $updatedCell = $spreadsheetService->updateCell($row,
  2. +
  3.                                                $col,
  4. +
  5.                                                $inputValue,
  6. +
  7.                                                $spreadsheetKey,
  8. +
  9.                                                $worksheetId);
+ + +

+ The new data is placed in the specified cell in the worksheet. + If the specified cell contains data already, it will be + overwritten. Note: Use updateCell() to change + the data in a cell, even if the cell is empty. +

+
+
+
+
+ + + + + + + + + +
+ Using Google Documents List Data API + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.gdata.youtube.html b/zend/documentation/manual/core/en/zend.gdata.youtube.html new file mode 100644 index 0000000..18e43ba --- /dev/null +++ b/zend/documentation/manual/core/en/zend.gdata.youtube.html @@ -0,0 +1,758 @@ + + + + + Using the YouTube Data API - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Using Picasa Web Albums + + + + +
+
+

Using the YouTube Data API

+ + +

+ The YouTube Data API offers read and write access to YouTube's content. + Users can perform unauthenticated requests to Google Data feeds to + retrieve feeds of popular videos, comments, public information about + YouTube user profiles, user playlists, favorites, subscriptions and so on. +

+ +

+ For more information on the YouTube Data API, please refer + to the official » PHP + Developer's Guide on code.google.com. +

+ +

Authentication

+ + +

+ The YouTube Data API allows read-only access to public data, which + does not require authentication. For any write requests, a user + needs to authenticate either using ClientLogin or AuthSub authentication. Please refer + to the » Authentication + section in the PHP Developer's Guide for more detail. +

+
+ +

Developer Keys and Client ID

+ + +

+ A developer key identifies the YouTube developer that is submitting + an API request. A client ID identifies your application for logging + and debugging purposes. Please visit » http://code.google.com/apis/youtube/dashboard/ + to obtain a developer key and client ID. The example below demonstrates how to pass the + developer key and client ID to the » Zend_Gdata_YouTube + service object. +

+ +

Example #1 Passing a Developer Key and ClientID to Zend_Gdata_YouTube

+ + +
  1. $yt = new Zend_Gdata_YouTube($httpClient,
  2. +
  3.                              $applicationId,
  4. +
  5.                              $clientId,
  6. +
  7.                              $developerKey);
+ +
+
+ +

Retrieving public video feeds

+ + +

+ The YouTube Data API provides numerous feeds that return a list of + videos, such as standard feeds, related videos, video responses, + user's uploads, and user's favorites. For example, the + user's uploads feed returns all videos uploaded by a specific user. See the » YouTube + API reference guide for a detailed list of available + feeds. +

+ +

Searching for videos by metadata

+ + +

+ You can retrieve a list of videos that match specified + search criteria, using the YouTubeQuery class. The following query + looks for videos which contain the word "cat" in their + metadata, starting with the 10th video and displaying 20 + videos per page, ordered by the view count. +

+ +

Example #2 Searching for videos

+ + +
  1. $yt = new Zend_Gdata_YouTube();
  2. +
  3. $query = $yt->newVideoQuery();
  4. +
  5. $query->videoQuery = 'cat';
  6. +
  7. $query->startIndex = 10;
  8. +
  9. $query->maxResults = 20;
  10. +
  11. $query->orderBy = 'viewCount';
  12. +
  13.  
  14. +
  15. echo $query->queryUrl . "\n";
  16. +
  17. $videoFeed = $yt->getVideoFeed($query);
  18. +
  19.  
  20. +
  21. foreach ($videoFeed as $videoEntry) {
  22. +
  23.     echo "---------VIDEO----------\n";
  24. +
  25.     echo "Title: " . $videoEntry->getVideoTitle() . "\n";
  26. +
  27.     echo "\nDescription:\n";
  28. +
  29.     echo $videoEntry->getVideoDescription();
  30. +
  31.     echo "\n\n\n";
  32. +
  33. }
+ +
+ +

+ For more details on the different query parameters, please refer to the » + Reference Guide. The available helper functions in » Zend_Gdata_YouTube_VideoQuery + for each of these parameters are described in more detail in the » PHP + Developer's Guide. +

+
+ +

Searching for videos by categories and tags/keywords

+ + +

+ Searching for videos in specific categories is done by generating a » specially + formatted URL. For example, to search for + comedy videos which contain the keyword dog: +

+ +

Example #3 Searching for videos in specific categories

+ + +
  1. $yt = new Zend_Gdata_YouTube();
  2. +
  3. $query = $yt->newVideoQuery();
  4. +
  5. $query->category = 'Comedy/dog';
  6. +
  7.  
  8. +
  9. echo $query->queryUrl . "\n";
  10. +
  11. $videoFeed = $yt->getVideoFeed($query);
+ +
+
+ +

Retrieving standard feeds

+ + +

+ The YouTube Data API has a number of » standard + feeds. These standard feeds can be retrieved as » Zend_Gdata_YouTube_VideoFeed + objects using the specified URLs, using the predefined constants + within the » Zend_Gdata_YouTube + class (Zend_Gdata_YouTube::STANDARD_TOP_RATED_URI for example) or + using the predefined helper methods (see code listing below). +

+ +

+ To retrieve the top rated videos using the helper method: +

+ +

Example #4 Retrieving a standard video feed

+ + +
  1. $yt = new Zend_Gdata_YouTube();
  2. +
  3. $videoFeed = $yt->getTopRatedVideoFeed();
+ +
+ +

+ There are also query parameters to specify the time period + over which the standard feed is computed. +

+ +

+ For example, to retrieve the top rated videos for today: +

+ +

Example #5 Using a Zend_Gdata_YouTube_VideoQuery to Retrieve Videos

+ + +
  1. $yt = new Zend_Gdata_YouTube();
  2. +
  3. $query = $yt->newVideoQuery();
  4. +
  5. $query->setTime('today');
  6. +
  7. $videoFeed = $yt->getTopRatedVideoFeed($query);
+ +
+ +

+ Alternatively, you could just retrieve the feed using the + URL: +

+ +

Example #6 Retrieving a video feed by URL

+ + +
  1. $yt = new Zend_Gdata_YouTube();
  2. +
  3. $url = 'http://gdata.youtube.com/feeds/standardfeeds/top_rated?time=today'
  4. +
  5. $videoFeed = $yt->getVideoFeed($url);
+ +
+
+ +

Retrieving videos uploaded by a user

+ + +

+ You can retrieve a list of videos uploaded by a particular user + using a simple helper method. This example retrieves videos + uploaded by the user 'liz'. +

+ +

Example #7 Retrieving videos uploaded by a specific user

+ + +
  1. $yt = new Zend_Gdata_YouTube();
  2. +
  3. $videoFeed = $yt->getUserUploads('liz');
+ +
+
+ +

Retrieving videos favorited by a user

+ + +

+ You can retrieve a list of a user's favorite videos + using a simple helper method. This example retrieves videos + favorited by the user 'liz'. +

+ +

Example #8 Retrieving a user's favorite videos

+ + +
  1. $yt = new Zend_Gdata_YouTube();
  2. +
  3. $videoFeed = $yt->getUserFavorites('liz');
+ +
+
+ +

Retrieving video responses for a video

+ + +

+ You can retrieve a list of a video's video responses + using a simple helper method. This example retrieves video + response for a video with the ID 'abc123813abc'. +

+ +

Example #9 Retrieving a feed of video responses

+ + +
  1. $yt = new Zend_Gdata_YouTube();
  2. +
  3. $videoFeed = $yt->getVideoResponseFeed('abc123813abc');
+ +
+
+
+ +

Retrieving video comments

+ + +

+ The comments for each YouTube video can be retrieved in + several ways. To retrieve the comments for the video with + the ID 'abc123813abc', use the following code: +

+ +

Example #10 Retrieving a feed of video comments from a video ID

+ + +
  1. $yt = new Zend_Gdata_YouTube();
  2. +
  3. $commentFeed = $yt->getVideoCommentFeed('abc123813abc');
  4. +
  5.  
  6. +
  7. foreach ($commentFeed as $commentEntry) {
  8. +
  9.     echo $commentEntry->title->text . "\n";
  10. +
  11.     echo $commentEntry->content->text . "\n\n\n";
  12. +
  13. }
+ +
+ +

+ Comments can also be retrieved for a video if you have a copy of the » Zend_Gdata_YouTube_VideoEntry + object: +

+ +

Example #11 Retrieving a Feed of Video Comments from a Zend_Gdata_YouTube_VideoEntry

+ + +
  1. $yt = new Zend_Gdata_YouTube();
  2. +
  3. $videoEntry = $yt->getVideoEntry('abc123813abc');
  4. +
  5. // we don't know the video ID in this example, but we do have the URL
  6. +
  7. $commentFeed = $yt->getVideoCommentFeed(null,
  8. +
  9.                                         $videoEntry->comments->href);
+ +
+
+ +

Retrieving playlist feeds

+ + +

+ The YouTube Data API provides information about users, including + profiles, playlists, subscriptions, and more. +

+ +

Retrieving the playlists of a user

+ + +

+ The library provides a helper method to retrieve + the playlists associated with a given user. To retrieve the + playlists for the user 'liz': +

+ +

Example #12 Retrieving the playlists of a user

+ + +
  1. $yt = new Zend_Gdata_YouTube();
  2. +
  3. $playlistListFeed = $yt->getPlaylistListFeed('liz');
  4. +
  5.  
  6. +
  7. foreach ($playlistListFeed as $playlistEntry) {
  8. +
  9.     echo $playlistEntry->title->text . "\n";
  10. +
  11.     echo $playlistEntry->description->text . "\n";
  12. +
  13.     echo $playlistEntry->getPlaylistVideoFeedUrl() . "\n\n\n";
  14. +
  15. }
+ +
+
+ +

Retrieving a specific playlist

+ + +

+ The library provides a helper method to retrieve + the videos associated with a given playlist. To retrieve the + playlists for a specific playlist entry: +

+ +

Example #13 Retrieving a specific playlist

+ + +
  1. $feedUrl = $playlistEntry->getPlaylistVideoFeedUrl();
  2. +
  3. $playlistVideoFeed = $yt->getPlaylistVideoFeed($feedUrl);
+ +
+
+
+ +

Retrieving a list of a user's subscriptions

+ + +

+ A user can have several types of subscriptions: channel + subscription, tag subscription, or favorites subscription. A » Zend_Gdata_YouTube_SubscriptionEntry + is used to represent individual subscriptions. +

+ +

+ To retrieve all subscriptions for the user 'liz': +

+ +

Example #14 Retrieving all subscriptions for a user

+ + +
  1. $yt = new Zend_Gdata_YouTube();
  2. +
  3. $subscriptionFeed = $yt->getSubscriptionFeed('liz');
  4. +
  5.  
  6. +
  7. foreach ($subscriptionFeed as $subscriptionEntry) {
  8. +
  9.     echo $subscriptionEntry->title->text . "\n";
  10. +
  11. }
+ +
+
+ +

Retrieving a user's profile

+ + +

+ You can retrieve the public profile information + for any YouTube user. To retrieve the profile + for the user 'liz': +

+ +

Example #15 Retrieving a user's profile

+ + +
  1. $yt = new Zend_Gdata_YouTube();
  2. +
  3. $userProfile = $yt->getUserProfile('liz');
  4. +
  5. echo "username: " . $userProfile->username->text . "\n";
  6. +
  7. echo "age: " . $userProfile->age->text . "\n";
  8. +
  9. echo "hometown: " . $userProfile->hometown->text . "\n";
+ +
+
+ +

Uploading Videos to YouTube

+ + +

+ Please make sure to review the diagrams in the » protocol + guide on code.google.com for a high-level + overview of the upload process. Uploading videos can be done in one of + two ways: either by uploading the video directly or by sending just the video + meta-data and having a user upload the video through an HTML form. +

+ +

+ In order to upload a video directly, you must first construct a new » Zend_Gdata_YouTube_VideoEntry + object and specify some required meta-data. The following example shows uploading the + Quicktime video "mytestmovie.mov" to YouTube with the following properties: +

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Metadata used in the code-sample below
PropertyValue
TitleMy Test Movie
CategoryAutos
Keywordscars, funny
DescriptionMy description
Filenamemytestmovie.mov
File MIME typevideo/quicktime
Video private?FALSE
Video location37, -122 (lat, long)
Developer Tagsmydevelopertag, anotherdevelopertag
+ + +

+ The code below creates a blank » Zend_Gdata_YouTube_VideoEntry + to be uploaded. A » Zend_Gdata_App_MediaFileSource + object is then used to hold the actual video file. Under the hood, the » Zend_Gdata_YouTube_Extension_MediaGroup + object is used to hold all of the video's meta-data. Our helper methods detailed below + allow you to just set the video meta-data without having to worry about the media group + object. The $uploadUrl is the location where the new entry gets posted to. + This can be specified either with the $userName of the + currently authenticated user, or, alternatively, you can simply use the + string 'default' to refer to the currently authenticated user. +

+ +

Example #16 Uploading a video

+ + +
  1. $yt = new Zend_Gdata_YouTube($httpClient);
  2. +
  3. $myVideoEntry = new Zend_Gdata_YouTube_VideoEntry();
  4. +
  5.  
  6. +
  7. $filesource = $yt->newMediaFileSource('mytestmovie.mov');
  8. +
  9. $filesource->setContentType('video/quicktime');
  10. +
  11. $filesource->setSlug('mytestmovie.mov');
  12. +
  13.  
  14. +
  15. $myVideoEntry->setMediaSource($filesource);
  16. +
  17.  
  18. +
  19. $myVideoEntry->setVideoTitle('My Test Movie');
  20. +
  21. $myVideoEntry->setVideoDescription('My Test Movie');
  22. +
  23. // Note that category must be a valid YouTube category !
  24. +
  25. $myVideoEntry->setVideoCategory('Comedy');
  26. +
  27.  
  28. +
  29. // Set keywords, note that this must be a comma separated string
  30. +
  31. // and that each keyword cannot contain whitespace
  32. +
  33. $myVideoEntry->SetVideoTags('cars, funny');
  34. +
  35.  
  36. +
  37. // Optionally set some developer tags
  38. +
  39. $myVideoEntry->setVideoDeveloperTags(array('mydevelopertag',
  40. +
  41.                                            'anotherdevelopertag'));
  42. +
  43.  
  44. +
  45. // Optionally set the video's location
  46. +
  47. $yt->registerPackage('Zend_Gdata_Geo');
  48. +
  49. $yt->registerPackage('Zend_Gdata_Geo_Extension');
  50. +
  51. $where = $yt->newGeoRssWhere();
  52. +
  53. $position = $yt->newGmlPos('37.0 -122.0');
  54. +
  55. $where->point = $yt->newGmlPoint($position);
  56. +
  57. $myVideoEntry->setWhere($where);
  58. +
  59.  
  60. +
  61. // Upload URI for the currently authenticated user
  62. +
  63. $uploadUrl =
  64. +
  65.     'http://uploads.gdata.youtube.com/feeds/users/default/uploads';
  66. +
  67.  
  68. +
  69. // Try to upload the video, catching a Zend_Gdata_App_HttpException
  70. +
  71. // if availableor just a regular Zend_Gdata_App_Exception
  72. +
  73.  
  74. +
  75. try {
  76. +
  77.     $newEntry = $yt->insertEntry($myVideoEntry,
  78. +
  79.                                  $uploadUrl,
  80. +
  81.                                  'Zend_Gdata_YouTube_VideoEntry');
  82. +
  83. } catch (Zend_Gdata_App_HttpException $httpException) {
  84. +
  85.     echo $httpException->getRawResponseBody();
  86. +
  87. } catch (Zend_Gdata_App_Exception $e) {
  88. +
  89.     echo $e->getMessage();
  90. +
  91. }
+ +
+ +

+ To upload a video as private, simply use: $myVideoEntry->setVideoPrivate(); prior to + performing the upload. $videoEntry->isVideoPrivate() can be used to check whether a + video entry is private or not. +

+
+ +

Browser-based upload

+ + +

+ Browser-based uploading is performed almost identically to direct uploading, + except that you do not attach a » Zend_Gdata_App_MediaFileSource + object to the » Zend_Gdata_YouTube_VideoEntry + you are constructing. Instead you simply submit all of your video's meta-data to receive + back a token element which can be used to construct an HTML upload + form. +

+ +

Example #17 Browser-based upload

+ + +
  1. $yt = new Zend_Gdata_YouTube($httpClient);
  2. +
  3.  
  4. +
  5. $myVideoEntry= new Zend_Gdata_YouTube_VideoEntry();
  6. +
  7. $myVideoEntry->setVideoTitle('My Test Movie');
  8. +
  9. $myVideoEntry->setVideoDescription('My Test Movie');
  10. +
  11.  
  12. +
  13. // Note that category must be a valid YouTube category
  14. +
  15. $myVideoEntry->setVideoCategory('Comedy');
  16. +
  17. $myVideoEntry->SetVideoTags('cars, funny');
  18. +
  19.  
  20. +
  21. $tokenHandlerUrl = 'http://gdata.youtube.com/action/GetUploadToken';
  22. +
  23. $tokenArray = $yt->getFormUploadToken($myVideoEntry, $tokenHandlerUrl);
  24. +
  25. $tokenValue = $tokenArray['token'];
  26. +
  27. $postUrl = $tokenArray['url'];
+ +
+ +

+ The above code prints out a link and a token that is used to construct an + HTML form to display in the user's browser. A simple example form is + shown below with $tokenValue representing the content of the returned token element, + as shown being retrieved from $myVideoEntry above. In order for the user + to be redirected to your website after submitting the form, make sure to + append a $nextUrl parameter to the $postUrl above, which functions in the + same way as the $next parameter of an AuthSub link. The only difference is + that here, instead of a single-use token, a status and an id variable are + returned in the URL. +

+ +

Example #18 Browser-based upload: Creating the HTML form

+ + +
  1. // place to redirect user after upload
  2. +
  3. $nextUrl = 'http://mysite.com/youtube_uploads';
  4. +
  5.  
  6. +
  7. $form = '<form action="'. $postUrl .'?nexturl='. $nextUrl .
  8. +
  9.         '" method="post" enctype="multipart/form-data">'.
  10. +
  11.         '<input name="file" type="file"/>'.
  12. +
  13.         '<input name="token" type="hidden" value="'. $tokenValue .'"/>'.
  14. +
  15.         '<input value="Upload Video File" type="submit" />'.
  16. +
  17.         '</form>';
+ +
+
+ +

Checking upload status

+ + +

+ After uploading a video, it will immediately be visible in an + authenticated user's uploads feed. However, it will not be public on + the site until it has been processed. Videos that have been rejected or + failed to upload successfully will also only be in the authenticated + user's uploads feed. The following code checks the status of a » Zend_Gdata_YouTube_VideoEntry + to see if it is not live yet or if it has been rejected. +

+ +

Example #19 Checking video upload status

+ + +
  1. try {
  2. +
  3.     $control = $videoEntry->getControl();
  4. +
  5. } catch (Zend_Gdata_App_Exception $e) {
  6. +
  7.     echo $e->getMessage();
  8. +
  9. }
  10. +
  11.  
  12. +
  13. if ($control instanceof Zend_Gdata_App_Extension_Control) {
  14. +
  15.     if ($control->getDraft() != null &&
  16. +
  17.         $control->getDraft()->getText() == 'yes') {
  18. +
  19.         $state = $videoEntry->getVideoState();
  20. +
  21.  
  22. +
  23.         if ($state instanceof Zend_Gdata_YouTube_Extension_State) {
  24. +
  25.             print 'Upload status: '
  26. +
  27.                   . $state->getName()
  28. +
  29.                   .' '. $state->getText();
  30. +
  31.         } else {
  32. +
  33.             print 'Not able to retrieve the video status information'
  34. +
  35.                   .' yet. ' . "Please try again shortly.\n";
  36. +
  37.         }
  38. +
  39.     }
  40. +
  41. }
+ +
+
+ +

Other Functions

+ + +

+ In addition to the functionality described above, the YouTube API + contains many other functions that allow you to modify video meta-data, + delete video entries and use the full range of community features on the site. Some of + the community features that can be modified through the API include: + ratings, comments, playlists, subscriptions, user profiles, contacts and messages. +

+

+ Please refer to the full documentation available in the » PHP Developer's + Guide on code.google.com. +

+
+
+
+ + + + + + + + + +
+ Using Picasa Web Albums + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.http.html b/zend/documentation/manual/core/en/zend.http.html new file mode 100644 index 0000000..3d4a13d --- /dev/null +++ b/zend/documentation/manual/core/en/zend.http.html @@ -0,0 +1,207 @@ + + + + + Zend_Http - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Catching Gdata Exceptions + + + + +
+
+
+

Zend_Http

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Catching Gdata Exceptions + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.infocard.html b/zend/documentation/manual/core/en/zend.infocard.html new file mode 100644 index 0000000..cfc960f --- /dev/null +++ b/zend/documentation/manual/core/en/zend.infocard.html @@ -0,0 +1,171 @@ + + + + + Zend_InfoCard - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Http + + + + +
+
+
+

Zend_InfoCard

+ + + +
+
+ + + + + + + + + +
+ Zend_Http + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.json.html b/zend/documentation/manual/core/en/zend.json.html new file mode 100644 index 0000000..4b710a5 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.json.html @@ -0,0 +1,183 @@ + + + + + Zend_Json - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_InfoCard + + + + +
+
+
+

Zend_Json

+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_InfoCard + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.layout.html b/zend/documentation/manual/core/en/zend.layout.html new file mode 100644 index 0000000..c4ba449 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.layout.html @@ -0,0 +1,180 @@ + + + + + Zend_Layout - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Json + + + + +
+
+
+

Zend_Layout

+ + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Json + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.ldap.html b/zend/documentation/manual/core/en/zend.ldap.html new file mode 100644 index 0000000..745825c --- /dev/null +++ b/zend/documentation/manual/core/en/zend.ldap.html @@ -0,0 +1,189 @@ + + + + + Zend_Ldap - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Layout + + + + +
+
+
+

Zend_Ldap

+ + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Layout + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.loader.html b/zend/documentation/manual/core/en/zend.loader.html new file mode 100644 index 0000000..74258b6 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.loader.html @@ -0,0 +1,195 @@ + + + + + Zend_Loader - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Ldap + + + + +
+
+
+

Zend_Loader

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Ldap + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.locale.html b/zend/documentation/manual/core/en/zend.locale.html new file mode 100644 index 0000000..7135545 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.locale.html @@ -0,0 +1,183 @@ + + + + + Zend_Locale - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Loader + + + + +
+
+
+

Zend_Locale

+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Loader + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.log.html b/zend/documentation/manual/core/en/zend.log.html new file mode 100644 index 0000000..393ff60 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.log.html @@ -0,0 +1,183 @@ + + + + + Zend_Log - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Locale + + + + +
+
+
+

Zend_Log

+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Locale + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.mail.html b/zend/documentation/manual/core/en/zend.mail.html new file mode 100644 index 0000000..292e1fd --- /dev/null +++ b/zend/documentation/manual/core/en/zend.mail.html @@ -0,0 +1,210 @@ + + + + + Zend_Mail - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Log + + + + +
+
+
+

Zend_Mail

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Log + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.markup.html b/zend/documentation/manual/core/en/zend.markup.html new file mode 100644 index 0000000..bae2f0d --- /dev/null +++ b/zend/documentation/manual/core/en/zend.markup.html @@ -0,0 +1,180 @@ + + + + + Zend_Markup - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Mail + + + + +
+
+
+

Zend_Markup

+ + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Mail + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.measure.html b/zend/documentation/manual/core/en/zend.measure.html new file mode 100644 index 0000000..8332629 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.measure.html @@ -0,0 +1,183 @@ + + + + + Zend_Measure - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Markup + + + + +
+
+
+

Zend_Measure

+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Markup + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.memory.html b/zend/documentation/manual/core/en/zend.memory.html new file mode 100644 index 0000000..f3f1cfa --- /dev/null +++ b/zend/documentation/manual/core/en/zend.memory.html @@ -0,0 +1,177 @@ + + + + + Zend_Memory - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Measure + + + + +
+
+
+

Zend_Memory

+ + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Measure + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.mime.html b/zend/documentation/manual/core/en/zend.mime.html new file mode 100644 index 0000000..76a323c --- /dev/null +++ b/zend/documentation/manual/core/en/zend.mime.html @@ -0,0 +1,177 @@ + + + + + Zend_Mime - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Memory + + + + +
+
+
+

Zend_Mime

+ + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Memory + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.mobile.push.html b/zend/documentation/manual/core/en/zend.mobile.push.html new file mode 100644 index 0000000..b22e912 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.mobile.push.html @@ -0,0 +1,180 @@ + + + + + Zend_Mobile_Push - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Mime + + + + +
+
+
+

Zend_Mobile_Push

+ + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Mime + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.navigation.html b/zend/documentation/manual/core/en/zend.navigation.html new file mode 100644 index 0000000..acc9b3d --- /dev/null +++ b/zend/documentation/manual/core/en/zend.navigation.html @@ -0,0 +1,177 @@ + + + + + Zend_Navigation - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Mobile_Push + + + + +
+
+
+

Zend_Navigation

+ + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Mobile_Push + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.oauth.html b/zend/documentation/manual/core/en/zend.oauth.html new file mode 100644 index 0000000..824a435 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.oauth.html @@ -0,0 +1,171 @@ + + + + + Zend_Oauth - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Navigation + + + + +
+
+
+

Zend_Oauth

+ + + +
+
+ + + + + + + + + +
+ Zend_Navigation + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.openid.html b/zend/documentation/manual/core/en/zend.openid.html new file mode 100644 index 0000000..163b051 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.openid.html @@ -0,0 +1,177 @@ + + + + + Zend_OpenId - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Oauth + + + + +
+
+
+

Zend_OpenId

+ + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Oauth + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.paginator.html b/zend/documentation/manual/core/en/zend.paginator.html new file mode 100644 index 0000000..901f58b --- /dev/null +++ b/zend/documentation/manual/core/en/zend.paginator.html @@ -0,0 +1,180 @@ + + + + + Zend_Paginator - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_OpenId + + + + +
+
+
+

Zend_Paginator

+ + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_OpenId + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.pdf.html b/zend/documentation/manual/core/en/zend.pdf.html new file mode 100644 index 0000000..2d28239 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.pdf.html @@ -0,0 +1,192 @@ + + + + + Zend_Pdf - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Paginator + + + + +
+
+
+

Zend_Pdf

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Paginator + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.progressbar.html b/zend/documentation/manual/core/en/zend.progressbar.html new file mode 100644 index 0000000..26a8252 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.progressbar.html @@ -0,0 +1,171 @@ + + + + + Zend_ProgressBar - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Pdf + + + + +
+
+
+

Zend_ProgressBar

+ + + +
+
+ + + + + + + + + +
+ Zend_Pdf + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.queue.html b/zend/documentation/manual/core/en/zend.queue.html new file mode 100644 index 0000000..f01bbbf --- /dev/null +++ b/zend/documentation/manual/core/en/zend.queue.html @@ -0,0 +1,186 @@ + + + + + Zend_Queue - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_ProgressBar + + + + +
+
+
+

Zend_Queue

+ + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_ProgressBar + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.reflection.html b/zend/documentation/manual/core/en/zend.reflection.html new file mode 100644 index 0000000..d54e402 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.reflection.html @@ -0,0 +1,177 @@ + + + + + Zend_Reflection - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Queue + + + + +
+
+
+

Zend_Reflection

+ + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Queue + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.registry.html b/zend/documentation/manual/core/en/zend.registry.html new file mode 100644 index 0000000..97dfa6e --- /dev/null +++ b/zend/documentation/manual/core/en/zend.registry.html @@ -0,0 +1,171 @@ + + + + + Zend_Registry - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Reflection + + + + +
+
+
+

Zend_Registry

+ + + +
+
+ + + + + + + + + +
+ Zend_Reflection + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.rest.html b/zend/documentation/manual/core/en/zend.rest.html new file mode 100644 index 0000000..361d48b --- /dev/null +++ b/zend/documentation/manual/core/en/zend.rest.html @@ -0,0 +1,177 @@ + + + + + Zend_Rest - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Registry + + + + +
+
+
+

Zend_Rest

+ + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Registry + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.search.lucene.html b/zend/documentation/manual/core/en/zend.search.lucene.html new file mode 100644 index 0000000..6741d9b --- /dev/null +++ b/zend/documentation/manual/core/en/zend.search.lucene.html @@ -0,0 +1,198 @@ + + + + + Zend_Search_Lucene - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Rest + + + + +
+
+
+

Zend_Search_Lucene

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Rest + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.serializer.html b/zend/documentation/manual/core/en/zend.serializer.html new file mode 100644 index 0000000..f42a13e --- /dev/null +++ b/zend/documentation/manual/core/en/zend.serializer.html @@ -0,0 +1,175 @@ + + + + + Zend_Serializer - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Search_Lucene + + + + +
+
+
+

Zend_Serializer

+ + + + + + + +
+
+ + + + + + + + + +
+ Zend_Search_Lucene + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.server.html b/zend/documentation/manual/core/en/zend.server.html new file mode 100644 index 0000000..14aacc5 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.server.html @@ -0,0 +1,174 @@ + + + + + Zend_Server - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Serializer + + + + +
+
+
+

Zend_Server

+ + + + + + +
+
+ + + + + + + + + +
+ Zend_Serializer + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.service.html b/zend/documentation/manual/core/en/zend.service.html new file mode 100644 index 0000000..ea2e596 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.service.html @@ -0,0 +1,291 @@ + + + + + Zend_Service - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Server + + + + +
+
+
+

Zend_Service

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Server + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.session.html b/zend/documentation/manual/core/en/zend.session.html new file mode 100644 index 0000000..6ce18bf --- /dev/null +++ b/zend/documentation/manual/core/en/zend.session.html @@ -0,0 +1,183 @@ + + + + + Zend_Session - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Service + + + + +
+
+
+

Zend_Session

+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Service + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.soap.html b/zend/documentation/manual/core/en/zend.soap.html new file mode 100644 index 0000000..6be7370 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.soap.html @@ -0,0 +1,180 @@ + + + + + Zend_Soap - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Session + + + + +
+
+
+

Zend_Soap

+ + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Session + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.tag.html b/zend/documentation/manual/core/en/zend.tag.html new file mode 100644 index 0000000..b265829 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.tag.html @@ -0,0 +1,174 @@ + + + + + Zend_Tag - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Soap + + + + +
+
+
+

Zend_Tag

+ + + + + + +
+
+ + + + + + + + + +
+ Zend_Soap + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.test.html b/zend/documentation/manual/core/en/zend.test.html new file mode 100644 index 0000000..04ce484 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.test.html @@ -0,0 +1,177 @@ + + + + + Zend_Test - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Tag + + + + +
+
+
+

Zend_Test

+ + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Tag + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.text.html b/zend/documentation/manual/core/en/zend.text.html new file mode 100644 index 0000000..1f6b3ad --- /dev/null +++ b/zend/documentation/manual/core/en/zend.text.html @@ -0,0 +1,174 @@ + + + + + Zend_Text - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Test + + + + +
+
+
+

Zend_Text

+ + + + + + +
+
+ + + + + + + + + +
+ Zend_Test + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.timesync.html b/zend/documentation/manual/core/en/zend.timesync.html new file mode 100644 index 0000000..835347b --- /dev/null +++ b/zend/documentation/manual/core/en/zend.timesync.html @@ -0,0 +1,174 @@ + + + + + Zend_TimeSync - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Text + + + + +
+
+
+

Zend_TimeSync

+ + + + + + +
+
+ + + + + + + + + +
+ Zend_Text + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.tool.framework.html b/zend/documentation/manual/core/en/zend.tool.framework.html new file mode 100644 index 0000000..261ff4a --- /dev/null +++ b/zend/documentation/manual/core/en/zend.tool.framework.html @@ -0,0 +1,186 @@ + + + + + Zend_Tool_Framework - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Tool + + + + +
+
+
+

Zend_Tool_Framework

+ + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Tool + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.tool.html b/zend/documentation/manual/core/en/zend.tool.html new file mode 100644 index 0000000..cb94a2d --- /dev/null +++ b/zend/documentation/manual/core/en/zend.tool.html @@ -0,0 +1,174 @@ + + + + + Zend_Tool - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_TimeSync + + + + +
+
+
+

Zend_Tool

+ + + + + + +
+
+ + + + + + + + + +
+ Zend_TimeSync + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.tool.project.html b/zend/documentation/manual/core/en/zend.tool.project.html new file mode 100644 index 0000000..c683d18 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.tool.project.html @@ -0,0 +1,180 @@ + + + + + Zend_Tool_Project - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Tool_Framework + + + + +
+
+
+

Zend_Tool_Project

+ + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Tool_Framework + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.translate.html b/zend/documentation/manual/core/en/zend.translate.html new file mode 100644 index 0000000..3f89488 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.translate.html @@ -0,0 +1,186 @@ + + + + + Zend_Translate - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Tool_Project + + + + +
+
+
+

Zend_Translate

+ + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Tool_Project + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.uri.html b/zend/documentation/manual/core/en/zend.uri.html new file mode 100644 index 0000000..5c4fd5e --- /dev/null +++ b/zend/documentation/manual/core/en/zend.uri.html @@ -0,0 +1,171 @@ + + + + + Zend_Uri - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Translate + + + + +
+
+
+

Zend_Uri

+ + + +
+
+ + + + + + + + + +
+ Zend_Translate + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.validate.html b/zend/documentation/manual/core/en/zend.validate.html new file mode 100644 index 0000000..0855039 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.validate.html @@ -0,0 +1,183 @@ + + + + + Zend_Validate - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Uri + + + + +
+
+
+

Zend_Validate

+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Uri + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.version.html b/zend/documentation/manual/core/en/zend.version.html new file mode 100644 index 0000000..a88800b --- /dev/null +++ b/zend/documentation/manual/core/en/zend.version.html @@ -0,0 +1,171 @@ + + + + + Zend_Version - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Validate + + + + +
+
+
+

Zend_Version

+ + + +
+
+ + + + + + + + + +
+ Zend_Validate + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.view.html b/zend/documentation/manual/core/en/zend.view.html new file mode 100644 index 0000000..c094062 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.view.html @@ -0,0 +1,183 @@ + + + + + Zend_View - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Version + + + + +
+
+
+

Zend_View

+ + + + + + + + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Version + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.wildfire.html b/zend/documentation/manual/core/en/zend.wildfire.html new file mode 100644 index 0000000..92ac217 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.wildfire.html @@ -0,0 +1,171 @@ + + + + + Zend_Wildfire - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_View + + + + +
+
+
+

Zend_Wildfire

+ + + +
+
+ + + + + + + + + +
+ Zend_View + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zend.xmlrpc.html b/zend/documentation/manual/core/en/zend.xmlrpc.html new file mode 100644 index 0000000..daf7094 --- /dev/null +++ b/zend/documentation/manual/core/en/zend.xmlrpc.html @@ -0,0 +1,177 @@ + + + + + Zend_XmlRpc - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_Wildfire + + + + +
+
+
+

Zend_XmlRpc

+ + + + + + + + + +
+
+ + + + + + + + + +
+ Zend_Wildfire + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zendx.console.process.unix.html b/zend/documentation/manual/core/en/zendx.console.process.unix.html new file mode 100644 index 0000000..1a0fdfa --- /dev/null +++ b/zend/documentation/manual/core/en/zendx.console.process.unix.html @@ -0,0 +1,169 @@ + + + + + ZendX_Console_Process_Unix - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ Zend_XmlRpc + + + + +
+
+
+

ZendX_Console_Process_Unix

+ +
+
+ + + + + + + + + +
+ Zend_XmlRpc + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/zend/documentation/manual/core/en/zendx.jquery.html b/zend/documentation/manual/core/en/zendx.jquery.html new file mode 100644 index 0000000..854093f --- /dev/null +++ b/zend/documentation/manual/core/en/zendx.jquery.html @@ -0,0 +1,171 @@ + + + + + ZendX_JQuery - Zend Framework Manual + + + + + + + + +
+ + + + + + + + +
+ ZendX_Console_Process_Unix + + + + +
+
+
+

ZendX_JQuery

+ + + +
+
+ + + + + + + + + +
+ ZendX_Console_Process_Unix + + + + +
+
+ +
+ + \ No newline at end of file -- cgit v1.2.3