Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Item stubs #2216

Open
wants to merge 48 commits into
base: develop
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
38f48a6
Begin implementing resource stub
jimsafley Jul 9, 2024
e9c5850
Continue dev
jimsafley Jul 9, 2024
e7db625
Continue dev
jimsafley Jul 10, 2024
e40a196
Continue dev
jimsafley Jul 11, 2024
6950b81
Continue dev
jimsafley Jul 11, 2024
0d8995e
Continue dev
jimsafley Jul 12, 2024
057d345
Continue dev
jimsafley Jul 13, 2024
99f0eda
Continue dev
jimsafley Jul 15, 2024
664ac71
Continue dev
jimsafley Jul 15, 2024
0da03d1
Continue dev
jimsafley Jul 16, 2024
f4b4f28
Continue dev
jimsafley Jul 16, 2024
3e73aad
Begin converting to template-based item stub form
jimsafley Jul 18, 2024
7aa38a8
Continue dev
jimsafley Jul 19, 2024
d71c1c2
Continue dev
jimsafley Jul 20, 2024
6423db5
Begin implementing resource stub
jimsafley Jul 9, 2024
e827180
Continue dev
jimsafley Jul 9, 2024
3d9655c
Continue dev
jimsafley Jul 10, 2024
1273963
Continue dev
jimsafley Jul 11, 2024
6ae3386
Continue dev
jimsafley Jul 11, 2024
15f10f5
Continue dev
jimsafley Jul 12, 2024
79109ab
Continue dev
jimsafley Jul 13, 2024
4167a55
Continue dev
jimsafley Jul 15, 2024
45c742e
Continue dev
jimsafley Jul 15, 2024
b7d415a
Continue dev
jimsafley Jul 16, 2024
feeb9d8
Continue dev
jimsafley Jul 16, 2024
43b7280
Begin converting to template-based item stub form
jimsafley Jul 18, 2024
1b61b17
Continue dev
jimsafley Jul 19, 2024
e2ef051
Continue dev
jimsafley Jul 20, 2024
3882a8b
Merge branch 'item-stub' of github.com:omeka/omeka-s into item-stub
jimsafley Jul 20, 2024
4e7a5e1
Continue dev
jimsafley Jul 20, 2024
e459987
Continue dev
jimsafley Jul 21, 2024
8d6eb27
Continue dev
jimsafley Jul 22, 2024
316c1d2
Continue dev
jimsafley Jul 23, 2024
bfc19a5
Continue dev
jimsafley Jul 23, 2024
8f731e1
Continue dev
jimsafley Jul 23, 2024
121ef5d
Continue dev
jimsafley Jul 24, 2024
76dba50
Continue dev
jimsafley Jul 24, 2024
74d38ba
Continue dev
jimsafley Jul 24, 2024
33356f8
Continue dev
jimsafley Jul 24, 2024
3a26c0b
Continue dev
jimsafley Jul 24, 2024
ebf7f0f
Style required tag for value annotation values.
kimisgold Jul 24, 2024
fbd903b
Style sidebar tabs.
kimisgold Jul 24, 2024
de1c6be
Add heading to item stub form for consistency.
kimisgold Jul 24, 2024
febc3c2
Ensure value annotation value inputs use full sidebar width.
kimisgold Jul 24, 2024
1123698
Continue dev
jimsafley Jul 24, 2024
6c4e7fe
Adjust sidebar tabs for new div container markup.
kimisgold Jul 25, 2024
1e88223
Continue dev
jimsafley Jul 25, 2024
599060a
Continue dev
jimsafley Jul 25, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Continue dev
jimsafley committed Jul 15, 2024
commit 664ac712ae5969557c0a451d599db1d7e91219d2
51 changes: 43 additions & 8 deletions application/asset/js/resource-form.js
Original file line number Diff line number Diff line change
@@ -448,25 +448,60 @@
Omeka.closeSidebar($('#select-resource'));
});
});
// Item stub form: handle resource template change.
$(document).on('change', '#item-stub-resource-template', function(e) {
const itemStubForm = $('#item-stub-form');
const resourceTemplate = $('#item-stub-resource-template');
const resourceClass = $('#item-stub-resource-class');
const title = $('#item-stub-title');
const description = $('#item-stub-description');
const resourceTemplateUrl = itemStubForm.data('templateUrl') + '/' + resourceTemplate.val();
$.get(resourceTemplateUrl, function(data) {
const templateResourceClass = data['o:resource_class'];
const templateTitleProperty = data['o:title_property'];
const templateDescriptionProperty = data['o:description_property'];
const resourceTemplateUrl = itemStubForm.data('resourceTemplateUrl') + '/' + resourceTemplate.val();
$.get(resourceTemplateUrl, function(resourceTemplateData) {
const templateResourceClass = resourceTemplateData['o:resource_class'];
const templateTitleProperty = resourceTemplateData['o:title_property'];
const templateDescriptionProperty = resourceTemplateData['o:description_property'];
if (templateResourceClass) {
// Set the template-defined class.
resourceClass.val(templateResourceClass['o:id']);
resourceClass.trigger('chosen:updated');
}
if (templateTitleProperty) {
// @todo: get property data from API (for label in particular)
title.data('property-id', templateTitleProperty['o:id']);
// @todo: get and set alt label, if any
// Set the title defined by the template (including alt label).
const propertyUrl = itemStubForm.data('propertyUrl') + '/' + templateTitleProperty['o:id'];
$.get(propertyUrl, function(propertyData) {
let propertyLabel = propertyData['o:label'];
$.each(resourceTemplateData['o:resource_template_property'], function(key, value) {
if (value['o:property']['o:id'] === templateTitleProperty['o:id']) {
if (value['o:alternate_label']) propertyLabel = value['o:alternate_label'];
return false;
}
});
title.data('propertyId', templateTitleProperty['o:id']);
title.closest('.field').find('[for="item-stub-title"]').text(propertyLabel);
});
} else {
// Set the default title.
title.data('propertyId', title.data('propertyIdDefault'));
title.closest('.field').find('[for="item-stub-title"]').text(title.data('propertyLabelDefault'));
}
if (templateDescriptionProperty) {
// Set the description defined by the template (including alt label).
const propertyUrl = itemStubForm.data('propertyUrl') + '/' + templateDescriptionProperty['o:id'];
$.get(propertyUrl, function(propertyData) {
let propertyLabel = propertyData['o:label'];
$.each(resourceTemplateData['o:resource_template_property'], function(key, value) {
if (value['o:property']['o:id'] === templateDescriptionProperty['o:id']) {
if (value['o:alternate_label']) propertyLabel = value['o:alternate_label'];
return false;
}
});
description.data('propertyId', templateDescriptionProperty['o:id']);
description.closest('.field').find('[for="item-stub-description"]').text(propertyLabel);
});
} else {
// Set the default description.
description.data('propertyId', description.data('propertyIdDefault'));
description.closest('.field').find('[for="item-stub-description"]').text(description.data('propertyLabelDefault'));
}
});
});
39 changes: 23 additions & 16 deletions application/src/Form/ItemStubForm.php
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@
use Laminas\EventManager\Event;
use Laminas\EventManager\EventManagerAwareTrait;
use Laminas\Form\Form;
use Laminas\View\Helper\Url;
use Laminas\View\HelperPluginManager;
use Omeka\Api\Manager as ApiManager;
use Omeka\Form\Element as OmekaElement;

@@ -14,19 +14,26 @@ class ItemStubForm extends Form

protected $apiManager;

protected $urlHelper;
protected $viewHelperManager;

public function init()
{
$urlHelper = $this->getViewHelperManager()->get('url');
$apiHelper = $this->getViewHelperManager()->get('api');

$this->setAttribute('id', 'item-stub-form');
$this->setAttribute('data-submit-url', $this->getUrlHelper()(
$this->setAttribute('data-submit-url', $urlHelper(
'admin/default',
['controller' => 'item', 'action' => 'add-item-stub']
));
$this->setAttribute('data-template-url', $this->getUrlHelper()(
$this->setAttribute('data-resource-template-url', $urlHelper(
'api/default',
['resource' => 'resource_templates']
));
$this->setAttribute('data-property-url', $urlHelper(
'api/default',
['resource' => 'properties']
));

$this->add([
'type' => OmekaElement\ResourceSelect::class,
@@ -65,10 +72,10 @@ public function init()
],
]);

$property = $this->getApiManager()->search(
$property = $apiHelper->searchOne(
'properties',
['term' => 'dcterms:title']
)->getContent()[0];
)->getContent();
$this->add([
'type' => 'textarea',
'name' => 'title',
@@ -79,15 +86,15 @@ public function init()
'id' => 'item-stub-title',
'data-property-id' => $property->id(),
'data-type' => 'literal',
'data-property-id-original' => $property->id(),
'data-property-label-original' => 'Title', // @translate
'data-property-id-default' => $property->id(),
'data-property-label-default' => 'Title', // @translate
],
]);

$property = $this->getApiManager()->search(
$property = $apiHelper->searchOne(
'properties',
['term' => 'dcterms:description']
)->getContent()[0];
)->getContent();
$this->add([
'type' => 'textarea',
'name' => 'description',
@@ -98,8 +105,8 @@ public function init()
'id' => 'item-stub-description',
'data-property-id' => $property->id(),
'data-type' => 'literal',
'data-property-id-original' => $property->id(),
'data-property-label-original' => 'Description', // @translate
'data-property-id-default' => $property->id(),
'data-property-label-default' => 'Description', // @translate
],
]);

@@ -143,13 +150,13 @@ public function getApiManager()
return $this->apiManager;
}

public function setUrlHelper(Url $urlHelper)
public function setViewHelperManager(HelperPluginManager $viewHelperManager)
{
$this->urlHelper = $urlHelper;
$this->viewHelperManager = $viewHelperManager;
}

public function getUrlHelper()
public function getViewHelperManager()
{
return $this->urlHelper;
return $this->viewHelperManager;
}
}
2 changes: 1 addition & 1 deletion application/src/Service/Form/ItemStubFormFactory.php
Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@ public function __invoke(ContainerInterface $services, $requestedName, array $op
{
$form = new ItemStubForm;
$form->setApiManager($services->get('Omeka\ApiManager'));
$form->setUrlHelper($services->get('ViewHelperManager')->get('Url'));
$form->setViewHelperManager($services->get('ViewHelperManager'));
$form->setEventManager($services->get('EventManager'));
return $form;
}