Пример #1
0
/**
 * 
 *
 * @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');
}
Пример #2
0
 /**
  * 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;
 }
Пример #3
0
 /**
  * 
  */
 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);
 }
Пример #4
0
 /**
  *
  */
 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;
 }
Пример #5
0
 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');
 }