| Server IP : 195.130.67.5 / Your IP : 216.73.217.154 Web Server : Microsoft-IIS/10.0 System : Windows NT WEBSERVER1 10.0 build 17763 (Windows Server 2016) i586 User : IUSR ( 0) PHP Version : 7.4.19 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/inetpub/wwwroot/Topogeo/ojs/lib/pkp/classes/metadata/ |
Upload File : |
<?php
/**
* @file MetadataDescriptionDAO.inc.php
*
* Copyright (c) 2000-2012 John Willinsky
* Distributed under the GNU GPL v2. For full terms see the file docs/COPYING.
*
* @class MetadataDescriptionDAO
* @ingroup metadata
* @see MetadataDescription
*
* @brief Operations for retrieving and modifying MetadataDescription objects.
*/
import('lib.pkp.classes.metadata.MetadataDescription');
class MetadataDescriptionDAO extends DAO {
/**
* Insert a new meta-data description.
*
* @param $metadataDescription MetadataDescription
* @return integer the new metadata description id
*/
function insertObject(&$metadataDescription) {
$metadataSchema =& $metadataDescription->getMetadataSchema();
$this->update(
sprintf('INSERT INTO metadata_descriptions
(assoc_type, assoc_id, schema_namespace, schema_name, display_name, seq)
VALUES (?, ?, ?, ?, ?, ?)'),
array(
(integer)$metadataDescription->getAssocType(),
(integer)$metadataDescription->getAssocId(),
$metadataSchema->getNamespace(),
$metadataSchema->getName(),
$metadataDescription->getDisplayName(),
(integer)$metadataDescription->getSeq()
)
);
$metadataDescription->setId($this->getInsertId());
$this->_updateObjectMetadata($metadataDescription);
return $metadataDescription->getId();
}
/**
* Retrieve a meta-data description by id.
* @param $metadataDescriptionId integer
* @return MetadataDescription
*/
function &getObjectById($metadataDescriptionId) {
$result =& $this->retrieve(
'SELECT * FROM metadata_descriptions WHERE metadata_description_id = ?', $metadataDescriptionId
);
$metadataDescription = null;
if ($result->RecordCount() != 0) {
$metadataDescription =& $this->_fromRow($result->GetRowAssoc(false));
}
$result->Close();
unset($result);
return $metadataDescription;
}
/**
* Retrieve an array of meta-data descriptions matching a particular association id.
* @param $assocType int
* @param $assocId int
* @param $dbResultRange DBResultRange the desired range
* @return DAOResultFactory containing matching source descriptions (MetadataDescription objects)
*/
function &getObjectsByAssocId($assocType, $assocId, $rangeInfo = null) {
$result =& $this->retrieveRange(
'SELECT *
FROM metadata_descriptions
WHERE assoc_type = ? AND assoc_id = ?
ORDER BY metadata_description_id DESC',
array((int)$assocType, (int)$assocId),
$rangeInfo
);
$returner = new DAOResultFactory($result, $this, '_fromRow', array('id'));
return $returner;
}
/**
* Update an existing meta-data description.
* @param $metadataDescription MetadataDescription
*/
function updateObject(&$metadataDescription) {
$metadataSchema =& $metadataDescription->getMetadataSchema();
$returner = $this->update(
'UPDATE metadata_descriptions
SET assoc_type = ?,
assoc_id = ?,
schema_name = ?,
schema_namespace = ?,
display_name = ?,
seq = ?
WHERE metadata_description_id = ?',
array(
(integer)$metadataDescription->getAssocType(),
(integer)$metadataDescription->getAssocId(),
$metadataSchema->getName(),
$metadataSchema->getNamespace(),
$metadataDescription->getDisplayName(),
$metadataDescription->getSeq(),
$metadataDescription->getId()
)
);
$this->_updateObjectMetadata($metadataDescription);
}
/**
* Delete a meta-data description.
* @param $metadataDescription MetadataDescription
* @return boolean
*/
function deleteObject(&$metadataDescription) {
return $this->deleteObjectById($metadataDescription->getId());
}
/**
* Delete a meta-data description by id.
* @param $metadataDescriptionId int
* @return boolean
*/
function deleteObjectById($metadataDescriptionId) {
$params = array((int)$metadataDescriptionId);
$this->update('DELETE FROM metadata_descriptions WHERE metadata_description_id = ?', $params);
return $this->update('DELETE FROM metadata_description_settings WHERE metadata_description_id = ?', $params);
}
/**
* Delete all meta-data descriptions matching a particular association id.
* @param $assocType int
* @param $assocId int
* @return boolean
*/
function deleteObjectsByAssocId($assocType, $assocId) {
$metadataDescriptions =& $this->getObjectsByAssocId($assocType, $assocId);
while ($metadataDescription =& $metadataDescriptions->next()) {
$this->deleteObjectById($metadataDescription->getId());
unset($metadataDescription);
}
return true;
}
//
// Protected helper methods
//
/**
* Get the ID of the last inserted Source Description.
* @return int
*/
function getInsertId() {
return parent::getInsertId('metadata_descriptions', 'metadata_description_id');
}
//
// Private helper methods
//
/**
* Identify the meta-data schema class that corresponds
* to the schema identifiers passed into this method.
*
* FIXME: This information should come from a central
* meta-data schema registry.
*
* @param $metadataSchemaId string
* @return string
*/
function &_resolveSchemaIdentifierToMetadataSchemaName($metadataSchemaId) {
static $metadataSchemaMapping = array(
'nlm30:nlm-3.0-element-citation' => 'lib.pkp.classes.metadata.nlm.NlmCitationSchema',
'nlm30:nlm-3.0-name' => 'lib.pkp.classes.metadata.nlm.NlmNameSchema',
'openurl10:openurl-1.0-journal' => 'lib.pkp.classes.metadata.nlm.OpenUrlJournalSchema',
'openurl10:openurl-1.0-book' => 'lib.pkp.classes.metadata.nlm.OpenUrlBookSchema',
'openurl10:openurl-1.0-dissertation' => 'lib.pkp.classes.metadata.nlm.OpenUrlDissertationSchema'
);
// Map the metadata schema identifier to a metadata schema class name.
assert(isset($metadataSchemaMapping[$metadataSchemaId]));
$metadataSchemaName = $metadataSchemaMapping[$metadataSchemaId];
return $metadataSchemaName;
}
/**
* Construct a new meta-data description object based on the
* schema identifiers passed into this method.
* @param $metadataSchemaNamespace string
* @param $metadataSchemaName string
* @param $assocType integer
* @return MetadataDescription
*/
function &_newDataObject($metadataSchemaNamespace, $metadataSchemaName, $assocType) {
$metadataSchemaName =& $this->_resolveSchemaIdentifierToMetadataSchemaName($metadataSchemaNamespace.':'.$metadataSchemaName);
$metadataDescription = new MetadataDescription($metadataSchemaName, $assocType);
return $metadataDescription;
}
/**
* Internal function to return a meta-data description
* object from a row.
* @param $row array
* @return MetadataDescription
*/
function &_fromRow(&$row) {
$metadataDescription =& $this->_newDataObject($row['schema_namespace'], $row['schema_name'], (int)$row['assoc_type']);
$metadataDescription->setId((int)$row['metadata_description_id']);
$metadataDescription->setAssocId((int)$row['assoc_id']);
$metadataDescription->setDisplayName($row['display_name']);
$metadataDescription->setSeq((int)$row['seq']);
$this->getDataObjectSettings('metadata_description_settings', 'metadata_description_id', $row['metadata_description_id'], $metadataDescription);
return $metadataDescription;
}
/**
* Update the meta-data
* @param $metadataDescription MetadataDescription
*/
function _updateObjectMetadata(&$metadataDescription) {
// Inject a dummy meta-data adapter so that we can
// use the meta-data persistence infrastructure of the
// DAO and DataObject classes to persist our meta-data
// description.
import('lib.pkp.classes.metadata.MetadataDescriptionDummyAdapter');
$metadataAdapter = new MetadataDescriptionDummyAdapter($metadataDescription);
$metadataDescription->addSupportedMetadataAdapter($metadataAdapter);
$this->updateDataObjectSettings('metadata_description_settings', $metadataDescription,
array('metadata_description_id' => $metadataDescription->getId()));
}
}
?>