예제 #1
0
 /**
  * Reprocess media
  */
 public static function reprocess_media($po_opts = null)
 {
     require_once __CA_LIB_DIR__ . "/core/Db.php";
     require_once __CA_MODELS_DIR__ . "/ca_object_representations.php";
     $o_db = new Db();
     $t_rep = new ca_object_representations();
     $t_rep->setMode(ACCESS_WRITE);
     $va_mimetypes = ($vs_mimetypes = $po_opts->getOption("mimetypes")) ? explode(",", $vs_mimetypes) : array();
     $va_versions = ($vs_versions = $po_opts->getOption("versions")) ? explode(",", $vs_versions) : array();
     $va_kinds = ($vs_kinds = $po_opts->getOption("kinds")) ? explode(",", $vs_kinds) : array();
     if (!is_array($va_kinds) || !sizeof($va_kinds)) {
         $va_kinds = array('all');
     }
     $va_kinds = array_map('strtolower', $va_kinds);
     if (in_array('all', $va_kinds) || in_array('ca_object_representations', $va_kinds)) {
         if (!($vn_start = (int) $po_opts->getOption('start_id'))) {
             $vn_start = null;
         }
         if (!($vn_end = (int) $po_opts->getOption('end_id'))) {
             $vn_end = null;
         }
         if ($vn_id = (int) $po_opts->getOption('id')) {
             $vn_start = $vn_id;
             $vn_end = $vn_id;
         }
         $va_ids = array();
         if ($vs_ids = (string) $po_opts->getOption('ids')) {
             if (sizeof($va_tmp = explode(",", $vs_ids))) {
                 foreach ($va_tmp as $vn_id) {
                     if ((int) $vn_id > 0) {
                         $va_ids[] = (int) $vn_id;
                     }
                 }
             }
         }
         $vs_sql_where = null;
         $va_params = array();
         if (sizeof($va_ids)) {
             $vs_sql_where = "WHERE representation_id IN (?)";
             $va_params[] = $va_ids;
         } else {
             if ($vn_start > 0 && $vn_end > 0 && $vn_start <= $vn_end || $vn_start > 0 && $vn_end == null) {
                 $vs_sql_where = "WHERE representation_id >= ?";
                 $va_params[] = $vn_start;
                 if ($vn_end) {
                     $vs_sql_where .= " AND representation_id <= ?";
                     $va_params[] = $vn_end;
                 }
             }
         }
         $qr_reps = $o_db->query("\n\t\t\t\t\tSELECT * \n\t\t\t\t\tFROM ca_object_representations \n\t\t\t\t\t{$vs_sql_where}\n\t\t\t\t\tORDER BY representation_id\n\t\t\t\t", $va_params);
         print CLIProgressBar::start($qr_reps->numRows(), _t('Re-processing representation media'));
         while ($qr_reps->nextRow()) {
             $va_media_info = $qr_reps->getMediaInfo('media');
             $vs_original_filename = $va_media_info['ORIGINAL_FILENAME'];
             print CLIProgressBar::next(1, _t("Re-processing %1", $vs_original_filename ? $vs_original_filename . " (" . $qr_reps->get('representation_id') . ")" : $qr_reps->get('representation_id')));
             $vs_mimetype = $qr_reps->getMediaInfo('media', 'original', 'MIMETYPE');
             if (sizeof($va_mimetypes)) {
                 foreach ($va_mimetypes as $vs_mimetype_pattern) {
                     if (!preg_match("!^{$vs_mimetype_pattern}!", $vs_mimetype)) {
                         continue 2;
                     }
                 }
             }
             $t_rep->load($qr_reps->get('representation_id'));
             $t_rep->set('media', $qr_reps->getMediaPath('media', 'original'), array('original_filename' => $vs_original_filename));
             if (sizeof($va_versions)) {
                 $t_rep->update(array('updateOnlyMediaVersions' => $va_versions));
             } else {
                 $t_rep->update();
             }
             if ($t_rep->numErrors()) {
                 CLIUtils::addError(_t("Error processing representation media: %1", join('; ', $t_rep->getErrors())));
             }
         }
         print CLIProgressBar::finish();
     }
     if (in_array('all', $va_kinds) || in_array('ca_attributes', $va_kinds)) {
         // get all Media elements
         $va_elements = ca_metadata_elements::getElementsAsList(false, null, null, true, false, true, array(16));
         // 16=media
         if (is_array($va_elements) && sizeof($va_elements)) {
             if (is_array($va_element_ids = caExtractValuesFromArrayList($va_elements, 'element_id', array('preserveKeys' => false))) && sizeof($va_element_ids)) {
                 $qr_c = $o_db->query("\n\t\t\t\t\t\t\tSELECT count(*) c \n\t\t\t\t\t\t\tFROM ca_attribute_values\n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\telement_id in (?)\n\t\t\t\t\t\t", $va_element_ids);
                 if ($qr_c->nextRow()) {
                     $vn_count = $qr_c->get('c');
                 } else {
                     $vn_count = 0;
                 }
                 print CLIProgressBar::start($vn_count, _t('Re-processing attribute media'));
                 foreach ($va_elements as $vs_element_code => $va_element_info) {
                     $qr_vals = $o_db->query("SELECT value_id FROM ca_attribute_values WHERE element_id = ?", (int) $va_element_info['element_id']);
                     $va_vals = $qr_vals->getAllFieldValues('value_id');
                     foreach ($va_vals as $vn_value_id) {
                         $t_attr_val = new ca_attribute_values($vn_value_id);
                         if ($t_attr_val->getPrimaryKey()) {
                             $t_attr_val->setMode(ACCESS_WRITE);
                             $t_attr_val->useBlobAsMediaField(true);
                             $va_media_info = $t_attr_val->getMediaInfo('value_blob');
                             $vs_original_filename = is_array($va_media_info) ? $va_media_info['ORIGINAL_FILENAME'] : '';
                             print CLIProgressBar::next(1, _t("Re-processing %1", $vs_original_filename ? $vs_original_filename . " ({$vn_value_id})" : $vn_value_id));
                             $t_attr_val->set('value_blob', $t_attr_val->getMediaPath('value_blob', 'original'), array('original_filename' => $vs_original_filename));
                             $t_attr_val->update();
                             if ($t_attr_val->numErrors()) {
                                 CLIUtils::addError(_t("Error processing attribute media: %1", join('; ', $t_attr_val->getErrors())));
                             }
                         }
                     }
                 }
                 print CLIProgressBar::finish();
             }
         }
     }
     return true;
 }
예제 #2
0
 public static function reload_service_values($po_opts = null)
 {
     $va_infoservice_elements = ca_metadata_elements::getElementsAsList(false, null, null, true, false, false, array(__CA_ATTRIBUTE_VALUE_INFORMATIONSERVICE__));
     $o_db = new Db();
     foreach ($va_infoservice_elements as $va_element) {
         $qr_values = $o_db->query("\n\t\t\t\t\tSELECT * FROM ca_attribute_values\n\t\t\t\t\tWHERE element_id = ?\n\t\t\t\t", $va_element['element_id']);
         print CLIProgressBar::start($qr_values->numRows(), "Reloading values for element code " . $va_element['element_code']);
         $t_value = new ca_attribute_values();
         while ($qr_values->nextRow()) {
             $o_val = new InformationServiceAttributeValue($qr_values->getRow());
             $vs_uri = $o_val->getUri();
             print CLIProgressBar::next();
             // inc before first continuation point
             if (!$vs_uri || !strlen($vs_uri)) {
                 continue;
             }
             if (!$t_value->load($qr_values->get('value_id'))) {
                 continue;
             }
             $t_value->editValue($vs_uri);
             if ($t_value->numErrors() > 0) {
                 print _t('There were errors updating an attribute row: ') . join(' ', $t_value->getErrors());
             }
         }
         print CLIProgressBar::finish();
     }
     return true;
 }