147 lines
4 KiB
PHP
147 lines
4 KiB
PHP
<?php
|
||
|
||
/**
|
||
* Questlab
|
||
*
|
||
* @author Oliver Hanraths <oliver.hanraths@uni-duesseldorf.de>
|
||
* @copyright 2014 – 2016 Heinrich-Heine-Universität Düsseldorf
|
||
* @license http://www.gnu.org/licenses/gpl.html
|
||
* @link https://github.com/coderkun/questlab
|
||
*/
|
||
|
||
namespace hhu\z\models;
|
||
|
||
|
||
/**
|
||
* Model to interact with the maps-table.
|
||
*
|
||
* @author Oliver Hanraths <oliver.hanraths@uni-duesseldorf.de>
|
||
*/
|
||
class MapModel extends \hhu\z\Model
|
||
{
|
||
/**
|
||
* Required models
|
||
*
|
||
* @var array
|
||
*/
|
||
public $models = array('media');
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Construct a new MapModel.
|
||
*/
|
||
public function __construct()
|
||
{
|
||
parent::__construct();
|
||
}
|
||
|
||
|
||
|
||
|
||
/**
|
||
* Get the map of a Seminary.
|
||
*
|
||
* @param int $seminaryId ID of Seminary to get map of
|
||
* @return array Map data
|
||
*/
|
||
public function getMapOfSeminary($seminaryId)
|
||
{
|
||
$data = $this->db->query(
|
||
'SELECT seminary_id, seminarymedia_id, width, height '.
|
||
'FROM maps '.
|
||
'WHERE seminary_id = ?',
|
||
'i',
|
||
$seminaryId
|
||
);
|
||
if(!empty($data)) {
|
||
return $data[0];
|
||
}
|
||
|
||
|
||
return null;
|
||
}
|
||
|
||
|
||
/**
|
||
* Set map of a Seminary.
|
||
*
|
||
* @param int $seminaryId ID of Seminary to set map of
|
||
* @param int $seminarymediaId ID of Seminary media of map to set
|
||
*/
|
||
public function setMapOfSeminary($seminaryId, $seminarymediaId)
|
||
{
|
||
// Get image measurements
|
||
$infos = $this->Media->getSeminarymediaInfos($seminarymediaId);
|
||
|
||
// Insert record
|
||
$this->db->query(
|
||
'INSERT INTO maps '.
|
||
'(seminary_id, seminarymedia_id, width, height) '.
|
||
'VALUES '.
|
||
'(?, ?, ?, ?) '.
|
||
'ON DUPLICATE KEY UPDATE '.
|
||
'seminarymedia_id = ?, width = ?, height = ?',
|
||
'iiiiiii',
|
||
$seminaryId, $seminarymediaId, $infos['width'], $infos['height'],
|
||
$seminarymediaId, $infos['width'], $infos['height']
|
||
);
|
||
}
|
||
|
||
|
||
/**
|
||
* Copy the map of a Seminary.
|
||
*
|
||
* @param int $sourceSeminaryId Seminary to copy from
|
||
* @param int $targetSeminaryId Seminary to copy to
|
||
* @param array $seminaryMediaIds Mapping of Seminarymedia-IDs from source Seminary to target Seminary
|
||
*/
|
||
public function copyMapOfSeminary($sourceSeminaryId, $targetSeminaryId, $seminaryMediaIds)
|
||
{
|
||
// Get map of source Seminary
|
||
$map = $this->getMapOfSeminary($sourceSeminaryId);
|
||
|
||
// Set map of targetSeminary
|
||
$this->setMapOfSeminary($targetSeminaryId, $seminaryMediaIds[$map['seminarymedia_id']]);
|
||
}
|
||
|
||
|
||
/**
|
||
* Delete the map of a Seminary.
|
||
*
|
||
* @param int $seminaryId ID of Seminary to delete map of
|
||
*/
|
||
public function deleteMapOfSeminary($seminaryId)
|
||
{
|
||
// Get map
|
||
$map = $this->getMapOfSeminary($seminaryId);
|
||
if(is_null($map)) {
|
||
return;
|
||
}
|
||
|
||
// Delete map
|
||
$this->db->setAutocommit(false);
|
||
try {
|
||
// Delete map record
|
||
$this->db->query(
|
||
'DELETE FROM maps '.
|
||
'WHERE seminary_id = ?',
|
||
'i',
|
||
$seminaryId
|
||
);
|
||
|
||
// Delete Seminary media
|
||
$this->Media->deleteSeminaryMedia($map['seminarymedia_id']);
|
||
|
||
$this->db->commit();
|
||
}
|
||
catch(\nre\exceptions\DatamodelException $e) {
|
||
$this->db->rollback();
|
||
}
|
||
$this->db->setAutocommit(true);
|
||
}
|
||
|
||
}
|
||
|
||
?>
|