Skip to content
This repository was archived by the owner on Sep 10, 2021. It is now read-only.

Commit bb1f8ed

Browse files
author
Charles Ma
committed
ENH: fixed bug #160 Fixed dashboard
1 parent a017f20 commit bb1f8ed

File tree

14 files changed

+294
-5
lines changed

14 files changed

+294
-5
lines changed

core/controllers/ItemController.php

Lines changed: 75 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
/** Item Controller */
1414
class ItemController extends AppController
1515
{
16-
public $_models = array('Item', 'ItemRevision', 'Bitstream', 'Folder');
16+
public $_models = array('Item', 'ItemRevision', 'Bitstream', 'Folder', 'Metadata');
1717
public $_daos = array();
1818
public $_components = array('Date', 'Utility', 'Sortdao');
1919
public $_forms = array('Item');
@@ -29,7 +29,46 @@ function init()
2929
}
3030
} // end init()
3131

32-
32+
33+
/** create/edit metadata*/
34+
function editmetadataAction()
35+
{
36+
$this->disableLayout();
37+
if(!$this->logged)
38+
{
39+
throw new Zend_Exception("You have to be logged in to do that");
40+
}
41+
42+
$itemId = $this->_getParam("itemId");
43+
$metadataId = $this->_getParam("metadataId");
44+
$itemDao = $this->Item->load($itemId);
45+
if($itemDao === false)
46+
{
47+
throw new Zend_Exception("This item doesn't exist.");
48+
}
49+
if(!$this->Item->policyCheck($itemDao, $this->userSession->Dao, MIDAS_POLICY_WRITE))
50+
{
51+
throw new Zend_Exception("Problem policies.");
52+
}
53+
$itemRevision = $this->Item->getLastRevision($itemDao);
54+
$metadatavalues = $this->ItemRevision->getMetadata($itemRevision);
55+
$this->view->metadata = null;
56+
57+
foreach($metadatavalues as $value)
58+
{
59+
if($value->getMetadataId() == $metadataId)
60+
{
61+
$this->view->metadata = $value;
62+
break;
63+
}
64+
}
65+
66+
$this->view->itemDao = $itemDao;
67+
$this->view->metadataType = $this->Metadata->getAllMetadata();
68+
$this->view->metadataType = $this->view->metadataType['sorted'];
69+
$this->view->jsonMetadataType = JsonComponent::encode($this->view->metadataType);
70+
}
71+
3372
/** view a community*/
3473
function viewAction()
3574
{
@@ -53,6 +92,38 @@ function viewAction()
5392

5493
$this->view->isAdmin = $this->Item->policyCheck($itemDao, $this->userSession->Dao, MIDAS_POLICY_ADMIN);
5594
$this->view->isModerator = $this->Item->policyCheck($itemDao, $this->userSession->Dao, MIDAS_POLICY_WRITE);
95+
$itemRevision = $this->Item->getLastRevision($itemDao);
96+
if($this->_request->isPost())
97+
{
98+
$deleteMetadata = $this->_getParam('deleteMetadata');
99+
$editMetadata = $this->_getParam('editMetadata');
100+
if(isset($deleteMetadata) && $this->view->isModerator) //remove users from group
101+
{
102+
$this->disableView();
103+
$this->disableLayout();
104+
$metadataId = $this->_getParam('element');
105+
$this->ItemRevision->deleteMetadata($itemRevision, $metadataId);
106+
echo JsonComponent::encode(array(true, $this->t('Changes saved')));
107+
}
108+
if(isset($editMetadata) && $this->view->isModerator) //remove users from group
109+
{
110+
$metadataId = $this->_getParam('metadataId');
111+
$metadatatype = $this->_getParam('metadatatype');
112+
$element = $this->_getParam('element');
113+
$qualifier = $this->_getParam('qualifier');
114+
$value = $this->_getParam('value');
115+
if(isset($metadataId))
116+
{
117+
$this->ItemRevision->deleteMetadata($itemRevision, $metadataId);
118+
}
119+
$metadataDao = $this->Metadata->getMetadata($metadatatype, $element, $qualifier);
120+
if($metadataDao == false)
121+
{
122+
$this->Metadata->addMetadata($metadatatype, $element, $qualifier, '');
123+
}
124+
$this->Metadata->addMetadataValue($itemRevision, $metadatatype, $element, $qualifier, $value);
125+
}
126+
}
56127

57128
if($this->logged)
58129
{
@@ -85,7 +156,7 @@ function viewAction()
85156

86157
setcookie('recentItems'.$this->userSession->Dao->getKey(), serialize($recentItems), time() + 60 * 60 * 24 * 30, '/'); //30 days
87158
}
88-
$itemRevision = $this->Item->getLastRevision($itemDao);
159+
89160
$this->Item->incrementViewCount($itemDao);
90161
$itemDao->lastrevision = $itemRevision;
91162
$itemDao->revisions = $itemDao->getRevisions();
@@ -176,6 +247,7 @@ function viewAction()
176247
$this->view->json['item'] = $itemDao->toArray();
177248
$this->view->json['item']['message']['delete'] = $this->t('Delete');
178249
$this->view->json['item']['message']['deleteMessage'] = $this->t('Do you really want to delete this item? It cannot be undo.');
250+
$this->view->json['item']['message']['deleteMetadataMessage'] = $this->t('Do you really want to delete this metadata? It cannot be undo.');
179251
$this->view->json['item']['message']['movecopy'] = $this->t('Copy Item.');
180252
}//end index
181253

core/controllers/components/JsonComponent.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ function utf8_decode_array(&$tab)
100100
/** encode Array */
101101
private function _utf8_encode_array(&$array, $key)
102102
{
103+
if(is_object($array) && method_exists($array, 'toArray'))
104+
{
105+
$array = $array->toArray();
106+
}
103107
if(is_array($array))
104108
{
105109
array_walk($array, array($this, '_utf8_encode_array'));

core/models/base/MetadataModelBase.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public function __construct()
3232
} // end __construct()
3333

3434
abstract function getMetadata($type, $element, $qualifier);
35+
abstract function getAllMetadata();
3536
protected abstract function saveMetadataValue($metadataDao);
3637
abstract function getMetadataValueExists($metadataDao);
3738

core/models/pdo/ItemRevisionModel.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,18 @@ function getMetadata($revisiondao)
5151
return $metadatavalues;
5252
} // end getMetadata
5353

54+
/** get the metadata associated with the revision */
55+
function deleteMetadata($revisiondao, $metadataId)
56+
{
57+
if(!$revisiondao instanceof ItemRevisionDao || !is_numeric($metadataId))
58+
{
59+
throw new Zend_Exception("Error param.");
60+
}
61+
62+
Zend_Registry::get('dbAdapter')->delete('metadatavalue', 'itemrevision_id = '.$revisiondao->getKey().' AND metadata_id = '.$metadataId);
63+
return;
64+
} // end getMetadata
65+
5466
/** delete a revision*/
5567
function delete($revisiondao)
5668
{

core/models/pdo/MetadataModel.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,26 @@ function getMetadata($type, $element, $qualifier)
3030
return $this->initDao('Metadata', $row);
3131
} // end function getMetadata()
3232

33+
/** get all the metadata */
34+
function getAllMetadata()
35+
{
36+
$rowset = $this->database->fetchAll($this->database->select());
37+
38+
$metadata = array();
39+
foreach($rowset as $row)
40+
{
41+
$dao = $this->initDao('Metadata', $row);
42+
$metadata['raw'][] = $dao;
43+
$metadata['sorted'][$dao->getMetadatatype()][$dao->getElement()][] = $dao;
44+
}
45+
ksort($metadata['sorted']);
46+
foreach($metadata['sorted'] as $key => $v)
47+
{
48+
ksort($metadata['sorted'][$key]);
49+
}
50+
return $metadata;
51+
} // end function getMetadata()
52+
3353
/** Return the table name based on the type of metadata*/
3454
function getTableValueName($metadatatype)
3555
{
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
form#editItemForm input[type="text"], form#editItemForm input[type="password"] ,form#editItemForm textarea
2+
{
3+
width: 350px!important;
4+
}
5+

core/public/css/item/item.view.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,8 @@ div#fullscreenPanel ul{
6666

6767
img.closeVisuButton{
6868
float:right;
69+
}
70+
71+
div.manageMetadata{
72+
float:right;
6973
}
649 Bytes
Loading
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
2+
$(document).ready(function() {
3+
4+
jsonMetadata = jQuery.parseJSON($('div#jsonMetadata').html());
5+
initElementMetaData();
6+
$('select, input').change(function(){
7+
initElementMetaData();
8+
});
9+
});
10+
11+
function initElementMetaData()
12+
{
13+
var value = $('select[name=metadatatype]').val();
14+
var availableTags = new Array();
15+
$.each( jsonMetadata[value], function(i, l){
16+
availableTags.push(i);
17+
});
18+
$( "input[name=element]" ).autocomplete({
19+
source: availableTags,
20+
change: function(){initElementMetaData();}
21+
});
22+
console.log(availableTags);
23+
initQualifierMetaData();
24+
}
25+
26+
function initQualifierMetaData()
27+
{
28+
29+
var type = $('select[name=metadatatype]').val();
30+
var value = $('input[name=element]').val();
31+
var availableTags = new Array();
32+
$.each( jsonMetadata[type][value], function(i, l){
33+
availableTags.push(l.qualifier);
34+
});
35+
36+
$( "input[name=qualifier]" ).autocomplete({
37+
source: availableTags,
38+
change: function(){initElementMetaData();}
39+
});
40+
}
41+

core/public/js/item/item.view.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,45 @@
11
$(document).ready(function() {
2+
3+
$('a.metadataDeleteLink img').fadeTo("fast",0.4);
4+
$('a.metadataDeleteLink').click(function(){
5+
var metadataCell = $(this).parents('tr');
6+
var metadataId = $(this).attr('element');
7+
var html='';
8+
html+=json.item.message['deleteMetadataMessage'];
9+
html+='<br/>';
10+
html+='<br/>';
11+
html+='<br/>';
12+
html+='<input style="margin-left:140px;" class="globalButton deleteMetaDataYes" element="'+$(this).attr('element')+'" type="button" value="'+json.global.Yes+'"/>';
13+
html+='<input style="margin-left:50px;" class="globalButton deleteMetaDataNo" type="button" value="'+json.global.No+'"/>';
14+
showDialogWithContent(json.item.message['delete'],html,false);
15+
16+
$('input.deleteMetaDataYes').unbind('click').click(function()
17+
{
18+
$.post(json.global.webroot+'/item/'+json.item.item_id, { element: metadataId, deleteMetadata: true});
19+
metadataCell.remove();
20+
$( "div.MainDialog" ).dialog('close');
21+
});
22+
$('input.deleteMetaDataNo').unbind('click').click(function()
23+
{
24+
$( "div.MainDialog" ).dialog('close');
25+
});
26+
});
27+
$('a.metadataEditLink img').fadeTo("fast",0.4);
28+
29+
$('a.metadataEditLink').click(function(){
30+
var metadataId = $(this).attr('element');
31+
loadDialog("editmetadata"+metadataId, "/item/editmetadata/?metadataId="+metadataId+"&itemId="+json.item.item_id);
32+
showDialog('MetaData');
33+
34+
});
35+
$('a.addMetadataLink').click(function(){
36+
var metadataId = $(this).attr('element');
37+
loadDialog("editmetadata"+metadataId, "/item/editmetadata/?itemId="+json.item.item_id);
38+
showDialog('MetaData');
39+
40+
});
41+
42+
243
$('a.moveCopyLink').click(function()
344
{
445
loadDialog("movecopy","/browse/movecopy/?move=false&items="+json.item.item_id);

0 commit comments

Comments
 (0)