/** * * * @param RequestHTTP $po_request * @param array $pa_options * @param array $pa_additional_display_options * @return string HTML output */ function caRepresentationViewerHTMLBundle($po_data, $po_request, $pa_options = null, $pa_additional_display_options = null) { $va_access_values = isset($pa_options['access']) && is_array($pa_options['access']) ? $pa_options['access'] : array(); $vs_display_type = isset($pa_options['display']) && $pa_options['display'] ? $pa_options['display'] : 'media_overlay'; $vs_container_dom_id = isset($pa_options['containerID']) && $pa_options['containerID'] ? $pa_options['containerID'] : null; $vn_object_id = isset($pa_options['object_id']) && $pa_options['object_id'] ? $pa_options['object_id'] : null; $vn_item_id = isset($pa_options['item_id']) && $pa_options['item_id'] ? $pa_options['item_id'] : null; $vn_order_item_id = isset($pa_options['order_item_id']) && $pa_options['order_item_id'] ? $pa_options['order_item_id'] : null; $vb_media_editor = isset($pa_options['mediaEditor']) && $pa_options['mediaEditor'] ? true : false; $vb_no_controls = isset($pa_options['noControls']) && $pa_options['noControls'] ? true : false; $vn_item_id = isset($pa_options['item_id']) && $pa_options['item_id'] ? $pa_options['item_id'] : null; $t_object = new ca_objects($vn_object_id); //if (!$t_object->getPrimaryKey()) { return false; } if (!$po_data->getPrimaryKey() && $t_object->getPrimaryKey() && method_exists($po_data, 'load')) { $po_data->load($t_object->getPrimaryRepresentationID(array('checkAccess' => $va_access_values))); } $o_view = new View($po_request, $po_request->getViewsDirectoryPath() . '/bundles/'); $t_set_item = new ca_set_items(); if ($vn_item_id) { $t_set_item->load($vn_item_id); } $t_order_item = new ca_commerce_order_items(); if ($vn_order_item_id) { $t_order_item->load($vn_order_item_id); } $o_view->setVar('containerID', $vs_container_dom_id); $o_view->setVar('t_object_representation', $po_data); if (($vn_representation_id = $po_data->getPrimaryKey()) && (!sizeof($va_access_values) || in_array($po_data->get('access'), $va_access_values))) { // check rep access $va_rep_display_info = caGetMediaDisplayInfo($vs_display_type, $po_data->getMediaInfo('media', 'INPUT', 'MIMETYPE')); $va_rep_display_info['poster_frame_url'] = $po_data->getMediaUrl('media', $va_rep_display_info['poster_frame_version']); if (method_exists($po_data, 'numFiles')) { $o_view->setVar('num_multifiles', $po_data->numFiles()); } if (isset($pa_options['use_book_viewer'])) { $va_rep_display_info['use_book_viewer'] = (bool) $pa_options['use_book_viewer']; } $o_view->setVar('display_type', $vs_display_type); if (is_array($pa_additional_display_options)) { $va_rep_display_info = array_merge($va_rep_display_info, $pa_additional_display_options); } $o_view->setVar('display_options', $va_rep_display_info); $o_view->setVar('representation_id', $vn_representation_id); $o_view->setVar('t_object_representation', $po_data); $o_view->setVar('versions', $va_versions = $po_data->getMediaVersions('media')); $t_media = new Media(); $o_view->setVar('version_type', $t_media->getMimetypeTypename($po_data->getMediaInfo('media', 'original', 'MIMETYPE'))); if ($t_object->getPrimaryKey()) { $o_view->setVar('reps', $va_reps = $t_object->getRepresentations(array('icon'), null, array("return_with_access" => $va_access_values))); $vn_next_rep = $vn_prev_rep = null; $va_rep_list = array_values($va_reps); foreach ($va_rep_list as $vn_i => $va_rep) { if ($va_rep['representation_id'] == $vn_representation_id) { if (isset($va_rep_list[$vn_i - 1])) { $vn_prev_rep = $va_rep_list[$vn_i - 1]['representation_id']; } if (isset($va_rep_list[$vn_i + 1])) { $vn_next_rep = $va_rep_list[$vn_i + 1]['representation_id']; } $o_view->setVar('representation_index', $vn_i + 1); } } $o_view->setVar('previous_representation_id', $vn_prev_rep); $o_view->setVar('next_representation_id', $vn_next_rep); } $ps_version = $po_request->getParameter('version', pString); if (!in_array($ps_version, $va_versions)) { if (!($ps_version = $va_rep_display_info['display_version'])) { $ps_version = null; } } $o_view->setVar('version', $ps_version); $o_view->setVar('version_info', $po_data->getMediaInfo('media', $ps_version)); $o_view->setVar('t_object', $t_object); $o_view->setVar('t_set_item', $t_set_item); $o_view->setVar('t_order_item', $t_order_item); $o_view->setVar('use_media_editor', $vb_media_editor); $o_view->setVar('noControls', $vb_no_controls); } return $o_view->render('representation_viewer_html.php'); }
/** * Download all media attached to specified object (not necessarily open for editing) * Includes all representation media attached to the specified object + any media attached to oter * objects in the same object hierarchy as the specified object. Used by the book viewer interfacce to * initiate a download. */ public function DownloadMedia() { if (!caObjectsDisplayDownloadLink($this->request)) { $this->postError(1100, _t('Cannot download media'), 'DetailController->DownloadMedia'); return; } $pn_object_id = $this->request->getParameter('object_id', pInteger); $t_object = new ca_objects($pn_object_id); if (!($vn_object_id = $t_object->getPrimaryKey())) { return; } $ps_version = $this->request->getParameter('version', pString); if (!$ps_version) { $ps_version = 'original'; } $this->view->setVar('version', $ps_version); $va_ancestor_ids = $t_object->getHierarchyAncestors(null, array('idsOnly' => true, 'includeSelf' => true)); if ($vn_parent_id = array_pop($va_ancestor_ids)) { $t_object->load($vn_parent_id); array_unshift($va_ancestor_ids, $vn_parent_id); } $va_child_ids = $t_object->getHierarchyChildren(null, array('idsOnly' => true)); foreach ($va_ancestor_ids as $vn_id) { array_unshift($va_child_ids, $vn_id); } $vn_c = 1; $va_file_names = array(); $va_file_paths = array(); foreach ($va_child_ids as $vn_object_id) { $t_object = new ca_objects($vn_object_id); if (!$t_object->getPrimaryKey()) { continue; } $va_reps = $t_object->getRepresentations(array($ps_version)); $vs_idno = $t_object->get('idno'); foreach ($va_reps as $vn_representation_id => $va_rep) { $va_rep_info = $va_rep['info'][$ps_version]; $vs_idno_proc = preg_replace('![^A-Za-z0-9_\\-]+!', '_', $vs_idno); switch ($this->request->user->getPreference('downloaded_file_naming')) { case 'idno': $vs_file_name = $vs_idno_proc . '_' . $vn_c . '.' . $va_rep_info['EXTENSION']; break; case 'idno_and_version': $vs_file_name = $vs_idno_proc . '_' . $ps_version . '_' . $vn_c . '.' . $va_rep_info['EXTENSION']; break; case 'idno_and_rep_id_and_version': $vs_file_name = $vs_idno_proc . '_representation_' . $vn_representation_id . '_' . $ps_version . '.' . $va_rep_info['EXTENSION']; break; case 'original_name': default: if ($va_rep['info']['original_filename']) { $va_tmp = explode('.', $va_rep['info']['original_filename']); if (sizeof($va_tmp) > 1) { if (strlen($vs_ext = array_pop($va_tmp)) < 3) { $va_tmp[] = $vs_ext; } } $vs_file_name = join('_', $va_tmp); } else { $vs_file_name = $vs_idno_proc . '_representation_' . $vn_representation_id . '_' . $ps_version; } if (isset($va_file_names[$vs_file_name . '.' . $va_rep_info['EXTENSION']])) { $vs_file_name .= "_{$vn_c}"; } $vs_file_name .= '.' . $va_rep_info['EXTENSION']; break; } $va_file_names[$vs_file_name] = true; $this->view->setVar('version_download_name', $vs_file_name); // // Perform metadata embedding $t_rep = new ca_object_representations($va_rep['representation_id']); if (!($vs_path = caEmbedMetadataIntoRepresentation($t_object, $t_rep, $ps_version))) { $vs_path = $t_rep->getMediaPath('media', $ps_version); } $va_file_paths[$vs_path] = $vs_file_name; $vn_c++; } } if (sizeof($va_file_paths) > 1) { if (!($vn_limit = ini_get('max_execution_time'))) { $vn_limit = 30; } set_time_limit($vn_limit * 2); $o_zip = new ZipFile(); foreach ($va_file_paths as $vs_path => $vs_name) { $o_zip->addFile($vs_path, $vs_name, null, array('compression' => 0)); // don't try to compress } $this->view->setVar('archive_path', $vs_path = $o_zip->output(ZIPFILE_FILEPATH)); $this->view->setVar('archive_name', preg_replace('![^A-Za-z0-9\\.\\-]+!', '_', $t_object->get('idno')) . '.zip'); $this->response->sendHeaders(); $vn_rc = $this->render('Details/object_download_media_binary.php'); $this->response->sendContent(); if ($vs_path) { unlink($vs_path); } } else { foreach ($va_file_paths as $vs_path => $vs_name) { $this->view->setVar('archive_path', $vs_path); $this->view->setVar('archive_name', $vs_name); } $this->response->sendHeaders(); $vn_rc = $this->render('Details/object_download_media_binary.php'); $this->response->sendContent(); } return $vn_rc; }
/** * */ public function media() { if (!is_object($t_entity = $this->_checkEntity())) { return $t_entity; } $vn_id = $t_entity->getPrimaryKey(); $t_list = new ca_lists(); $vn_exhibition_audio_type_id = $t_list->getItemIDFromList('object_types', 'MemEx_Audio'); $vs_filter = $this->opo_request->getParameter('filter', pString); if (!in_array($vs_filter, array('video', 'audio', 'image', 'pdf'))) { $vs_filter = null; } $t_object = new ca_objects(); $va_data = array('id' => $vn_id); $from = $this->opo_request->getParameter('from', pString); $until = $this->opo_request->getParameter('until', pString); if (!$until) { $until = date('c'); } $vs_range = $from && $until ? self::utcToDb($from) . ' to ' . self::utcToDb($until) : null; $o_tep = new TimeExpressionParser(); $vb_parsed_date = false; if ($vs_range) { if ($vb_parsed_date = $o_tep->parse($vs_range)) { $va_range = $o_tep->getUnixTimestamps(); } } $t_rep = new ca_object_representations(); $t_list = new ca_lists(); $va_pub_target_values = $t_list->getItemsForList('object_publication_targets', array('extractValuesByUserLocale' => true)); $va_audio_target_values = $t_list->getItemsForList('audio_publication_targets', array('extractValuesByUserLocale' => true)); $vn_memorial_exhibition_audio_type_id = $t_list->getItemIDFromList('object_types', 'MemEx_Audio'); $vn_publish_annotation_id = $t_list->getItemIDFromList('annotation_publication_targets', 'interactive_tables'); $vn_publish_rep = $t_list->getItemIDFromList("memex_status", "publish"); $va_objects = $t_entity->getRelatedItems('ca_objects'); foreach ($va_objects as $vn_relation_id => $va_object_info) { $va_timestamp = $t_object->getLastChangeTimestamp($va_object_info['object_id']); if ($vb_parsed_date && ($va_timestamp['timestamp'] <= $va_range['start'] || $va_timestamp['timestamp'] >= $va_range['end'])) { continue; } if ($t_object->load($va_object_info['object_id'])) { $va_reps = $t_object->getRepresentations(array("preview", "preview170", "icon", "small", "medium", "large", "large_png", "original", "h264_hi", "mp3")); if (!is_array($va_reps) || !sizeof($va_reps)) { continue; } $va_filtered_reps = array(); foreach ($va_reps as $vn_i => $va_rep) { $va_tmp = explode('/', $vs_mimetype = $va_rep['info']['original']['MIMETYPE']); if ($vs_filter && ($va_tmp[0] != $vs_filter && $va_tmp[1] != $vs_filter)) { continue; } $vb_is_audio = false; if ($t_object->get('type_id') == $vn_memorial_exhibition_audio_type_id) { $va_pub_targets = $t_object->get('ca_objects.audio_publication_targets', array('returnAsArray' => true, 'convertCodesToDisplayText' => false)); $vb_is_audio = true; } else { $va_pub_targets = $t_object->get('ca_objects.object_publication_targets', array('returnAsArray' => true, 'convertCodesToDisplayText' => false)); } if (!sizeof($va_pub_targets)) { continue; } if (!$t_rep->load($va_rep['representation_id'])) { continue; } if ($t_rep->get("ca_object_representations.memex_status", array('convertCodesToDisplayText' => false)) != $vn_publish_rep) { continue; } // reset filesize property to reflect size of version, not size of original foreach ($va_reps[$vn_i]['paths'] as $vs_version => $vs_path) { $va_reps[$vn_i]['info'][$vs_version]['PROPERTIES']['filesize'] = @filesize($va_reps[$vn_i]['paths'][$vs_version]); } unset($va_reps[$vn_i]['paths']); unset($va_reps[$vn_i]['tags']); unset($va_reps[$vn_i]['media']); unset($va_reps[$vn_i]['media_metadata']); unset($va_reps[$vn_i]['is_primary']); unset($va_reps[$vn_i]['name']); unset($va_reps[$vn_i]['status']); unset($va_reps[$vn_i]['locale_id']); unset($va_reps[$vn_i]['type_id']); $va_reps[$vn_i]['lastupdate_timestamp'] = date('o-m-N', $va_timestamp['timestamp']) . "T" . date('H:i:s', $va_timestamp['timestamp']) . "Z"; //date('c', $va_timestamp['timestamp']); $va_reps[$vn_i]['type_id'] = $vn_type_id = $t_object->get('ca_objects.type_id'); $va_reps[$vn_i]['typename'] = $t_object->getTypeName(); $va_reps[$vn_i]['typecode'] = $t_object->getTypeCode(); $va_targets = array(); foreach ($va_pub_targets as $vn_attr_id => $va_value) { $va_targets[] = $va_pub_target_values[$va_value['object_publication_targets']]['idno'] ? $va_pub_target_values[$va_value['object_publication_targets']]['idno'] : $va_audio_target_values[$va_value['audio_publication_targets']]['idno']; } $va_reps[$vn_i]['publication_targets'] = $va_targets; $va_reps[$vn_i]['title'] = $t_object->get('ca_objects.memex_title'); $va_reps[$vn_i]['credit'] = $t_object->get('ca_objects.memex_credit_line'); $va_reps[$vn_i]['caption'] = $t_object->get('ca_objects.memex_caption'); if ($t_object->get('type_id') == $vn_exhibition_audio_type_id) { $va_reps[$vn_i]['transcript'] = $t_object->get('ca_objects.final_text_inner_chamber'); $va_reps[$vn_i]['attribution'] = $t_object->get('ca_objects.remembrance_attribution'); } if ($va_rep['num_multifiles'] > 0) { $va_pages = $t_rep->getFileList($va_rep['representation_id'], null, null, array('page_preview')); $va_page_urls = array(); foreach ($va_pages as $vn_file_id => $va_file_info) { $va_page_urls[] = $va_file_info['page_preview_url']; } $va_reps[$vn_i]['page_images'] = $va_page_urls; } $va_reps[$vn_i]['clips'] = array(); if (is_array($va_annotations = $t_rep->getAnnotations()) && sizeof($va_annotations)) { foreach ($va_annotations as $vn_index => $va_annotation) { $vn_annotation_id = $va_annotation['annotation_id']; //if ($va_annotation['access'] == 0) { continue; } $t_annotation = new ca_representation_annotations($vn_annotation_id); if ($vn_publish_annotation_id != $t_annotation->get('annotation_publication_targets')) { continue; } // skip ones not marked for publication unset($va_annotation['props']); $va_annotation['description'] = $t_annotation->get('description'); $va_annotation['transcript'] = $t_annotation->get('transcript'); //$va_annotation['mp3'] = $t_annotation->getAppConfig()->get('site_host')."/service.php/ns11mmServices/Victim/getClip/id/{$vn_annotation_id}"; $va_annotation['mp3'] = $t_annotation->getMediaUrl('ca_representation_annotations.preview', 'original'); $va_annotation['md5'] = $t_annotation->getMediaInfo('ca_representation_annotations.preview', 'original', 'MD5'); $va_reps[$vn_i]['clips'][] = $va_annotation; } } $va_filtered_reps[] = $va_reps[$vn_i]; } if (sizeof($va_filtered_reps)) { $va_data['media'][$va_object_info['object_id']] = $va_filtered_reps; } } } return $this->makeResponse($va_data); }
/** * */ public function Download() { $pn_item_id = $this->request->getParameter('item_id', pInteger); $t_item = new ca_commerce_order_items($pn_item_id); $t_order = new ca_commerce_orders($t_item->get('order_id')); $t_transaction = new ca_commerce_transactions($t_order->get('transaction_id')); $o_media = new Media(); if ($t_item->getPrimaryKey() && $t_order->getPrimaryKey()) { // Is the order paid for... if (!in_array($t_order->get('order_status'), array('PROCESSED', 'PROCESSED_AWAITING_DIGITIZATION', 'COMPLETED'))) { $this->notification->addNotification(_t("This order must be processed before you can download items"), __NOTIFICATION_TYPE_ERROR__); $this->Index(); return; } // ... and accessible by this user? if ($t_transaction->get('user_id') != $this->request->getUserID()) { $this->notification->addNotification(_t("You may not download this item"), __NOTIFICATION_TYPE_ERROR__); $this->Index(); return; } // Is this item downloadable? if ($t_item->get('fullfillment_method') != 'DOWNLOAD') { $this->notification->addNotification(_t("This item cannot be downloaded"), __NOTIFICATION_TYPE_ERROR__); $this->Index(); return; } // Which reps, and what versions? $t_object = new ca_objects($t_item->get('object_id')); $va_services_list = array(); if (is_array($va_service_groups = $this->opo_client_services_config->getAssoc("service_groups"))) { foreach ($va_service_groups as $vs_group => $va_services_in_group) { foreach ($va_services_in_group['services'] as $vs_service => $va_service_info) { $va_services_list[$vs_service] = $va_service_info; } } } if (!($vs_version = $va_services_list[$t_item->get('service')]['download_version'])) { $vs_version = 'small'; } $va_reps = $t_object->getRepresentations(array($vs_version)); $va_reps_to_download = $t_item->getRepresentationIDs(); $o_zip = new ZipFile(); $va_files = array(); $vn_size = 0; foreach ($va_reps as $va_rep) { if (!isset($va_reps_to_download[$va_rep['representation_id']]) || !$va_reps_to_download[$va_rep['representation_id']]) { continue; } $va_tmp = explode('.', $va_rep['paths'][$vs_version]); $vs_ext = array_pop($va_tmp); if ($va_rep['original_filename']) { $va_tmp2 = explode(".", $va_rep['original_filename']); if (sizeof($va_tmp2) > 1) { array_pop($va_tmp2); } $vs_filename = join(".", $va_tmp2) . ".{$vs_ext}"; } else { $vs_filename = $t_object->get('idno') . "_" . $va_rep['representation_id'] . ".{$vs_ext}"; } $vn_size += $va_files[$va_rep['paths'][$vs_version]] = filesize($va_rep['paths'][$vs_version]); $o_zip->addFile($va_rep['paths'][$vs_version], $vs_filename, 0, array('compression' => 0)); } $this->view->setVar('zip', $o_zip); $this->view->setVar('version_download_name', date('dmY', $t_order->get('created_on', array('GET_DIRECT_DATE' => true))) . '-' . $t_order->getPrimaryKey()); // Log fulfillment $t_item->logFulfillmentEvent('DOWNLOAD', array('ip_addr' => $_SERVER['REMOTE_ADDR'], 'user_id' => $this->request->getUserID(), 'datetime' => time(), 'user_agent' => $_SERVER['HTTP_USER_AGENT'], 'files' => $va_files, 'size' => $vn_size, 'representation_ids' => $va_reps_to_download)); return $this->render('Account/download_binary.php'); } $this->notification->addNotification(_t("You may not download this"), __NOTIFICATION_TYPE_ERROR__); $this->Index(); return; }
public function BlankWorksheet() { # --- used for back button $pn_occurrence_id = $this->request->getParameter('occurrence_id', pInteger); $this->view->setVar("occurrence_id", $pn_occurrence_id); $t_occurrence = new ca_occurrences($pn_occurrence_id); $pn_relation_id = $this->request->getParameter('relation_id', pInteger); $this->view->setVar("relation_id", $pn_relation_id); $t_objects_x_occurrences = new ca_objects_x_occurrences($pn_relation_id); $t_object = new ca_objects($t_objects_x_occurrences->get("object_id")); # --- get the images $va_reps = $t_object->getRepresentations(array("medium")); $va_images = array(); if (is_array($va_reps)) { foreach ($va_reps as $vn_i => $va_rep) { $va_rep["representation_id"]; $va_images[$va_rep["representation_id"]] = $va_rep["tags"]["medium"]; } } $this->view->setVar("images", $va_images); $t_lists = new ca_lists(); $vn_original_date = $t_lists->getItemIDFromList("date_types", "dateOriginal"); $vs_image_info = "<div style='font-size:11px; font-style:italic;'>" . $t_objects_x_occurrences->get("ca_objects.preferred_labels.name"); if ($va_dates = $t_objects_x_occurrences->get("ca_objects.date", array("returnAsArray" => true))) { foreach ($va_dates as $va_date_info) { if ($va_date_info["dc_dates_types"] == $vn_original_date) { $vs_image_info .= ", " . $va_date_info["dates_value"]; } } } if ($t_objects_x_occurrences->get("ca_objects.repository")) { $vs_image_info .= ", " . $t_objects_x_occurrences->get("ca_objects.repository", array('delimiter' => ', ', 'convertCodesToDisplayText' => true)); } $vs_image_info .= ", " . $t_objects_x_occurrences->get("ca_objects.idno") . "</div>"; $this->view->setVar("image_info", $vs_image_info); # --- try to get the tranlation/transcription for the rep your making the blank worksheet for # --- those fields can be on either the occurrence or ca_object_x_occurrences record $vs_translation = ""; if ($t_occurrence->get("translation")) { $vs_translation = $t_occurrence->get("translation"); } elseif ($t_objects_x_occurrences->get("translation")) { $vs_translation = $t_objects_x_occurrences->get("translation"); } $this->view->setVar("translation", $vs_translation); $vs_transcription = ""; if ($t_occurrence->get("ca_occurrences.transcription")) { $vs_transcription = $t_occurrence->get("ca_occurrences.transcription"); } elseif ($t_objects_x_occurrences->get("ca_objects_x_occurrences.transcription")) { $vs_transcription = $t_objects_x_occurrences->get("ca_objects_x_occurrences.transcription"); } $this->view->setVar("transcription", $vs_transcription); # --- attributes used in worksheets # --- these will be displayed as title and form elements so user can enter their own text $this->view->setVar("worksheet_attributes", $this->opa_worksheet_attributes); $this->render('nysa/customize_worksheet_html.php'); }