471 lines
14 KiB
PHP
471 lines
14 KiB
PHP
<?php
|
|
/**
|
|
* FileMaker API for PHP
|
|
*
|
|
* @package FileMaker
|
|
*
|
|
* Copyright © 2005-2007, FileMaker, Inc. All rights reserved.
|
|
* NOTE: Use of this source code is subject to the terms of the FileMaker
|
|
* Software License which accompanies the code. Your use of this source code
|
|
* signifies your agreement to such license terms and conditions. Except as
|
|
* expressly granted in the Software License, no other copyright, patent, or
|
|
* other intellectual property license or right is granted, either expressly or
|
|
* by implication, by FileMaker.
|
|
*/
|
|
|
|
/**#@+
|
|
* @ignore Always load the error class and the implementation delegate.
|
|
*/
|
|
require_once dirname(__FILE__) . '/FileMaker/Error.php';
|
|
require_once dirname(__FILE__) . '/FileMaker/Implementation/FileMakerImpl.php';
|
|
/**#@-*/
|
|
|
|
/**#@+
|
|
* Find constants.
|
|
*/
|
|
define('FILEMAKER_FIND_LT', '<');
|
|
define('FILEMAKER_FIND_LTE', '<=');
|
|
define('FILEMAKER_FIND_GT', '>');
|
|
define('FILEMAKER_FIND_GTE', '>=');
|
|
define('FILEMAKER_FIND_RANGE', '...');
|
|
define('FILEMAKER_FIND_DUPLICATES', '!');
|
|
define('FILEMAKER_FIND_TODAY', '//');
|
|
define('FILEMAKER_FIND_INVALID_DATETIME', '?');
|
|
define('FILEMAKER_FIND_CHAR', '@');
|
|
define('FILEMAKER_FIND_DIGIT', '#');
|
|
define('FILEMAKER_FIND_CHAR_WILDCARD', '*');
|
|
define('FILEMAKER_FIND_LITERAL', '""');
|
|
define('FILEMAKER_FIND_RELAXED', '~');
|
|
define('FILEMAKER_FIND_FIELDMATCH', '==');
|
|
/**#@-*/
|
|
|
|
/**#@+
|
|
* Find logical operator constants.
|
|
* Use with the {@link FileMaker_Command_Find::setLogicalOperator()}
|
|
* method.
|
|
*/
|
|
define('FILEMAKER_FIND_AND', 'and');
|
|
define('FILEMAKER_FIND_OR', 'or');
|
|
/**#@-*/
|
|
|
|
/**#@+
|
|
* Pre-validation rule constants.
|
|
*/
|
|
define('FILEMAKER_RULE_NOTEMPTY', 1);
|
|
define('FILEMAKER_RULE_NUMERICONLY', 2);
|
|
define('FILEMAKER_RULE_MAXCHARACTERS', 3);
|
|
define('FILEMAKER_RULE_FOURDIGITYEAR', 4);
|
|
define('FILEMAKER_RULE_TIMEOFDAY', 5);
|
|
define('FILEMAKER_RULE_TIMESTAMP_FIELD', 6);
|
|
define('FILEMAKER_RULE_DATE_FIELD', 7);
|
|
define('FILEMAKER_RULE_TIME_FIELD', 8);
|
|
/**#@-*/
|
|
|
|
/**#@+
|
|
* Sort direction constants.
|
|
* Use with the {@link FileMaker_Command_Find::addSortRule()} and
|
|
* {@link FileMaker_Command_CompoundFind::addSortRule()} methods.
|
|
*/
|
|
define('FILEMAKER_SORT_ASCEND', 'ascend');
|
|
define('FILEMAKER_SORT_DESCEND', 'descend');
|
|
/**#@-*/
|
|
|
|
/**#@+
|
|
* Logging level constants.
|
|
*/
|
|
define('FILEMAKER_LOG_ERR', 3);
|
|
define('FILEMAKER_LOG_INFO', 6);
|
|
define('FILEMAKER_LOG_DEBUG', 7);
|
|
/**#@-*/
|
|
|
|
/**
|
|
* Base FileMaker class. Defines database properties, connects to a database,
|
|
* and gets information about the API.
|
|
*
|
|
* @package FileMaker
|
|
*/
|
|
class FileMaker
|
|
{
|
|
/**
|
|
* Implementation. This is the object that actually implements the API.
|
|
*
|
|
* @var FileMaker_Implementation
|
|
* @access private
|
|
*/
|
|
var $_impl;
|
|
|
|
/**
|
|
* Tests whether a variable is a FileMaker API Error.
|
|
*
|
|
* @param mixed $variable Variable to test.
|
|
* @return boolean TRUE, if the variable is a {@link FileMaker_Error} object.
|
|
* @static
|
|
*
|
|
*/
|
|
static function isError($variable)
|
|
{
|
|
return is_a($variable, 'FileMaker_Error');
|
|
}
|
|
|
|
/**
|
|
* Returns the version of the FileMaker API for PHP.
|
|
*
|
|
* @return string API version.
|
|
* @static
|
|
*/
|
|
function getAPIVersion()
|
|
{
|
|
return FileMaker_Implementation::getAPIVersion();
|
|
}
|
|
|
|
/**
|
|
* Returns the minimum version of FileMaker Server that this API works with.
|
|
*
|
|
* @return string Minimum FileMaker Server version.
|
|
* @static
|
|
*/
|
|
static function getMinServerVersion()
|
|
{
|
|
return FileMaker_Implementation::getMinServerVersion();
|
|
}
|
|
|
|
/**
|
|
* FileMaker object constructor.
|
|
*
|
|
* If you want to use the constructor without specifying all the
|
|
* parameters, pass in NULL for the parameters you want to omit.
|
|
* For example, to specify only the database name, username, and
|
|
* password, but omit the hostspec, call the constructor as follows:
|
|
*
|
|
* <samp>
|
|
* new FileMaker('DatabaseName', NULL, 'username', 'password');
|
|
* </samp>
|
|
*
|
|
* @param string $database Name of the database to connect to.
|
|
* @param string $hostspec Hostspec of web server in FileMaker Server
|
|
* deployment. Defaults to http://localhost, if set to NULL.
|
|
* @param string $username Account name to log into database.
|
|
* @param string $password Password for account.
|
|
*/
|
|
function FileMaker($database = NULL, $hostspec = NULL, $username = NULL, $password = NULL)
|
|
{
|
|
$this->_impl = new FileMaker_Implementation($database, $hostspec, $username, $password);
|
|
}
|
|
|
|
/**
|
|
* Sets a property to a new value for all API calls.
|
|
*
|
|
* @param string $prop Name of the property to set.
|
|
* @param string $value Property's new value.
|
|
*/
|
|
function setProperty($prop, $value)
|
|
{
|
|
$this->_impl->setProperty($prop, $value);
|
|
}
|
|
|
|
/**
|
|
* Returns the current value of a property.
|
|
*
|
|
* @param string $prop Name of the property.
|
|
*
|
|
* @return string Property's current value.
|
|
*/
|
|
function getProperty($prop)
|
|
{
|
|
return $this->_impl->getProperty($prop);
|
|
}
|
|
|
|
/**
|
|
* Returns an associative array of property name => property value for
|
|
* all current properties and their current values.
|
|
*
|
|
* This array enables PHP object introspection and debugging when necessary.
|
|
*
|
|
* @return array All current properties.
|
|
*/
|
|
function getProperties()
|
|
{
|
|
return $this->_impl->getProperties();
|
|
}
|
|
|
|
/**
|
|
* Associates a PEAR Log object with the API for logging requests
|
|
* and responses.
|
|
*
|
|
* @param Log &$logger PEAR Log object.
|
|
*/
|
|
function setLogger(&$logger)
|
|
{
|
|
$this->_impl->setLogger($logger);
|
|
}
|
|
|
|
/**
|
|
* Creates a new FileMaker_Command_Add object.
|
|
*
|
|
* @param string $layout Layout to add a record to.
|
|
* @param array $values Associative array of field name => value pairs.
|
|
* To set field repetitions, use a numerically indexed array for
|
|
* the value of a field, with the numeric keys corresponding to the
|
|
* repetition number to set.
|
|
*
|
|
* @return FileMaker_Command_Add New Add command object.
|
|
*/
|
|
function &newAddCommand($layout, $values = array())
|
|
{
|
|
return $this->_impl->newAddCommand($layout, $values);
|
|
}
|
|
|
|
/**
|
|
* Creates a new FileMaker_Command_Edit object.
|
|
*
|
|
* @param string $layout Layout that the record is part of.
|
|
* @param string $recordId ID of the record to edit.
|
|
* @param array $updatedValues Associative array of field name => value
|
|
* pairs that contain the updated field values. To set field
|
|
* repetitions, use a numerically indexed array for the value of a
|
|
* field, with the numeric keys corresponding to the repetition
|
|
* number to set.
|
|
*
|
|
* @return FileMaker_Command_Edit New Edit command object.
|
|
*/
|
|
function &newEditCommand($layout, $recordId, $updatedValues = array())
|
|
{
|
|
return $this->_impl->newEditCommand($layout, $recordId, $updatedValues);
|
|
}
|
|
|
|
/**
|
|
* Creates a new FileMaker_Command_Delete object.
|
|
*
|
|
* @param string $layout Layout to delete record from.
|
|
* @param string $recordId ID of the record to delete.
|
|
*
|
|
* @return FileMaker_Command_Delete New Delete command object.
|
|
*/
|
|
function &newDeleteCommand($layout, $recordId)
|
|
{
|
|
return $this->_impl->newDeleteCommand($layout, $recordId);
|
|
}
|
|
|
|
/**
|
|
* Creates a new FileMaker_Command_Duplicate object.
|
|
*
|
|
* @param string $layout Layout that the record to duplicate is in.
|
|
* @param string $recordId ID of the record to duplicate.
|
|
*
|
|
* @return FileMaker_Command_Duplicate New Duplicate command object.
|
|
*/
|
|
function &newDuplicateCommand($layout, $recordId)
|
|
{
|
|
return $this->_impl->newDuplicateCommand($layout, $recordId);
|
|
}
|
|
|
|
/**
|
|
* Creates a new FileMaker_Command_Find object.
|
|
*
|
|
* @param string $layout Layout to find records in.
|
|
*
|
|
* @return FileMaker_Command_Find New Find command object.
|
|
*/
|
|
function &newFindCommand($layout)
|
|
{
|
|
return $this->_impl->newFindCommand($layout);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Creates a new FileMaker_Command_CompoundFind object.
|
|
*
|
|
* @param string $layout Layout to find records in.
|
|
*
|
|
* @return FileMaker_Command_CompoundFind New Compound Find Set command
|
|
* object.
|
|
*/
|
|
function &newCompoundFindCommand($layout)
|
|
{
|
|
return $this->_impl->newCompoundFindCommand($layout);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Creates a new FileMaker_Command_FindRequest object. Add one or more
|
|
* Find Request objects to a {@link FileMaker_Command_CompoundFind} object,
|
|
* then execute the Compound Find command.
|
|
*
|
|
* @param string $layout Layout to find records in.
|
|
*
|
|
* @return FileMaker_Command_FindRequest New Find Request command object.
|
|
*/
|
|
function &newFindRequest($layout)
|
|
{
|
|
return $this->_impl->newFindRequest($layout);
|
|
}
|
|
|
|
/**
|
|
* Creates a new FileMaker_Command_FindAny object.
|
|
*
|
|
* @param string $layout Layout to find one random record from.
|
|
*
|
|
* @return FileMaker_Command_FindAny New Find Any command object.
|
|
*/
|
|
function &newFindAnyCommand($layout)
|
|
{
|
|
return $this->_impl->newFindAnyCommand($layout);
|
|
}
|
|
|
|
/**
|
|
* Creates a new FileMaker_Command_FindAll object.
|
|
*
|
|
* @param string $layout Layout to find all records in.
|
|
*
|
|
* @return FileMaker_Command_FindAll New Find All command object.
|
|
*/
|
|
function &newFindAllCommand($layout)
|
|
{
|
|
return $this->_impl->newFindAllCommand($layout);
|
|
}
|
|
|
|
/**
|
|
* Creates a new FileMaker_Command_PerformScript object.
|
|
*
|
|
* @param string $layout Layout to use for script context.
|
|
* @param string $scriptName Name of the ScriptMaker script to run.
|
|
* @param string $scriptParameters Any parameters to pass to the script.
|
|
*
|
|
* @return FileMaker_Command_PerformScript New Perform Script command
|
|
* object.
|
|
*/
|
|
function &newPerformScriptCommand($layout, $scriptName, $scriptParameters = null)
|
|
{
|
|
return $this->_impl->newPerformScriptCommand($layout, $scriptName, $scriptParameters);
|
|
}
|
|
|
|
/**
|
|
* Creates a new FileMaker_Record object.
|
|
*
|
|
* This method does not save the new record to the database.
|
|
* The record is not created on the Database Server until you call
|
|
* this record's commit() method. You must specify a layout name,
|
|
* and you can optionally specify an array of field values.
|
|
* Individual field values can also be set in the new record object.
|
|
*
|
|
*
|
|
* @param string $layout Layout to create a new record for.
|
|
* @param array $fieldValues Initial values for the new record's fields.
|
|
*
|
|
* @return FileMaker_Record New Record object.
|
|
*/
|
|
function &createRecord($layout, $fieldValues = array())
|
|
{
|
|
return $this->_impl->createRecord($layout, $fieldValues);
|
|
}
|
|
|
|
/**
|
|
* Returns a single FileMaker_Record object matching the given
|
|
* layout and record ID, or a FileMaker_Error object, if this operation
|
|
* fails.
|
|
*
|
|
* @param string $layout Layout that $recordId is in.
|
|
* @param string $recordId ID of the record to get.
|
|
*
|
|
* @return FileMaker_Record|FileMaker_Error Record or Error object.
|
|
*/
|
|
function &getRecordById($layout, $recordId)
|
|
{
|
|
return $this->_impl->getRecordById($layout, $recordId);
|
|
}
|
|
|
|
/**
|
|
* Returns a Layout object that describes the specified layout.
|
|
*
|
|
* @param string $layout Name of the layout to describe.
|
|
*
|
|
* @return FileMaker_Layout|FileMaker_Error Layout or Error object.
|
|
*/
|
|
function &getLayout($layout)
|
|
{
|
|
return $this->_impl->getLayout($layout);
|
|
}
|
|
|
|
/**
|
|
* Returns an array of databases that are available with the current
|
|
* server settings and the current user name and password
|
|
* credentials.
|
|
*
|
|
* @return array|FileMaker_Error List of database names or an Error object.
|
|
*/
|
|
function listDatabases()
|
|
{
|
|
return $this->_impl->listDatabases();
|
|
}
|
|
|
|
/**
|
|
* Returns an array of ScriptMaker scripts from the current database that
|
|
* are available with the current server settings and the current user
|
|
* name and password credentials.
|
|
*
|
|
* @return array|FileMaker_Error List of script names or an Error object.
|
|
*/
|
|
function listScripts()
|
|
{
|
|
return $this->_impl->listScripts();
|
|
}
|
|
|
|
/**
|
|
* Returns an array of layouts from the current database that are
|
|
* available with the current server settings and the current
|
|
* user name and password credentials.
|
|
*
|
|
* @return array|FileMaker_Error List of layout names or an Error object.
|
|
*/
|
|
function listLayouts()
|
|
{
|
|
return $this->_impl->listLayouts();
|
|
}
|
|
|
|
/**
|
|
* Returns the data for the specified container field.
|
|
* Pass in a URL string that represents the file path for the container
|
|
* field contents. For example, get the image data from a container field
|
|
* named 'Cover Image'. For a FileMaker_Record object named $record,
|
|
* URL-encode the path returned by the getField() method. For example:
|
|
*
|
|
* <samp>
|
|
* <IMG src="img.php?-url=<?php echo urlencode($record->getField('Cover Image')); ?>">
|
|
* </samp>
|
|
*
|
|
* Then as shown below in a line from img.php, pass the URL into
|
|
* getContainerData() for the FileMaker object named $fm:
|
|
*
|
|
* <samp>
|
|
* echo $fm->getContainerData($_GET['-url']);
|
|
* </samp>
|
|
*
|
|
* @param string $url URL of the container field contents to get.
|
|
*
|
|
* @return string Raw field data|FileMaker_Error if remote container field.
|
|
*/
|
|
function getContainerData($url)
|
|
{
|
|
return $this->_impl->getContainerData($url);
|
|
}
|
|
|
|
/**
|
|
* Returns the fully qualified URL for the specified container field.
|
|
* Pass in a URL string that represents the file path for the container
|
|
* field contents. For example, get the URL for a container field
|
|
* named 'Cover Image'. For example:
|
|
*
|
|
* <samp>
|
|
* <IMG src="<?php echo $fm->getContainerDataURL($record->getField('Cover Image')); ?>">
|
|
* </samp>
|
|
*
|
|
* @param string $url URL of the container field contents to get.
|
|
*
|
|
* @return string Fully qualified URL to container field contents
|
|
*/
|
|
function getContainerDataURL($url)
|
|
{
|
|
return $this->_impl->getContainerDataURL($url);
|
|
}
|
|
}
|