From d583e9f87047ba97c68f8c2911a503c12c28ea4f Mon Sep 17 00:00:00 2001 From: Adam Vessey Date: Wed, 30 Jan 2013 18:34:15 -0330 Subject: [PATCH] Basic Entity support. Expose a few fields, which can be substituted in for Tokens (in Rules). --- .../islandora_object.entity_controller.inc | 31 +++++ islandora.info | 1 + islandora.module | 62 ++++++++++ islandora.rules.inc | 115 ++++++++++++++++++ 4 files changed, 209 insertions(+) create mode 100644 includes/islandora_object.entity_controller.inc create mode 100644 islandora.rules.inc diff --git a/includes/islandora_object.entity_controller.inc b/includes/islandora_object.entity_controller.inc new file mode 100644 index 00000000..6f58e723 --- /dev/null +++ b/includes/islandora_object.entity_controller.inc @@ -0,0 +1,31 @@ + t('Islandora Object'), + 'controller class' => 'IslandoraObjectEntityController', + 'fieldable' => FALSE, + 'entity keys' => array( + 'id' => 'id', + 'label' => 'label', + ), + ); + + return $entities; +} + +/** + * Implements hook_entity_property_info(). + * + * Details the tokens which will be available on the given object. + */ +function islandora_entity_property_info() { + $info = array(); + + $p = &$info['islandora_object']['properties']; + + $p['id'] = array( + 'type' => 'text', + 'label' => t('ID'), + 'description' => t('The identifier of the object.'), + ); + $p['label'] = array( + 'type' => 'text', + 'label' => t('Object Label'), + 'description' => t('The label of the object.'), + ); + $p['owner'] = array( + 'type' => 'text', + 'label' => t('Object Owner'), + 'description' => t('The name of the owner of the object.'), + ); + $p['state'] = array( + 'type' => 'text', + 'label' => t('Object State'), + 'description' => t('An initial representing the state of the object.'), + ); + $p['models'] = array( + 'type' => 'list', + 'label' => t('Content Models'), + 'description' => t('The list of content models which the object has.'), + ); + + return $info; +} + diff --git a/islandora.rules.inc b/islandora.rules.inc new file mode 100644 index 00000000..bda999b3 --- /dev/null +++ b/islandora.rules.inc @@ -0,0 +1,115 @@ + array( + 'type' => 'islandora_object', + 'label' => t('Subject'), + 'description' => t('An object of which we should check the ' . + 'relationships (The "subject" of the relationship).'), + ), + 'pred_uri' => array( + 'type' => 'text', + 'label' => t('Predicate URI'), + 'description' => t('The URI namespace to which the predicate belongs.'), + ), + 'pred' => array( + 'type' => 'text', + 'label' => t('Predicate'), + 'description' => t('The predicate of the relationship.'), + ), + 'object' => array( + 'type' => 'text', + 'label' => t('Object'), + 'description' => t('The object of the relationship.'), + 'allow null' => TRUE, + 'default value' => NULL, + ), + 'type' => array( + 'type' => 'integer', + 'label' => t('Object type in the relationship'), + 'description' => t('0=URI, 1=plain literal'), + 'default value' => 0, + ), + ); + + return $to_return; +} + +/** + * Implements hook_rules_condition_info(). + */ +function islandora_rules_condition_info() { + $cond = array(); + + $cond['islandora_object_has_relationship'] = array( + 'label' => t('Check object for a relationship'), + 'group' => t('Islandora'), + 'parameter' => islandora_rules_relationship_parameter_array(), + ); + + return $cond; +} + +/** + * Implements hook_rules_action_info(). + */ +function islandora_rules_action_info() { + $cond = array(); + + $cond['islandora_object_remove_relationship'] = array( + 'label' => t('Remove a relationship from an object'), + 'group' => t('Islandora'), + 'parameter' => islandora_rules_relationship_parameter_array(), + ); + + $cond['islandora_object_add_relationship'] = array( + 'label' => t('Add a relationship to an object'), + 'group' => t('Islandora'), + 'parameter' => islandora_rules_relationship_parameter_array(), + ); + return $cond; +} +/** + * Checks that there is a relationship match on the given object. + * + * Takes a subject (either a FedoraObject or a FedoraDatastream), as well as + * the parameters for FedoraRelsExt::get() or FedoraRelsInt::get(), to try to + * find a match. + * + * @see FedoraRelsExt::get() + */ +function islandora_object_has_relationship($sub, $pred_uri, $pred, $object, $type) { + $relationships = $sub->relationships->get($pred_uri, $pred, $object, $type); + return !empty($relationships); +} + +/** + * Remove a relationship from the given object. + * + * Takes a subject (either a FedoraObject or a FedoraDatastream), as well as + * the parameters for FedoraRelsExt::remove() or FedoraRelsInt::remove(), to + * try to find a match. + * + * @see FedoraRelsExt::get() + */ +function islandora_object_remove_relationship($sub, $pred_uri, $pred, $object, $type) { + $sub->relationships->remove($pred_uri, $pred, $object, $type); +} + +/** + * Add a relationship to the given object. + * + * Takes a subject (either a FedoraObject or a FedoraDatastream), as well as + * the parameters for FedoraRelsExt::add() or FedoraRelsInt::add(), and adds + * the represented relationship. + * + * @see FedoraRelsExt::get() + */ +function islandora_object_add_relationship($sub, $pred_uri, $pred, $object, $type) { + $sub->relationships->add($pred_uri, $pred, $object, $type); +} +