/** * Embed XMP metadata into representation media. Embedding is performed on a copy of the representation media and placed * into the system tmp directory. The original media is never modified. * * @param BaseModel $po_object ca_objects instance to pull metadata from for embedding * @param BaseModel $po_representation ca_object_representations instance to pull metadata from for embedding * @param string $ps_version Version of media to embed into. If omitted "original" version is used. * @return string Path to copy of media with embedded metadata. False is returned in the embedding failed. */ function caEmbedMetadataIntoRepresentation($po_object, $po_representation, $ps_version = "original") { if (!($vs_media_metadata_config = $po_representation->getAppConfig()->get('media_metadata'))) { return false; } $o_metadata_config = Configuration::load($vs_media_metadata_config); $vs_mimetype = $po_representation->getMediaInfo('media', $ps_version, 'MIMETYPE'); if (!in_array($vs_mimetype, array('image/jpeg'))) { return false; } // Don't try to embed in files other than JPEGs $vs_filepath = $po_representation->getMediaPath('media', $ps_version); if (!file_exists($vs_filepath)) { return false; } $va_mappings = $o_metadata_config->getAssoc('export_mappings'); $o_xmp = new XMPParser(); copy($vs_filepath, $vs_tmp_filepath = caGetTempDirPath() . "/" . time() . md5($vs_filepath)); $o_xmp->parse($vs_tmp_filepath); $o_xmp->initMetadata(); if (is_object($po_object) && isset($va_mappings['ca_objects']) && is_array($va_mappings['ca_objects'])) { $va_mapping = $va_mappings['ca_objects']; $vs_type = $po_object->getTypeCode(); if (isset($va_mapping[$vs_type]) && is_array($va_mapping[$vs_type])) { $va_mapping = $va_mapping[$vs_type]; } else { if (isset($va_mapping['__default__']) && is_array($va_mapping['__default__'])) { $va_mapping = $va_mapping['__default__']; } else { return null; } } if (is_array($va_mapping)) { foreach ($va_mapping as $vs_xmp => $va_ca) { $va_tmp = explode(':', $vs_xmp); if (sizeof($va_tmp) > 1) { $vs_xmp = $va_tmp[1]; } foreach ($va_ca as $vs_ca => $va_opts) { if (preg_match('!^static:!', $vs_ca)) { $vs_val = preg_replace('!^static:!', '', $vs_ca); } else { $vs_val = $po_object->get($vs_ca, $va_opts); } if ($vs_val) { $o_xmp->set($vs_xmp, $vs_val); } } } } } if (is_object($po_representation) && isset($va_mappings['ca_object_representations']) && is_array($va_mappings['ca_object_representations'])) { $va_mapping = $va_mappings['ca_object_representations']; $vs_type = $po_representation->getTypeCode(); if (isset($va_mapping[$vs_type]) && is_array($va_mapping[$vs_type])) { $va_mapping = $va_mapping[$vs_type]; } else { if (isset($va_mapping['__default__']) && is_array($va_mapping['__default__'])) { $va_mapping = $va_mapping['__default__']; } else { return null; } } if (is_array($va_mapping)) { foreach ($va_mapping as $vs_xmp => $va_ca) { $va_tmp = explode(':', $vs_xmp); if (sizeof($va_tmp) > 1) { $vs_xmp = $va_tmp[1]; } foreach ($va_ca as $vs_ca => $va_opts) { if (preg_match('!^static:!', $vs_ca)) { $vs_val = preg_replace('!^static:!', '', $vs_ca); } else { $vs_val = $po_representation->get($vs_ca, $va_opts); } if ($vs_val) { $o_xmp->set($vs_xmp, $vs_val); } } } } } $o_xmp->write(); return $vs_tmp_filepath; }
/** * * * @param BaseModel $pt_subject * @param string $ps_related_table * @param array $pa_bundle_settings * @param array $pa_options Supported options are: * * * @return string */ function caGetBundleDisplayTemplate($pt_subject, $ps_related_table, $pa_bundle_settings, $pa_options = null) { $vs_template = null; if (strlen(trim($pa_bundle_settings['display_template']))) { $vs_template = trim($pa_bundle_settings['display_template']); } // If no display_template set try to get a default out of the app.conf file if (!$vs_template) { if (is_array($va_lookup_settings = $pt_subject->getAppConfig()->getList("{$ps_related_table}_lookup_settings"))) { if (!($vs_lookup_delimiter = $pt_subject->getAppConfig()->get("{$ps_related_table}_lookup_delimiter"))) { $vs_lookup_delimiter = ''; } $vs_template = join($vs_lookup_delimiter, $va_lookup_settings); } } // If no app.conf default then just show preferred_labels if (!$vs_template) { $vs_template = "^preferred_labels"; } return $vs_template; }
/** * Called just after record is deleted. Individual editor controllers can override this to implement their * own post-deletion cleanup logic. * * @param BaseModel $pt_subject Model instance of row that was deleted * @return bool True if post-deletion cleanup was successful, false if not */ protected function _checkAccess($pt_subject, $pa_options = null) { // // Is record deleted? // if ($pt_subject->hasField('deleted') && $pt_subject->get('deleted')) { if (!caGetOption('dontRedirectOnDelete', $pa_options, false)) { $this->response->setRedirect($this->request->config->get('error_display_url') . '/n/2550?r=' . urlencode($this->request->getFullUrlPath())); } return false; } // // Is record of correct type? // $va_restrict_to_types = null; if ($pt_subject->getAppConfig()->get('perform_type_access_checking')) { $va_restrict_to_types = caGetTypeRestrictionsForUser($this->ops_table_name, array('access' => __CA_BUNDLE_ACCESS_READONLY__)); } if (is_array($va_restrict_to_types) && ($pt_subject->get('type_id') && ($pt_subject->getPrimaryKey() && !in_array($pt_subject->get('type_id'), $va_restrict_to_types)))) { $this->response->setRedirect($this->request->config->get('error_display_url') . '/n/2560?r=' . urlencode($this->request->getFullUrlPath())); return false; } // // Is record from correct source? // $va_restrict_to_sources = null; if ($pt_subject->getAppConfig()->get('perform_source_access_checking') && $pt_subject->hasField('source_id')) { if (is_array($va_restrict_to_sources = caGetSourceRestrictionsForUser($this->ops_table_name, array('access' => __CA_BUNDLE_ACCESS_READONLY__)))) { if (!$pt_subject->get('source_id') || $pt_subject->get('source_id') && !in_array($pt_subject->get('source_id'), $va_restrict_to_sources) || strlen($vn_source_id = $this->request->getParameter('source_id', pInteger)) && !in_array($vn_source_id, $va_restrict_to_sources)) { $pt_subject->set('source_id', $pt_subject->getDefaultSourceID(array('request' => $this->request))); } if (is_array($va_restrict_to_sources) && !in_array($pt_subject->get('source_id'), $va_restrict_to_sources)) { $this->response->setRedirect($this->request->config->get('error_display_url') . '/n/2562?r=' . urlencode($this->request->getFullUrlPath())); return; } } } // // Does user have access to row? // if ($pt_subject->getAppConfig()->get('perform_item_level_access_checking') && $vn_subject_id) { if ($pt_subject->checkACLAccessForUser($this->request->user) < __CA_BUNDLE_ACCESS_READONLY__) { $this->response->setRedirect($this->request->config->get('error_display_url') . '/n/2580?r=' . urlencode($this->request->getFullUrlPath())); return false; } } return true; }