-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #56 from ploneintranet/feature/create_document
add forms&view to allow creation of folders and arbitrary content
- Loading branch information
Showing
6 changed files
with
221 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
# -*- coding: utf-8 -*- | ||
from Products.CMFPlone.utils import safe_unicode | ||
from Products.Five import BrowserView | ||
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile | ||
from plone import api | ||
from plone.protect import CheckAuthenticator, PostOnly | ||
|
||
|
||
class AddContent(BrowserView): | ||
"""Evaluate simple form and add arbitrary content. | ||
""" | ||
|
||
template = ViewPageTemplateFile('templates/add_content.pt') | ||
|
||
def __call__(self, portal_type=None, title=None, description=None): | ||
"""Evaluate form and redirect""" | ||
if title is not None: | ||
CheckAuthenticator(self.request) | ||
PostOnly(self.request) | ||
self.portal_type = portal_type | ||
self.title = title.strip() | ||
self.description = description.strip() | ||
if self.portal_type in api.portal.get_tool('portal_types'): | ||
url = self.create() | ||
return self.redirect(url) | ||
return self.template() | ||
|
||
def create(self): | ||
"""Create content and return url""" | ||
container = self.context | ||
new = api.content.create( | ||
container=container, | ||
type=self.portal_type, | ||
title=self.title, | ||
safe_id=True, | ||
) | ||
if new: | ||
new.description = safe_unicode(self.description) | ||
return new.absolute_url() | ||
|
||
def redirect(self, url): | ||
"""Has its own method to allow overriding""" | ||
url = '{}/edit'.format(url) | ||
return self.request.response.redirect(url) | ||
|
||
|
||
class AddFolder(AddContent): | ||
|
||
template = ViewPageTemplateFile('templates/add_folder.pt') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
36 changes: 36 additions & 0 deletions
36
src/ploneintranet/workspace/browser/templates/add_content.pt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
|
||
<h1> | ||
Create document | ||
</h1> | ||
<form method="POST" action="#" tal:attributes="action request/URL" class="wizard-box pat-inject" data-pat-inject="source: #content; target: #document-body && source: #sidebar-content; target: #sidebar-content"> | ||
<div class="panel-body"> | ||
<fieldset class="icon-tabs"> | ||
<label class="icon-doc-text"> | ||
<input checked="checked" name="portal_type" value="Document" type="radio"> Rich text | ||
</label> | ||
<label class="icon-slides"> | ||
<input name="portal_type" value="Slideshow" type="radio"> Slideshow | ||
</label> | ||
<label class="icon-calendar"> | ||
<input name="portal_type" value="Event" type="radio"> Event | ||
</label> | ||
<label class="icon-file-image"> | ||
<input name="portal_type" value="Image" type="radio"> Image | ||
</label> | ||
</fieldset> | ||
<fieldset class="vertical"> | ||
<input type="text" name="title" placeholder="Document title" autofocus /> | ||
<textarea name="description" rows="6" placeholder="Description for search results (Optional)"></textarea> | ||
<input type="hidden" name="form.widgets.IExcludeFromNavigation.exclude_from_nav" value="selected"> | ||
</fieldset> | ||
</div> | ||
<div class="buttons panel-footer"> | ||
<span tal:replace="structure context/@@authenticator/authenticator"/> | ||
<button id="form-buttons-create" name="form.buttons.create" type="submit" value="Create" class="icon-ok-circle close-panel focus"> | ||
Create | ||
</button> | ||
<button id="form-buttons-cancel" name="form.buttons.cancel" type="button" value="Cancel" class="icon-cancel-circle close-panel"> | ||
Cancel | ||
</button> | ||
</div> | ||
</form> |
21 changes: 21 additions & 0 deletions
21
src/ploneintranet/workspace/browser/templates/add_folder.pt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
<h1> | ||
Create folder | ||
</h1> | ||
<form method="POST" action="#" tal:attributes="action request/URL" class="wizard-box pat-inject" data-pat-inject="source: #sidebar-content; target: #sidebar-content"> | ||
<div class="panel-body"> | ||
<fieldset class="vertical"> | ||
<input type="hidden" name="portal_type" value="Folder" /> | ||
<input type="text" name="title" placeholder="Folder name" autofocus /> | ||
<textarea name="description" rows="6" placeholder="Description for search results (Optional)"></textarea> | ||
</fieldset> | ||
</div> | ||
<div class="buttons panel-footer"> | ||
<span tal:replace="structure context/@@authenticator/authenticator"/> | ||
<button id="form-buttons-create" name="form.buttons.create" type="submit" value="Create" class="icon-ok-circle close-panel focus"> | ||
Create | ||
</button> | ||
<button id="form-buttons-cancel" name="form.buttons.cancel" type="button" value="Cancel" class="icon-cancel-circle close-panel"> | ||
Cancel | ||
</button> | ||
</div> | ||
</form> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
# -*- coding: utf-8 -*- | ||
from plone import api | ||
from ploneintranet.workspace.tests.base import FunctionalBaseTestCase | ||
|
||
|
||
class TestAddContent(FunctionalBaseTestCase): | ||
|
||
def setUp(self): | ||
super(TestAddContent, self).setUp() | ||
self.login_as_portal_owner() | ||
workspace_folder = api.content.create( | ||
self.portal, | ||
'ploneintranet.workspace.workspacefolder', | ||
'example-workspace' | ||
) | ||
self.workspace = workspace_folder | ||
|
||
# Commit so the testbrowser can see the workspace | ||
import transaction | ||
transaction.commit() | ||
|
||
def test_add_content_form(self): | ||
form = api.content.get_view( | ||
'add_content', self.workspace, self.request) | ||
result = form() | ||
self.assertIn('Create document', result) | ||
self.assertIn('<button id="form-buttons-create"', result) | ||
|
||
def test_add_folder_form(self): | ||
form = api.content.get_view( | ||
'add_folder', self.workspace, self.request) | ||
result = form() | ||
self.assertIn('Create folder', result) | ||
self.assertIn('<button id="form-buttons-create"', result) | ||
|
||
def test_add_content_document(self): | ||
self.browser_login_as_site_administrator() | ||
self.browser.open('%s/@@add_content' % self.workspace.absolute_url()) | ||
self.browser.getControl(name='title').value = 'Some Title' | ||
self.browser.getControl(name='description').value = 'My Desc' | ||
self.browser.getControl(name='form.buttons.create').click() | ||
new = self.workspace['some-title'] | ||
self.assertEqual(new.portal_type, 'Document') | ||
self.assertEqual(new.title, u'Some Title') | ||
self.assertEqual(new.description, u'My Desc') | ||
|
||
def test_add_content_event(self): | ||
self.browser_login_as_site_administrator() | ||
self.browser.open('%s/@@add_content' % self.workspace.absolute_url()) | ||
self.browser.getControl(name='portal_type').value = ['Event'] | ||
self.browser.getControl(name='title').value = 'My Event' | ||
self.browser.getControl(name='form.buttons.create').click() | ||
new = self.workspace['my-event'] | ||
self.assertEqual(new.portal_type, 'Event') | ||
|
||
def test_add_content_image(self): | ||
self.browser_login_as_site_administrator() | ||
self.browser.open('%s/@@add_content' % self.workspace.absolute_url()) | ||
self.browser.getControl(name='portal_type').value = ['Image'] | ||
self.browser.getControl(name='title').value = 'My Image' | ||
self.browser.getControl(name='form.buttons.create').click() | ||
new = self.workspace['my-image'] | ||
self.assertEqual(new.portal_type, 'Image') | ||
|
||
def test_add_folder(self): | ||
self.browser_login_as_site_administrator() | ||
self.browser.open('%s/@@add_folder' % self.workspace.absolute_url()) | ||
self.assertEqual( | ||
self.browser.getControl(name='portal_type').value, 'Folder') | ||
self.browser.getControl(name='title').value = 'My Folder' | ||
self.browser.getControl(name='form.buttons.create').click() | ||
new = self.workspace['my-folder'] | ||
self.assertEqual(new.portal_type, 'Folder') |