Added support for uploading two map images for each section

git-svn-id: https://rosehill.googlecode.com/svn/branches/php@18 100bd78a-fc82-11de-b5bc-ffd2847a4b57
This commit is contained in:
inghamn 2010-01-04 19:44:12 +00:00
parent 506d7603f6
commit b949fd89be
16 changed files with 168 additions and 30 deletions

View File

@ -44,6 +44,7 @@ echo "
<tr><td>$editButton</td> <tr><td>$editButton</td>
<td>$code</td> <td>$code</td>
<td>$name</td> <td>$name</td>
<td></td>
</tr> </tr>
"; ";
} }

View File

@ -7,7 +7,7 @@
*/ */
?> ?>
<h1>Update Section</h1> <h1>Update Section</h1>
<form method="post" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>"> <form method="post" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" enctype="multipart/form-data">
<fieldset><legend>Section Info</legend> <fieldset><legend>Section Info</legend>
<input name="section_id" type="hidden" value="<?php echo $this->section->getId(); ?>" /> <input name="section_id" type="hidden" value="<?php echo $this->section->getId(); ?>" />
<table> <table>
@ -30,4 +30,27 @@
Cancel Cancel
</button> </button>
</fieldset> </fieldset>
<fieldset><legend>Maps</legend>
<div>
<label for="highlight_map">Highlight Map</lable>
<input type="file" name="highlight_map" id="highlight_map" />
</div>
<?php
$highlight = $this->section->getMap('highlight');
if ($highlight) {
echo "<div><img src=\"$highlight\" /></div>";
}
?>
<div>
<label for="zoom_map">Zoomed Map</lable>
<input type="file" name="zoom_map" id="zoom_map" />
</div>
<?php
$zoom = $this->section->getMap('zoom');
if ($zoom) {
echo "<div><img src=\"$zoom\" /></div>";
}
?>
</fieldset>
</form> </form>

View File

@ -178,7 +178,6 @@ class Cemetery
* *
* Available map types are: * Available map types are:
* full, thumb - for the main map * full, thumb - for the main map
* highlight, zoom - for the section maps
* *
* @return string * @return string
*/ */

View File

@ -7,7 +7,7 @@
class Interment class Interment
{ {
private $id; private $id;
private $section; private $section_id;
private $lot; private $lot;
private $book; private $book;
private $pageNumber; private $pageNumber;
@ -23,6 +23,7 @@ class Interment
private $notes; private $notes;
private $lot2; private $lot2;
private $section;
private $cemetery; private $cemetery;
/** /**
@ -87,7 +88,7 @@ class Interment
$this->validate(); $this->validate();
$data = array(); $data = array();
$data['section'] = $this->section ? $this->section : null; $data['section_id'] = $this->section_id ? $this->section_id : null;
$data['lot'] = $this->lot ? $this->lot : null; $data['lot'] = $this->lot ? $this->lot : null;
$data['book'] = $this->book ? $this->book : null; $data['book'] = $this->book ? $this->book : null;
$data['pageNumber'] = $this->pageNumber ? $this->pageNumber : null; $data['pageNumber'] = $this->pageNumber ? $this->pageNumber : null;
@ -137,11 +138,11 @@ class Interment
} }
/** /**
* @return string * @return int
*/ */
public function getSection() public function getSection_id()
{ {
return $this->section; return $this->section_id;
} }
/** /**
@ -281,16 +282,40 @@ class Interment
} }
return null; return null;
} }
/**
* @return Section
*/
public function getSection()
{
if ($this->section_id) {
if (!$this->section) {
$this->section = new Section($this->section_id);
}
return $this->section;
}
return null;
}
//---------------------------------------------------------------- //----------------------------------------------------------------
// Generic Setters // Generic Setters
//---------------------------------------------------------------- //----------------------------------------------------------------
/** /**
* @param string $string * @param int $int
*/ */
public function setSection($string) public function setSection_id($int)
{ {
$this->section = trim($string); $this->section = new Section($int);
$this->section_id = $int;
}
/**
* @param Section $section
*/
public function setSection($section)
{
$this->section_id = $section->getId();
$this->section = $section;
} }
/** /**
@ -427,7 +452,6 @@ class Interment
$this->lot2 = trim($string); $this->lot2 = trim($string);
} }
//---------------------------------------------------------------- //----------------------------------------------------------------
// Custom Functions // Custom Functions
// We recommend adding all your custom code down here at the bottom // We recommend adding all your custom code down here at the bottom
@ -457,20 +481,4 @@ class Interment
} }
return implode(' ',$name); return implode(' ',$name);
} }
/**
* @return string
*/
public function getSectionMapURL($section,$type='highlight')
{
$section = preg_replace('/[^a-z\-]/','',strtolower($section));
$type = $type=='highlight' ? 'highlight' : 'zoom';
$mapDirectory = "images/cemeteries/{$this->cemetery_id}";
$filename = "$type/$section.jpg";
if (file_exists(APPLICATION_HOME."/html/$mapDirectory/$filename")) {
return BASE_URL."$mapDirectory/$filename";
}
}
} }

53
classes/Map.php Normal file
View File

@ -0,0 +1,53 @@
<?php
/**
* @copyright 2010 City of Bloomington, Indiana
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.txt
* @author Cliff Ingham <inghamn@bloomington.in.gov>
*/
class Map
{
public static $extensions = array(
'jpg'=>array('mime_type'=>'image/jpeg','media_type'=>'image'),
'gif'=>array('mime_type'=>'image/gif','media_type'=>'image'),
'png'=>array('mime_type'=>'image/png','media_type'=>'image'),
'tiff'=>array('mime_type'=>'image/tiff','media_type'=>'image')
);
/**
* @param string $directory Where to store the file
* @param array|string $file Either an entry from $_FILES or a path to a file
* @param int $id The unique ID for the object the map is for
*/
public static function saveFile($directory,$file,$id)
{
// Handle passing in either a $_FILES array or just a path to a file
$tempFile = is_array($file) ? $file['tmp_name'] : $file;
if (!$tempFile) {
throw new Exception('media/uploadFailed');
}
# Find out the mime type for this file
$filename = is_array($file) ? basename($file['name']) : basename($file);
preg_match("/[^.]+$/",$filename,$matches);
$extension = strtolower($matches[0]);
// Make sure it's a known file type
if (!array_key_exists(strtolower($extension),self::$extensions)) {
throw new Exception('unknownFileType');
}
// Move the file where it's supposed to go
if (!is_dir($directory)) {
mkdir($directory,0777,true);
}
$newFile = "$directory/$id.$extension";
echo "Saving $newFile\n";
rename($tempFile,$newFile);
chmod($newFile,0666);
if (!is_file($newFile)) {
echo "$newFile was not saved\n";
throw new Exception('media/uploadFailed');
}
}
}

View File

@ -196,4 +196,41 @@ class Section
{ {
return $this->name ? $this->name : $this->code; return $this->name ? $this->name : $this->code;
} }
private function getMapDirectory()
{
return 'images/cemeteries/'.$this->cemetery_id;
}
/**
* Returns the URL to the map image
*
* @param string $type Either 'highlight' or 'zoom'
* @return string
*/
public function getMap($type='highlight')
{
$imageDir = $this->getMapDirectory();
$type = $type=='highlight' ? 'highlight' : 'zoom';
$glob = glob(APPLICATION_HOME."/html/$imageDir/$type/{$this->id}.*");
if (count($glob)) {
$filename = basename($glob[0]);
return BASE_URL."/$imageDir/$type/$filename";
}
}
/**
* @param array|string $file Either an entry from $_FILES or a path to a file
*/
public function saveMap($file,$type)
{
$imageDir = $this->getMapDirectory();
$type = $type=='highlight' ? 'highlight' : 'zoom';
$directory = APPLICATION_HOME."/html/$imageDir/$type";
echo "Saving $type map to $directory\n";
Map::saveFile($directory,$file,$this->id);
}
} }

View File

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View File

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View File

Before

Width:  |  Height:  |  Size: 163 KiB

After

Width:  |  Height:  |  Size: 163 KiB

View File

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View File

Before

Width:  |  Height:  |  Size: 161 KiB

After

Width:  |  Height:  |  Size: 161 KiB

View File

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View File

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View File

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

View File

@ -18,7 +18,13 @@ $search = array();
foreach ($_GET as $field=>$value) { foreach ($_GET as $field=>$value) {
if ($value) { if ($value) {
if (false !== strpos($field,'section')) { if (false !== strpos($field,'section')) {
$search['section'] = $value; try {
$section = new Section($value);
$search['section_id'] = $section->getId();
}
catch (Exception $e) {
// Just ignore any unknown sections
}
} }
else { else {
if (in_array($field,$knownFields)) { if (in_array($field,$knownFields)) {

View File

@ -12,18 +12,29 @@ if (!userIsAllowed('Sections')) {
} }
$section = new Section($_REQUEST['section_id']); $section = new Section($_REQUEST['section_id']);
if (isset($_POST['section'])) { if (isset($_POST['section_id'])) {
$section->setCode($_POST['code']); $section->setCode($_POST['code']);
$section->setName($_POST['name']); $section->setName($_POST['name']);
try { try {
$section->save(); $section->save();
header('Location: '.$section->getCemetery()->getURL()); if (isset($_FILES)) {
echo "Found files\n";
print_r($_FILES);
if (isset($_FILES['highlight_map']) && $_FILES['highlight_map']['tmp_name']) {
$section->saveMap($_FILES['highlight_map'],'highlight');
}
if (isset($_FILES['zoom_map']) && $_FILES['zoom_map']['tmp_name']) {
$section->saveMap($_FILES['zoom_map'],'zoom');
}
}
#header('Location: '.$section->getCemetery()->getURL());
exit(); exit();
} }
catch (Exception $e) { catch (Exception $e) {
$_SESSION['errorMessages'][] = $e; $_SESSION['errorMessages'][] = $e;
} }
} }
$template = new Template(); $template = new Template();