appy.gen: continued work on Appy-specific template.

This commit is contained in:
Gaetan Delannay 2011-09-15 15:52:21 +02:00
parent b6dcc42038
commit 48acf65bdc
10 changed files with 135 additions and 37 deletions

View file

@ -430,11 +430,6 @@ class PloneInstaller:
def manageLanguages(self): def manageLanguages(self):
'''Manages the languages supported by the application.''' '''Manages the languages supported by the application.'''
if self.languageSelector:
# We must install the PloneLanguageTool if not done yet
qi = self.ploneSite.portal_quickinstaller
if not qi.isProductInstalled('PloneLanguageTool'):
qi.installProduct('PloneLanguageTool')
languageTool = self.ploneSite.portal_languages languageTool = self.ploneSite.portal_languages
defLanguage = self.languages[0] defLanguage = self.languages[0]
languageTool.manage_setLanguageSettings(defaultLanguage=defLanguage, languageTool.manage_setLanguageSettings(defaultLanguage=defLanguage,

View file

@ -791,8 +791,16 @@ class ToolMixin(BaseMixin):
msg = self.translate(u'Welcome! You are now logged in.', msg = self.translate(u'Welcome! You are now logged in.',
domain='plone') domain='plone')
logMsg = 'User "%s" has been logged in.' % login logMsg = 'User "%s" has been logged in.' % login
msg = msg.encode('utf-8')
self.log(logMsg) self.log(logMsg)
return self.goto(rq['HTTP_REFERER'], msg.encode('utf-8')) # Bring Managers to the config, leave others on the main page.
user = self.portal_membership.getAuthenticatedMember()
if user.has_role('Manager'):
# Bring the user to the configuration
url = self.goto(self.absolute_url(), msg)
else:
url = self.goto(rq['HTTP_REFERER'], msg)
return url
def performLogout(self): def performLogout(self):
'''Logs out the current user when he clicks on "disconnect".''' '''Logs out the current user when he clicks on "disconnect".'''
@ -814,8 +822,7 @@ class ToolMixin(BaseMixin):
session.invalidate() session.invalidate()
from Products.CMFPlone import transaction_note from Products.CMFPlone import transaction_note
transaction_note('Logged out') transaction_note('Logged out')
self.getProductConfig().logger.info('User "%s" has been logged out.' % \ self.log('User "%s" has been logged out.' % userId)
userId)
# Remove user from variable "loggedUsers" # Remove user from variable "loggedUsers"
from appy.gen.plone25.installer import loggedUsers from appy.gen.plone25.installer import loggedUsers
if loggedUsers.has_key(userId): del loggedUsers[userId] if loggedUsers.has_key(userId): del loggedUsers[userId]

View file

@ -5,7 +5,14 @@ body {
a {text-decoration: none; color: #747171;} a {text-decoration: none; color: #747171;}
a:visited {color: #840107;} a:visited {color: #840107;}
table { font-size: 100%; border-spacing: 0px; } table { font-size: 100%; border-spacing: 0px; border-collapse:collapse;}
input {border: 1px solid #a79e9e;}
form {margin: 0; padding: 0;}
p {margin: 0;}
h1 {font-size: 11pt; margin:0;}
h2 {font-size: 10pt; margin:0; font-style: italic; font-weight: normal;}
h3 {font-size: 9pt; margin:0; font-weight: bold;}
.main { .main {
width: 900px; width: 900px;
@ -16,6 +23,15 @@ table { font-size: 100%; border-spacing: 0px; }
box-shadow: 3px 3px 3px #A9A9A9; box-shadow: 3px 3px 3px #A9A9A9;
} }
.top { height: 80px; margin-left: 3em; vertical-align: top;} .top { height: 75px; margin-left: 3em; vertical-align: top;}
.lang { margin-right: 3px; } .lang { margin-right: 3px; }
.auth { background-color: grey;} .userStrip {
background-color: #a2a2a2;
border-top: 3px solid #525252;
border-bottom: 2px solid #9b0000;
height: 30px;
}
.login { margin-top: 2px; margin-bottom: 2px; color: white;}
.buttons { margin-left: 4px; }
.content {margin: 7px 0 9px 4px;}
.message {color: #9b0000; font-style: italic; position: absolute; top: -50px; right: 5px}

32
gen/plone25/skin/appy.js Normal file
View file

@ -0,0 +1,32 @@
function cookiesAreEnabled() {
// Test whether cookies are enabled by attempting to set a cookie and then
// change its value
var c = "areYourCookiesEnabled=0";
document.cookie = c;
var dc = document.cookie;
// Cookie not set? Fail
if (dc.indexOf(c) == -1) return 0;
// Change test cookie
c = "areYourCookiesEnabled=1";
document.cookie = c;
dc = document.cookie;
// Cookie not changed? fail
if (dc.indexOf(c) == -1) return 0;
// Delete cookie
document.cookie = "areYourCookiesEnabled=; expires=Thu, 01-Jan-70 00:00:01 GMT";
return 1;
}
function setLoginVars() {
// Indicate if JS is enabled
document.getElementById('js_enabled').value = 1;
// Indicate if cookies are enabled
document.getElementById('cookies_enabled').value = cookiesAreEnabled();
// Copy login and password length to alternative vars since current vars will
// be removed from the request by zope's authentication mechanism.
document.getElementById('login_name').value = document.getElementById('__ac_name').value;
password = document.getElementById('__ac_password');
emptyPassword = document.getElementById('pwd_empty');
if (password.value.length==0) emptyPassword.value = '1';
else emptyPassword.value = '0';
}

BIN
gen/plone25/skin/home.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 589 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

BIN
gen/plone25/skin/logout.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

View file

@ -12,7 +12,8 @@
<head> <head>
<title tal:content="tool/getAppName"></title> <title tal:content="tool/getAppName"></title>
<link rel="stylesheet" tal:attributes="href string:$appUrl/skyn/appy.css" type="text/css"> <link rel="stylesheet" type="text/css" tal:attributes="href string:$appUrl/skyn/appy.css"/>
<script type="text/javascript" tal:attributes="src string:$appUrl/skyn/appy.js"></script>
</head> </head>
<body> <body>
@ -23,7 +24,7 @@
<table width="100%"> <table width="100%">
<tr valign="top"> <tr valign="top">
<tal:comment replace="nothing">Logo</tal:comment> <tal:comment replace="nothing">Logo</tal:comment>
<td><img src="skyn/logo.jpg"/></td> <td><a tal:attributes="href appUrl"><img src="skyn/logo.jpg"/></a></td>
<tal:comment replace="nothing">Language selector (links or listbox)</tal:comment> <tal:comment replace="nothing">Language selector (links or listbox)</tal:comment>
<td align="right" <td align="right"
tal:define="appLangs app/portal_languages/listSupportedLanguages; tal:define="appLangs app/portal_languages/listSupportedLanguages;
@ -54,25 +55,72 @@
</table> </table>
</td> </td>
</tr> </tr>
<tal:comment replace="nothing">The login strip</tal:comment> <tal:comment replace="nothing">The user data strip</tal:comment>
<tr class="auth">
<td>
<table witdh="100%">
<tr> <tr>
<td>a </td> <td>
<table class="userStrip" width="100%">
<tr>
<td>
<tal:comment replace="nothing">The user login form for anonymous users</tal:comment>
<table align="center" tal:condition="isAnon" class="login"
tal:define="auth nocall:app/acl_users/credentials_cookie_auth">
<tr><td>
<form name="loginform" method="post"
tal:attributes="action python: tool.absolute_url() + '/performLogin'">
<input type="hidden" name="js_enabled" id="js_enabled" value="0"/>
<input type="hidden" name="cookies_enabled" id="cookies_enabled" value=""/>
<input type="hidden" name="login_name" id="login_name" value=""/>
<input type="hidden" name="pwd_empty" id="pwd_empty" value="0"/>
<span>Login</span>&nbsp;
<input type="text" size="15" name="__ac_name" id="__ac_name" value=""/>&nbsp;
<span>Password</span>&nbsp;
<input type="password" size="15" name="__ac_password" id="__ac_password"/>
<input type="submit" name="submit" onclick="setLoginVars()"
tal:define="label python: _('Login');" tal:attributes="value label; alt label;"/>
</form>
</td></tr>
</table>
<tal:comment replace="nothing">User info and controls for authenticated users</tal:comment>
<table tal:condition="not: isAnon" class="buttons">
<tr>
<td>
<!-- Go home -->
<a tal:attributes="href appUrl; title python: _('home')">
<img src="skyn/home.gif"/>
</a>
<!-- Logout -->
<a tal:attributes="href python: tool.absolute_url() + '/performLogout';
title python: _('logout')">
<img src="skyn/logout.gif"/>
</a>
</td>
</tr> </tr>
</table> </table>
</td> </td>
</tr> </tr>
</table>
</td>
</tr>
<tal:comment replace="nothing">The message strip</tal:comment>
<tr tal:define="msg request/portal_status_message | nothing">
<td>
<div style="position: relative" align="right">
<div tal:condition="msg" class="message" tal:content="structure msg"></div>
</div>
</td>
</tr>
<tr> <tr>
<td><span metal:define-slot="content"><span tal:content="isAnon"></span></span></td> <td>
<table class="content" width="100%">
<tr>
<td><span metal:define-slot="content"></span>
</td>
</tr>
</table>
</td>
</tr> </tr>
</table> </table>
<br/>
<h1>Appy</h1>
<h2>Sub appy</h2>
<h3>Sub sub appy</h3>
<p>Hello</p>
</body> </body>
</html> </html>

View file

@ -3,14 +3,14 @@ from Products.CMFCore.utils import getToolByName
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
def installProduct(context): def installProduct(context):
'''Installs the necessary products for running PloneMeeting.''' '''Installs the necessary products for Appy.'''
portal = context.getSite() portal = context.getSite()
qi = getToolByName(portal, 'portal_quickinstaller') qi = getToolByName(portal, 'portal_quickinstaller')
if not qi.isProductInstalled('Archetypes'): if not qi.isProductInstalled('PloneLanguageTool'):
qi.installProduct('Archetypes') qi.installProduct('PloneLanguageTool')
if not qi.isProductInstalled('<!applicationName!>'): if not qi.isProductInstalled('<!applicationName!>'):
qi.installProduct('<!applicationName!>') qi.installProduct('<!applicationName!>')
return "Product <!applicationName!> installed." return "<!applicationName!> installed."
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------
def install_default(context): def install_default(context):

View file

@ -89,7 +89,7 @@ class PoMessage:
BAD_SELECT_VALUE = 'The value is not among possible values for this field.' BAD_SELECT_VALUE = 'The value is not among possible values for this field.'
ACTION_OK = 'The action has been successfully executed.' ACTION_OK = 'The action has been successfully executed.'
ACTION_KO = 'A problem occurred while executing the action.' ACTION_KO = 'A problem occurred while executing the action.'
FRONT_PAGE_TEXT = 'Welcome to this Appy-powered Plone site.' FRONT_PAGE_TEXT = 'Welcome to this Appy-powered site.'
EMAIL_SUBJECT = '${siteTitle} - Action \\"${transitionName}\\" has been ' \ EMAIL_SUBJECT = '${siteTitle} - Action \\"${transitionName}\\" has been ' \
'performed on element entitled \\"${objectTitle}\\".' 'performed on element entitled \\"${objectTitle}\\".'
EMAIL_BODY = 'You can consult this element at ${objectUrl}.' EMAIL_BODY = 'You can consult this element at ${objectUrl}.'