Beispiel #1
0
 /**
  * Remove media present in media directories but not referenced in database (aka. orphan media)
  */
 public static function remove_deleted_representations($po_opts = null)
 {
     require_once __CA_LIB_DIR__ . "/core/Db.php";
     require_once __CA_MODELS_DIR__ . "/ca_object_representations.php";
     $vb_delete_opt = (bool) $po_opts->getOption('delete');
     $o_db = new Db();
     $t_rep = new ca_object_representations();
     $t_rep->setMode(ACCESS_WRITE);
     $va_paths = array();
     $qr_reps = $o_db->query("SELECT * FROM ca_object_representations WHERE deleted=1");
     if ($vb_delete_opt) {
         print CLIProgressBar::start($qr_reps->numRows(), _t('Removing deleted representations from database'));
     } else {
         print CLIProgressBar::start($qr_reps->numRows(), _t('Loading deleted representations from database'));
     }
     while ($qr_reps->nextRow()) {
         print CLIProgressBar::next();
         $va_versions = $qr_reps->getMediaVersions('media');
         if (!is_array($va_versions)) {
             continue;
         }
         foreach ($va_versions as $vs_version) {
             $va_paths[$qr_reps->getMediaPath('media', $vs_version)] = true;
         }
         if ($vb_delete_opt) {
             $t_rep->load($qr_reps->get('representation_id'));
             $t_rep->setMode(ACCESS_WRITE);
             $t_rep->removeAllLabels();
             $t_rep->delete(true, array('hard' => true));
         }
     }
     print CLIProgressBar::finish() . PHP_EOL;
     if ($vb_delete_opt && $qr_reps->numRows() > 0) {
         CLIUtils::addMessage(_t('Done!'), array('color' => 'green'));
     } elseif ($qr_reps->numRows() == 0) {
         CLIUtils::addMessage(_t('There are no deleted representations to process!'), array('color' => 'green'));
     } else {
         CLIUtils::addMessage(_t("%1 files are referenced by %2 deleted records. Both the records and the files will be deleted if you re-run the script with the -d (--delete) option and the correct permissions.", sizeof($va_paths), $qr_reps->numRows()));
         CLIUtils::addMessage(_t("It is highly recommended to create a full backup before you do this!"), array('color' => 'bold_red'));
     }
 }