$newSpecimenImage->ordering = $new_spec_ordering;
    $newSpecimenImage->image_reference = $file_reference;
    // save the new specimen image object (end w/ approp error & note on failure)
    $newSpecimenImage->updateDb();
    if (!$newSpecimenImage->matchesDb) {
        $results['note'] = util_lang('msg_database_update_failed');
        echo json_encode($results);
        exit;
    }
    // render the new specimen image as a list item for editing & return that
    //        $results['html_output']  = '<li><div class="newly_uploaded_specimen_image">'."\n".'TODO: embed approp code here'."\n</div><li>";
    $results['html_output'] = $newSpecimenImage->renderAsListItemEdit();
    $results['status'] = 'success';
} elseif ($has_permission && $action == 'delete') {
    $specimenImage->doDelete();
    $specimenImageDel = Specimen_Image::getOneFromDb(['specimen_image_id' => $specimenImageId], $DB);
    if (!$specimenImageDel->matchesDb) {
        $results['status'] = 'success';
    } else {
        $results['note'] = util_lang('msg_delete_failed');
        echo json_encode($results);
        exit;
    }
} elseif ($has_permission && $action == 'reorder') {
    // get the specimen
    if (!$specimen) {
        $specimen = Specimen::getOneFromDb(['specimen_id' => $specimenId], $DB);
    }
    // get the image for it
    $specimen->loadImages();
    foreach ($specimen->images as $si) {
 public function loadImages()
 {
     $this->images = Specimen_Image::getAllFromDb(['specimen_id' => $this->specimen_id, 'flag_delete' => FALSE], $this->dbConnection);
     usort($this->images, 'Specimen_Image::cmp');
 }
 function testDoDelete()
 {
     // record is deleted
     // file is moved to one w/ same name but .DEL extension added
     $si = Specimen_Image::getOneFromDb(['specimen_image_id' => 8101], $this->DB);
     $origFile = $_SERVER['DOCUMENT_ROOT'] . APP_ROOT_PATH . '/image_data/specimen/' . $si->image_reference;
     $this->assertTrue(file_exists($origFile));
     $si->doDelete();
     $siDel = Specimen_Image::getOneFromDb(['specimen_image_id' => 8101], $this->DB);
     $this->assertFalse($siDel->matchesDb);
     $this->assertFalse(file_exists($origFile));
     $this->assertTrue(file_exists($origFile . '.DEL'));
     // now clean up after this test by putting the file back
     if (file_exists($origFile . '.DEL')) {
         rename($origFile . '.DEL', $origFile);
         $this->assertTrue(file_exists($origFile));
     }
 }
 function testDoDelete()
 {
     $np = Notebook_Page::getOneFromDb(['notebook_page_id' => 1101], $this->DB);
     $np->loadSpecimens();
     $np->loadPageFields();
     $this->assertTrue($np->matchesDb);
     $this->assertTrue($np->page_fields[0]->matchesDb);
     $this->assertTrue($np->page_fields[1]->matchesDb);
     $this->assertTrue($np->page_fields[2]->matchesDb);
     $this->assertTrue($np->page_fields[3]->matchesDb);
     $this->assertTrue($np->specimens[0]->matchesDb);
     $this->assertTrue($np->specimens[1]->matchesDb);
     //***********
     $np->doDelete();
     //***********
     $np2 = Notebook_Page::createNewNotebookPageForNotebook(1001, $this->DB);
     $this->assertFalse($np2->matchesDb);
     $npf = Notebook_Page_Field::getOneFromDb(['notebook_page_field_id' => 1201], $this->DB);
     $this->assertFalse($npf->matchesDb);
     $npf = Notebook_Page_Field::getOneFromDb(['notebook_page_field_id' => 1202], $this->DB);
     $this->assertFalse($npf->matchesDb);
     $npf = Notebook_Page_Field::getOneFromDb(['notebook_page_field_id' => 1203], $this->DB);
     $this->assertFalse($npf->matchesDb);
     $npf = Notebook_Page_Field::getOneFromDb(['notebook_page_field_id' => 1204], $this->DB);
     $this->assertFalse($npf->matchesDb);
     $s = Specimen::getOneFromDb(['specimen_id' => 8002], $this->DB);
     $this->assertFalse($s->matchesDb);
     $s = Specimen::getOneFromDb(['specimen_id' => 8003], $this->DB);
     $this->assertFalse($s->matchesDb);
     $si = Specimen_Image::getOneFromDb(['specimen_image_id' => 8103], $this->DB);
     $this->assertFalse($si->matchesDb);
     $si = Specimen_Image::getOneFromDb(['specimen_image_id' => 8104], $this->DB);
     $this->assertFalse($si->matchesDb);
 }
 function testDoDelete()
 {
     $s = Specimen::getOneFromDb(['specimen_id' => 8001], $this->DB);
     $s->cacheImages();
     $this->assertTrue($s->matchesDb);
     $this->assertTrue($s->images[0]->matchesDb);
     $this->assertTrue($s->images[1]->matchesDb);
     $s->doDelete();
     $s2 = Specimen::getOneFromDb(['specimen_id' => 8001], $this->DB);
     $this->assertFalse($s2->matchesDb);
     $siA = Specimen_Image::getOneFromDb(['specimen_image_id' => 8101], $this->DB);
     $this->assertFalse($siA->matchesDb);
     $siB = Specimen_Image::getOneFromDb(['specimen_image_id' => 8102], $this->DB);
     $this->assertFalse($siB->matchesDb);
 }
 function testImageReordering()
 {
     $this->doLoginAdmin();
     $this->get('http://localhost/digitalfieldnotebooks/ajax_actions/specimen_image.php?action=reorder&for_specimen=8002&ordering_8104=70&ordering_8103=50');
     $this->checkBasicAsserts();
     // script status should be success
     $results = json_decode($this->getBrowser()->getContent());
     //        util_prePrintR($results);
     $this->assertEqual('success', $results->status);
     $s03 = Specimen_Image::getOneFromDb(['specimen_image_id' => 8103], $this->DB);
     $s04 = Specimen_Image::getOneFromDb(['specimen_image_id' => 8104], $this->DB);
     $this->assertEqual(50, $s03->ordering);
     $this->assertEqual(70, $s04->ordering);
 }