439 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			439 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| namespace Safe;
 | |
| 
 | |
| use Safe\Exceptions\YazException;
 | |
| 
 | |
| /**
 | |
|  * This function invokes a CCL parser. It converts a given CCL FIND query to
 | |
|  * an RPN query which may be passed to the yaz_search
 | |
|  * function to perform a search.
 | |
|  *
 | |
|  * To define a set of valid CCL fields call yaz_ccl_conf
 | |
|  * prior to this function.
 | |
|  *
 | |
|  * @param resource $id The connection resource returned by yaz_connect.
 | |
|  * @param string $query The CCL FIND query.
 | |
|  * @param array|null $result If the function was executed successfully, this will be an array
 | |
|  * containing the valid RPN query under the key rpn.
 | |
|  *
 | |
|  * Upon failure, three indexes are set in this array to indicate the cause
 | |
|  * of failure:
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * errorcode - the CCL error code (integer)
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * errorstring - the CCL error string
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * errorpos - approximate position in query of failure
 | |
|  * (integer is character position)
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * errorcode - the CCL error code (integer)
 | |
|  *
 | |
|  * errorstring - the CCL error string
 | |
|  *
 | |
|  * errorpos - approximate position in query of failure
 | |
|  * (integer is character position)
 | |
|  * @throws YazException
 | |
|  *
 | |
|  */
 | |
| function yaz_ccl_parse($id, string $query, ?array &$result): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \yaz_ccl_parse($id, $query, $result);
 | |
|     if ($result === false) {
 | |
|         throw YazException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * Closes the connection given by parameter id.
 | |
|  *
 | |
|  * @param resource $id The connection resource returned by yaz_connect.
 | |
|  * @throws YazException
 | |
|  *
 | |
|  */
 | |
| function yaz_close($id): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \yaz_close($id);
 | |
|     if ($result === false) {
 | |
|         throw YazException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * This function returns a connection resource on success, zero on
 | |
|  * failure.
 | |
|  *
 | |
|  * yaz_connect prepares for a connection to a
 | |
|  * Z39.50 server.
 | |
|  * This function is non-blocking and does not attempt to establish
 | |
|  * a connection  - it merely prepares a connect to be performed later when
 | |
|  * yaz_wait is called.
 | |
|  *
 | |
|  * @param string $zurl A string that takes the form host[:port][/database].
 | |
|  * If port is omitted, port 210 is used. If database is omitted
 | |
|  * Default is used.
 | |
|  * @param mixed $options If given as a string, it is treated as the Z39.50 V2 authentication
 | |
|  * string (OpenAuth).
 | |
|  *
 | |
|  * If given as an array, the contents of the array serves as options.
 | |
|  *
 | |
|  *
 | |
|  * user
 | |
|  *
 | |
|  *
 | |
|  * Username for authentication.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * group
 | |
|  *
 | |
|  *
 | |
|  * Group for authentication.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * password
 | |
|  *
 | |
|  *
 | |
|  * Password for authentication.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * cookie
 | |
|  *
 | |
|  *
 | |
|  * Cookie for session (YAZ proxy).
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * proxy
 | |
|  *
 | |
|  *
 | |
|  * Proxy for connection (YAZ proxy).
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * persistent
 | |
|  *
 | |
|  *
 | |
|  * A boolean. If TRUE the connection is persistent; If FALSE the
 | |
|  * connection is not persistent. By default connections are persistent.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * If you open a persistent connection, you won't be able to close
 | |
|  * it later with yaz_close.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * piggyback
 | |
|  *
 | |
|  *
 | |
|  * A boolean. If TRUE piggyback is enabled for searches; If FALSE
 | |
|  * piggyback is disabled. By default piggyback is enabled.
 | |
|  *
 | |
|  *
 | |
|  * Enabling piggyback is more efficient and usually saves a
 | |
|  * network-round-trip for first time fetches of records. However, a
 | |
|  * few Z39.50 servers do not support piggyback or they ignore element
 | |
|  * set names. For those, piggyback should be disabled.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * charset
 | |
|  *
 | |
|  *
 | |
|  * A string that specifies character set to be used in Z39.50
 | |
|  * language and character set negotiation. Use strings such as:
 | |
|  * ISO-8859-1, UTF-8,
 | |
|  * UTF-16.
 | |
|  *
 | |
|  *
 | |
|  * Most Z39.50 servers do not support this feature (and thus, this is
 | |
|  * ignored). Many servers use the ISO-8859-1 encoding for queries and
 | |
|  * messages. MARC21/USMARC records are not affected by this setting.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * preferredMessageSize
 | |
|  *
 | |
|  *
 | |
|  * An integer that specifies the maximum byte size of all records
 | |
|  * to be returned by a target during retrieval. See the
 | |
|  * Z39.50 standard for more
 | |
|  * information.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * This option is supported in PECL YAZ 1.0.5 or later.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * maximumRecordSize
 | |
|  *
 | |
|  *
 | |
|  * An integer that specifies the maximum byte size of a single record
 | |
|  * to be returned by a target during retrieval. This
 | |
|  * entity is referred to as Exceptional-record-size in the
 | |
|  * Z39.50 standard.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * This option is supported in PECL YAZ 1.0.5 or later.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * Username for authentication.
 | |
|  *
 | |
|  * Group for authentication.
 | |
|  *
 | |
|  * Password for authentication.
 | |
|  *
 | |
|  * Cookie for session (YAZ proxy).
 | |
|  *
 | |
|  * Proxy for connection (YAZ proxy).
 | |
|  *
 | |
|  * A boolean. If TRUE the connection is persistent; If FALSE the
 | |
|  * connection is not persistent. By default connections are persistent.
 | |
|  *
 | |
|  * If you open a persistent connection, you won't be able to close
 | |
|  * it later with yaz_close.
 | |
|  *
 | |
|  * A boolean. If TRUE piggyback is enabled for searches; If FALSE
 | |
|  * piggyback is disabled. By default piggyback is enabled.
 | |
|  *
 | |
|  * Enabling piggyback is more efficient and usually saves a
 | |
|  * network-round-trip for first time fetches of records. However, a
 | |
|  * few Z39.50 servers do not support piggyback or they ignore element
 | |
|  * set names. For those, piggyback should be disabled.
 | |
|  *
 | |
|  * A string that specifies character set to be used in Z39.50
 | |
|  * language and character set negotiation. Use strings such as:
 | |
|  * ISO-8859-1, UTF-8,
 | |
|  * UTF-16.
 | |
|  *
 | |
|  * Most Z39.50 servers do not support this feature (and thus, this is
 | |
|  * ignored). Many servers use the ISO-8859-1 encoding for queries and
 | |
|  * messages. MARC21/USMARC records are not affected by this setting.
 | |
|  *
 | |
|  * An integer that specifies the maximum byte size of all records
 | |
|  * to be returned by a target during retrieval. See the
 | |
|  * Z39.50 standard for more
 | |
|  * information.
 | |
|  *
 | |
|  * This option is supported in PECL YAZ 1.0.5 or later.
 | |
|  *
 | |
|  * An integer that specifies the maximum byte size of a single record
 | |
|  * to be returned by a target during retrieval. This
 | |
|  * entity is referred to as Exceptional-record-size in the
 | |
|  * Z39.50 standard.
 | |
|  *
 | |
|  * This option is supported in PECL YAZ 1.0.5 or later.
 | |
|  * @return mixed A connection resource on success, FALSE on error.
 | |
|  * @throws YazException
 | |
|  *
 | |
|  */
 | |
| function yaz_connect(string $zurl, $options = null)
 | |
| {
 | |
|     error_clear_last();
 | |
|     if ($options !== null) {
 | |
|         $result = \yaz_connect($zurl, $options);
 | |
|     } else {
 | |
|         $result = \yaz_connect($zurl);
 | |
|     }
 | |
|     if ($result === false) {
 | |
|         throw YazException::createFromPhpError();
 | |
|     }
 | |
|     return $result;
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * This function allows you to change databases within a session by
 | |
|  * specifying one or more databases to be used in search, retrieval, etc.
 | |
|  * - overriding databases specified in call to
 | |
|  * yaz_connect.
 | |
|  *
 | |
|  * @param resource $id The connection resource returned by yaz_connect.
 | |
|  * @param string $databases A string containing one or more databases. Multiple databases are
 | |
|  * separated by a plus sign +.
 | |
|  * @throws YazException
 | |
|  *
 | |
|  */
 | |
| function yaz_database($id, string $databases): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \yaz_database($id, $databases);
 | |
|     if ($result === false) {
 | |
|         throw YazException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * This function sets the element set name for retrieval.
 | |
|  *
 | |
|  * Call this function before yaz_search or
 | |
|  * yaz_present to specify the element set name for
 | |
|  * records to be retrieved.
 | |
|  *
 | |
|  * @param resource $id The connection resource returned by yaz_connect.
 | |
|  * @param string $elementset Most servers support F (for full records) and
 | |
|  * B (for brief records).
 | |
|  * @throws YazException
 | |
|  *
 | |
|  */
 | |
| function yaz_element($id, string $elementset): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \yaz_element($id, $elementset);
 | |
|     if ($result === false) {
 | |
|         throw YazException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * This function prepares for retrieval of records after a successful search.
 | |
|  *
 | |
|  * The yaz_range function should be called prior to this
 | |
|  * function to specify the range of records to be retrieved.
 | |
|  *
 | |
|  * @param resource $id The connection resource returned by yaz_connect.
 | |
|  * @throws YazException
 | |
|  *
 | |
|  */
 | |
| function yaz_present($id): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \yaz_present($id);
 | |
|     if ($result === false) {
 | |
|         throw YazException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * yaz_search prepares for a search on the given
 | |
|  * connection.
 | |
|  *
 | |
|  * Like yaz_connect this function is non-blocking and
 | |
|  * only prepares for a search to be executed later when
 | |
|  * yaz_wait is called.
 | |
|  *
 | |
|  * @param resource $id The connection resource returned by yaz_connect.
 | |
|  * @param string $type This parameter represents the query type - only "rpn"
 | |
|  * is supported now in which case the third argument specifies a Type-1
 | |
|  * query in prefix query notation.
 | |
|  * @param string $query The RPN query is a textual representation of the Type-1 query as
 | |
|  * defined by the Z39.50 standard. However, in the text representation
 | |
|  * as used by YAZ a prefix notation is used, that is the operator
 | |
|  * precedes the operands. The query string is a sequence of tokens where
 | |
|  * white space is ignored unless surrounded by double quotes. Tokens beginning
 | |
|  * with an at-character (@) are considered operators,
 | |
|  * otherwise they are treated as search terms.
 | |
|  *
 | |
|  * You can find information about attributes at the
 | |
|  * Z39.50 Maintenance Agency
 | |
|  * site.
 | |
|  *
 | |
|  * If you would like to use a more friendly notation,
 | |
|  * use the CCL parser - functions yaz_ccl_conf and
 | |
|  * yaz_ccl_parse.
 | |
|  * @throws YazException
 | |
|  *
 | |
|  */
 | |
| function yaz_search($id, string $type, string $query): void
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \yaz_search($id, $type, $query);
 | |
|     if ($result === false) {
 | |
|         throw YazException::createFromPhpError();
 | |
|     }
 | |
| }
 | |
| 
 | |
| 
 | |
| /**
 | |
|  * This function carries out networked (blocked) activity for outstanding
 | |
|  * requests which have been prepared by the functions
 | |
|  * yaz_connect, yaz_search,
 | |
|  * yaz_present, yaz_scan and
 | |
|  * yaz_itemorder.
 | |
|  *
 | |
|  * yaz_wait returns when all servers have either
 | |
|  * completed all requests or aborted (in case of errors).
 | |
|  *
 | |
|  * @param array $options An associative array of options:
 | |
|  *
 | |
|  *
 | |
|  * timeout
 | |
|  *
 | |
|  *
 | |
|  * Sets timeout in seconds. If a server has not responded within the
 | |
|  * timeout it is considered dead and yaz_wait
 | |
|  * returns. The default value for timeout is 15 seconds.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * event
 | |
|  *
 | |
|  *
 | |
|  * A boolean.
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  *
 | |
|  * Sets timeout in seconds. If a server has not responded within the
 | |
|  * timeout it is considered dead and yaz_wait
 | |
|  * returns. The default value for timeout is 15 seconds.
 | |
|  *
 | |
|  * A boolean.
 | |
|  * @return mixed Returns TRUE on success.
 | |
|  * In event mode, returns resource.
 | |
|  * @throws YazException
 | |
|  *
 | |
|  */
 | |
| function yaz_wait(array &$options = null)
 | |
| {
 | |
|     error_clear_last();
 | |
|     $result = \yaz_wait($options);
 | |
|     if ($result === false) {
 | |
|         throw YazException::createFromPhpError();
 | |
|     }
 | |
|     return $result;
 | |
| }
 |