From: Benoît Pin Date: Sun, 14 Nov 2010 21:28:02 +0000 (+0100) Subject: Le thème créé pour realis est reconverti en thème « photo » pour Plinn core. X-Git-Url: https://scm.cri.ensmp.fr/git/Plinn.git/commitdiff_plain/de068d5b8a1fd46a70f75f4e20e581ee846f866d?ds=inline;hp=174a626682442c7b8513117e91ba6b8e956b818d Le thème créé pour realis est reconverti en thème « photo » pour Plinn core. --- diff --git a/directories.zcml b/directories.zcml index 714ce40..1c12729 100644 --- a/directories.zcml +++ b/directories.zcml @@ -1,6 +1,7 @@ + diff --git a/profiles/photo/skins.xml b/profiles/photo/skins.xml index 1ca266e..4ab03bc 100644 --- a/profiles/photo/skins.xml +++ b/profiles/photo/skins.xml @@ -1,6 +1,6 @@ @@ -45,6 +45,8 @@ directory="Products.Plinn:skins/generic"/> + - + - + diff --git a/skins/photo_theme/base_properties.props b/skins/photo_theme/base_properties.props new file mode 100755 index 0000000..a32b6ea --- /dev/null +++ b/skins/photo_theme/base_properties.props @@ -0,0 +1,65 @@ +title:string=Color, font, logo and border defaults + +backgroundColor:string=#484848 +fontColor:string=#9da097 +fontFamily:string=Arial, Helvetica, Geneva, Swiss, SunSans-Regular, sans-serif +fontBaseSize:string=90% +headingFontFamily:string=Arial, Helvetica, Geneva, Swiss, SunSans-Regular, sans-serif + +linkColor:string=#e6eadd +linkHoverColor:string=#f28c18 + +fontSmallSize:string=90% + + +topbarBackgroundColor:string=#000 +breadcrumbsBackground:string=#484848 + +tabsBorderColor:string=#202020 +tabsBorderWidth:string=2px +tabsBottomBorderSelectedWidth:string=3px +tabsFontColor:string=#e6eadd +tabsBackgroundColor:string=#484848 +selectedTabBackgroundColor:string=#484848 + +descriptionColor:string=#9da097 + +inputFontColor:string=#000 + +evenRowBackgroundColor:string=#202020 +oddRowBackgroundColor:string=#484848 +highLightColor:string=#f28c18 + +messageBackgroundColor:string=#484848 +messageBorderColor:string=#484848 + +weekTableFontHeight:int=10 +weekTableGridStep:int=10 +todayBackgroundColor:string=#f0f0f0 +calGridBorderColor:string=#ccc +calHalfGridBorderColor:string=#e5e5e5 + +contentBackgroundColor:string=#484848 + +configFontColor:string=#fff +configBackgroundColor:string=#3e3e3e + +portfolioSlideBackgroundColor:string=#f2f2f2 + +memberActionsBoxBackground:string=#484848 +footerBackgroundColor:string=#707070 +outlineColor:string=#F28C18 +bylineBackgroundColor:string=#202020 +messageFontColor:string=#F28C18 +listingHeaderBackgroundColor:string=#000 +listingHeaderFontColor:string=#ddd +listingBarBorderColor:string=#202020 +newsTitleBorderColor:string=#ddd +boxesBorderColor:string=#ddd +specialLinkColor:string=#e6eadd +specialLinkHoverColor:string=#f28c18 +bulletColor:string=#ef8e32 +boxeHeaderBackgroundColor:string=#484848 + +twoColumnFormFontColor:string=#fff +twoColumnFormBackground:string=#3A3A3A diff --git a/skins/photo_theme/collapsePalette.gif b/skins/photo_theme/collapsePalette.gif new file mode 100644 index 0000000..2777170 Binary files /dev/null and b/skins/photo_theme/collapsePalette.gif differ diff --git a/skins/photo_theme/collapsedPalette.gif b/skins/photo_theme/collapsedPalette.gif new file mode 100644 index 0000000..17caf53 Binary files /dev/null and b/skins/photo_theme/collapsedPalette.gif differ diff --git a/skins/photo_theme/createMemberContent.py b/skins/photo_theme/createMemberContent.py new file mode 100755 index 0000000..0256a30 --- /dev/null +++ b/skins/photo_theme/createMemberContent.py @@ -0,0 +1,2 @@ +##parameters=member,member_id,member_folder +return None \ No newline at end of file diff --git a/skins/photo_theme/customer_join_form.py b/skins/photo_theme/customer_join_form.py new file mode 100755 index 0000000..a1e3111 --- /dev/null +++ b/skins/photo_theme/customer_join_form.py @@ -0,0 +1,61 @@ +##parameters=add='' +from Products.CMFCore.utils import getToolByName +from Products.realis.utils import translate +from ZTUtils import make_query as mq +_ = lambda msg : translate(msg, context) +ptool = getToolByName(script, 'portal_properties') +atool = getToolByName(script, 'portal_actions') +validate_email = ptool.getProperty('validate_email') +options = {} +options['validate_email'] = validate_email + +req = context.REQUEST +resp = req.RESPONSE +form = req.form +fg = lambda name : form.get(name,'').strip() + + +if add and \ + context.validatePassword(**form) and \ + context.customer_add_control(**form) and \ + context.validatePrivateAccess(**form) : + came_from = fg('came_from') + if came_from : + return context.setRedirect( atool, 'user/logged_in' + , came_from = came_from + , __ac_name=fg('member_id') + , __ac_password=fg('password')) + #return resp.redirect('%s?%s' % ( came_from, mq(__ac_name=fg('member_id'), __ac_password=fg('password'), noajax='1')) ) + else: + options['member_id'] = fg('member_id') + options['password'] = fg('password') + options['form_action'] = target = atool.getActionInfo('user/logged_in')['url'] + return context.confirm_join_template(**options) + +continuationFields = [ + 'given_name' + , 'name' + , 'member_email' + , 'member_id' + , 'password' + , 'confirm' + , 'send_password' + , 'wedding_id' + , 'wedding_password' + , 'wedding_password_confirm' + , 'billing_address' + , 'billing_city' + , 'billing_zipcode' + , 'country' + , 'phone' + , 'accept_gcs'] + + +for name in continuationFields : + options[name] = fg(name) + +# TODO try to be more clever... +if not options['country']: + options['country'] = 'FR' +options['came_from'] = fg('came_from') +return context.customer_join_template(**options) diff --git a/skins/photo_theme/customer_join_template.pt b/skins/photo_theme/customer_join_template.pt new file mode 100644 index 0000000..5c2a95c --- /dev/null +++ b/skins/photo_theme/customer_join_template.pt @@ -0,0 +1,159 @@ + + + + + +
+
+
+

New customer account

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Customer informations

+
First name + +
Last name + +
Email Address + +
Member ID + +
Password + +
Password (confirm) + +
Mail Password? + + +

+

Accès à des images privées

+ veuillez entrer le code d'accès pour accéder / acheter les images
+ d'un événement privé couvert par les photographes de notre agence. +
Identifiant collection privée + +
Mot de passe associé + +
Confirmation du mot de passe + +

+

Billing informations

+
Address + +
City + +
Zip code + +
Country + +
Phone + +

+ + I accept general conditions of sales +
  + + + + +
+
+ + diff --git a/skins/photo_theme/doFormSearch.py b/skins/photo_theme/doFormSearch.py new file mode 100755 index 0000000..d917835 --- /dev/null +++ b/skins/photo_theme/doFormSearch.py @@ -0,0 +1,45 @@ +## Script (Python) "doFormSearch" +##parameters=REQUEST +##title=Pre-process form variables, then return catalog query results. +## +vars = REQUEST.form +form_vars = {} +skip_vars = ['strCreator'] +select_vars = ( 'review_state' + , 'Subject' + , 'portal_type' + ) +date_vars = ('created', + ) +epoch = DateTime("1970/01/01 00:00:00 GMT") + +for k, v in vars.items(): + + if k in select_vars: + if same_type( v, [] ): + v = filter( None, v ) + if not v: + continue + + if k in date_vars: + if v == epoch and vars.get(k+'_usage') == 'range:min': + skip_vars.append(k+'_usage') + continue + + form_vars[ k ] = v + +if form_vars.has_key('portal_type') : + try : form_vars['portal_type'].remove('Member Data') + except ValueError : pass +else : + form_vars['portal_type'] = context.portal_types.objectIds() + +for k in skip_vars: + if form_vars.has_key(k) : + del form_vars[k] + +if vars.has_key('strCreator') : + form_vars['Creator'] = [ m.id for m in context.portal_membership.looseSearchMembers(vars['strCreator']) ] + +results = context.portal_catalog( form_vars ) +return {'results':results, 'searchArgs':form_vars} diff --git a/skins/photo_theme/expandPalette.gif b/skins/photo_theme/expandPalette.gif new file mode 100644 index 0000000..cb52874 Binary files /dev/null and b/skins/photo_theme/expandPalette.gif differ diff --git a/skins/photo_theme/expandedPalette.gif b/skins/photo_theme/expandedPalette.gif new file mode 100644 index 0000000..9b4f5a0 Binary files /dev/null and b/skins/photo_theme/expandedPalette.gif differ diff --git a/skins/photo_theme/folder_contents.py b/skins/photo_theme/folder_contents.py new file mode 100755 index 0000000..e0bc4d8 --- /dev/null +++ b/skins/photo_theme/folder_contents.py @@ -0,0 +1,232 @@ +##parameters=b_start=0, key='', reverse=0, ids=(), items_copy='', items_cut='', items_delete='', items_new='', items_paste='', items_rename='', items_up='', items_down='', items_top='', items_bottom='', items_sort='', template='', macro='', ajax='' +## +from Products.Plinn.PloneMisc import Batch +from DateTime import DateTime +locale_date_fmt = context.locale_date_fmt() +from ZTUtils import make_query +from Products.CMFCore.utils import getToolByName +from Products.CMFDefault.permissions import AddPortalContent +from Products.CMFDefault.permissions import DeleteObjects +from Products.CMFDefault.permissions import ListFolderContents +from Products.CMFDefault.permissions import ManageProperties +from Products.CMFDefault.permissions import ViewManagementScreens +from Products.CMFDefault.permissions import ModifyPortalContent +from Products.CMFDefault.utils import html_marshal + +mtool = getToolByName(script, 'portal_membership') +checkPermission = mtool.checkPermission +utool = getToolByName(script, 'portal_url') +portal_url = utool() + + +form = context.REQUEST.form +default_target = 'object/folderContents' +default_kw = {'b_start': b_start, 'key': key, 'reverse': reverse, 'ajax' : ajax} +if items_copy : + if ajax : default_kw['syncFragments']=['rightCell'] + if context.validateItemIds(**form) and \ + context.folder_copy_control(**form) and \ + context.setRedirect(context, default_target, **default_kw): + return +elif items_cut : + if ajax : default_kw['syncFragments']=['rightCell'] + if context.validateItemIds(**form) and \ + context.folder_cut_control(**form) and \ + context.setRedirect(context, default_target, **default_kw): + return +elif items_delete and \ + context.validateItemIds(**form) and \ + context.folder_delete_control(**form) and \ + context.setRedirect(context, default_target, **default_kw): + return +elif items_new and \ + context.setRedirect(context, 'object/new', **default_kw): + return +elif items_paste : + if ajax : default_kw['syncFragments']=['rightCell'] + if context.folder_paste_control(**form) and \ + context.setRedirect(context, default_target, **default_kw): + return +elif items_rename and \ + context.validateItemIds(**form) and \ + context.setRedirect(context, 'object/rename_items', ids=ids, + **default_kw): + return +elif items_sort and \ + context.folder_sort_control(**form) and \ + context.setRedirect(context, default_target, b_start=b_start): + return +elif items_up and \ + context.validateItemIds(**form) and \ + context.folder_up_control(**form) and \ + context.setRedirect(context, default_target, **default_kw): + return +elif items_down and \ + context.validateItemIds(**form) and \ + context.folder_down_control(**form) and \ + context.setRedirect(context, default_target, **default_kw): + return +elif items_top and \ + context.validateItemIds(**form) and \ + context.folder_top_control(**form) and \ + context.setRedirect(context, default_target, **default_kw): + return +elif items_bottom and \ + context.validateItemIds(**form) and \ + context.folder_bottom_control(**form) and \ + context.setRedirect(context, default_target, **default_kw): + return + + +options = {} + +items_add_allowed = checkPermission(AddPortalContent, context) +upitems_list_allowed = checkPermission(ListFolderContents, context, 'aq_parent') +manage_props_allowed = checkPermission(ManageProperties, context) + +target = context.getActionInfo(default_target)['url'] + +if not key: + (key, reverse) = context.getDefaultSorting() + is_default = 1 +elif (key, reverse) == context.getDefaultSorting(): + is_default = 1 +else: + is_default = 0 + +columns = ( {'key': 'Lock', + 'title': '', + 'width': '16', + 'colspan': None} + , {'key': 'Type', + 'title': 'Type', + 'width': None, + 'colspan': '2'} + , {'key': 'id', + 'title': 'Name', + 'width': None, + 'colspan': None} + , {'key': 'modified', + 'title': 'Last Modified', + 'width': None, + 'colspan': None} + , {'key': 'position', + 'title': 'Position', + 'width': None, + 'colspan': None } + ) + +for column in columns: + images = [] + if key == column['key'] : + if not is_default and manage_props_allowed : + images.append( {'src' : getattr(context, 'set_default_sorting.gif').absolute_url(), + 'alt' : 'Set Sorting as Default', + 'id' : 'SetSortingAsDefault', + 'href': '%s?%s' % (target, make_query(items_sort=True, + key=key, + reverse= (key != 'position' and [reverse] or [False])[0] ) + ) + } + ) + + if key != 'position' : + if reverse : + toggleImg = getattr(context, 'arrowDown.gif') + alt = 'descending sort' + else : + toggleImg = getattr(context, 'arrowUp.gif') + alt = 'ascending sort' + query = make_query(key=column['key'], reverse = not reverse) + else : + toggleImg = getattr(context, 'arrowUp.gif') + alt = 'ascending sort' + query = make_query(key=column['key']) + images.append( {'src' : toggleImg.absolute_url(), 'alt' : alt} ) + else : + if key != 'position' : + query = make_query(key=column['key'], reverse = reverse) + else : + query = make_query(key=column['key']) + + column['url'] = '%s?%s' % (target, query) + column['images'] = images + +context.filterCookie() +folderfilter = context.REQUEST.get('folderfilter', '') +filter = context.decodeFolderFilter(folderfilter) +items = context.listCatalogedContents(contentFilter=filter) +sort_dir = reverse and 'desc' or 'asc' +sortFunc = key in ['Type'] and 'nocase' or 'cmp' +items = sequence.sort( items, ((key, sortFunc, sort_dir),) ) +batch_obj = Batch(items, context.default_batch_size, b_start, orphan=0, quantumleap=1) +items = [] +i = 1 +display_delete_button = True # TODO : à revoirs +for item in batch_obj: + item_icon = item.getIcon + item_id = item.getId + item_position = key == 'position' and str(b_start + i) or '...' + i += 1 + item_url = item.getURL() + #try : item_delete_allowed = context.objectIdCanBeDeleted(item_id) + #except : item_delete_allowed = checkPermission(DeleteObjects, context) # std zope perm + #if not display_delete_button : + # display_delete_button = item_delete_allowed + items.append( + {'lock' : False, + 'checkbox': True, + 'icon': item_icon and ( '%s/%s' % (portal_url, item_icon) ) or '', + 'id': item_id, + 'modified': item.modified.strftime(locale_date_fmt), + 'position': item_position, + 'title_or_id': item.Title or item_id, + 'type': item.Type or None, + 'url': item_url } ) + +options['batch'] = { 'listColumnInfos': tuple(columns), + 'listItemInfos': tuple(items), + 'sort_key' : key, + 'sort_dir' : sort_dir, + 'batch_obj': batch_obj } + +hidden_vars = [] +for name, value in html_marshal(**default_kw): + hidden_vars.append( {'name': name, 'value': value} ) + +# buttons +buttons = [] +if items_add_allowed and context.allowedContentTypes(): + buttons.append( {'name': 'items_new', 'value': 'New...'} ) + if items: + buttons.append( {'name': 'items_rename', 'value': 'Rename'} ) + +if checkPermission(ViewManagementScreens, context) and items: + buttons.append( {'name': 'items_cut', 'value': 'Cut'} ) + buttons.append( {'name': 'items_copy', 'value': 'Copy'} ) + +if items_add_allowed and context.cb_dataValid(): + buttons.append( {'name': 'items_paste', 'value': 'Paste'} ) + +if display_delete_button and items: + buttons.append( {'name': 'items_delete', 'value': 'Delete'} ) + +length = batch_obj.sequence_length +is_orderable = manage_props_allowed and (key == 'position') and length > 1 +is_sortable = manage_props_allowed and not is_default +options['form'] = { 'action': target, + 'listHiddenVarInfos': tuple(hidden_vars), + 'listButtonInfos': tuple(buttons), + 'is_orderable': is_orderable, + 'is_sortable': is_sortable } +if not ajax and is_orderable : + deltas = range( 1, min(5, length) ) + range(5, length, 5) + options['form']['listDeltas'] = tuple(deltas) + +if template and macro : + options['template'] = template + options['macro'] = macro + return context.use_macro(**options) +else : + return context.folder_contents_template(**options) + diff --git a/skins/photo_theme/folder_contents_macros.pt b/skins/photo_theme/folder_contents_macros.pt new file mode 100644 index 0000000..00d2ee9 --- /dev/null +++ b/skins/photo_theme/folder_contents_macros.pt @@ -0,0 +1,118 @@ + + + + + + + folder contents macros + + + +
+ Folder url for script + + first batch item position + + +
+ +
+ batch navigation +
+ + + + + + + + + + + + + + + + + + + +
+ Type + + + +
lock + + + + + + + + id + + • title + + + + 2001 + + 1 +
+ +
+ batch navigation +
+ + + + \ No newline at end of file diff --git a/skins/photo_theme/global_plinn_style.css.dtml b/skins/photo_theme/global_plinn_style.css.dtml new file mode 100755 index 0000000..763ec4c --- /dev/null +++ b/skins/photo_theme/global_plinn_style.css.dtml @@ -0,0 +1,16 @@ +/* + + +*/ + +/* zpt_stylesheet.css */ + + +/* plinn_style.css */ + + +/* Portfolio */ + + +/* realis_style.css */ + \ No newline at end of file diff --git a/skins/photo_theme/global_plinn_style.css.dtml.metadata b/skins/photo_theme/global_plinn_style.css.dtml.metadata new file mode 100644 index 0000000..855fecc --- /dev/null +++ b/skins/photo_theme/global_plinn_style.css.dtml.metadata @@ -0,0 +1,2 @@ +[default] +cache=HTTPCache diff --git a/skins/photo_theme/homepage_dispatcher.py b/skins/photo_theme/homepage_dispatcher.py new file mode 100755 index 0000000..57262be --- /dev/null +++ b/skins/photo_theme/homepage_dispatcher.py @@ -0,0 +1,28 @@ +##parameters= +from Products.CMFCore.utils import getToolByName +from ZTUtils import make_query as mq +from Products.CMFDefault.utils import Message as _ + +req = context.REQUEST +resp = req.RESPONSE +came_from = req.form.get('came_from') + +if came_from : + urlQs = came_from.split('?', 1) + if len(urlQs) == 1 : + came_from = '%s?%s' % (urlQs[0], mq(portal_status_message=_('Login success'))) + else : + url, qs= urlQs + came_from = '%s?%s&%s' % (url, qs, mq(portal_status_message=_('Login success'))) + return resp.redirect(came_from) + +else : + from Products.realis.utils import searchContentsWithLocalRolesForAuthenticatedUser as search + results = search(context, portal_type='Portfolio') + if results : + atool = getToolByName(context, 'portal_actions') + return context.setRedirect(atool, 'user/my_albums', portal_status_message=_('Login success')) + else : + utool = getToolByName(context, 'portal_url') + return resp.redirect('%s?%s' % (utool(), mq(portal_status_message=_('Login success')))) + \ No newline at end of file diff --git a/skins/photo_theme/imagerotator.swf b/skins/photo_theme/imagerotator.swf new file mode 100644 index 0000000..0156f0e Binary files /dev/null and b/skins/photo_theme/imagerotator.swf differ diff --git a/skins/photo_theme/info.gif b/skins/photo_theme/info.gif new file mode 100644 index 0000000..472921c Binary files /dev/null and b/skins/photo_theme/info.gif differ diff --git a/skins/photo_theme/loading_progress.gif b/skins/photo_theme/loading_progress.gif new file mode 100755 index 0000000..c2f0e7c Binary files /dev/null and b/skins/photo_theme/loading_progress.gif differ diff --git a/skins/photo_theme/logo.gif b/skins/photo_theme/logo.gif new file mode 100755 index 0000000..75e0264 Binary files /dev/null and b/skins/photo_theme/logo.gif differ diff --git a/skins/photo_theme/logout.py b/skins/photo_theme/logout.py new file mode 100755 index 0000000..f3ec6fe --- /dev/null +++ b/skins/photo_theme/logout.py @@ -0,0 +1,17 @@ +## Script (Python) "logout" +##title=Logout handler +##parameters=ajax='' +from Products.CMFCore.utils import getToolByName +from Products.CMFDefault.utils import translate +def _(msg) : return translate(msg, context) +utool = getToolByName(context, 'portal_url') +REQUEST = context.REQUEST +if REQUEST.has_key('portal_skin'): + context.portal_skins.clearSkinCookie() +REQUEST.RESPONSE.expireCookie('__ac', path='/') +session = REQUEST.SESSION +for k in session.keys() : + del session[k] +context.setStatus(True, _('You have been logged out.')) +portal = utool.getPortalObject() +return context.setRedirect(portal, 'object/view') \ No newline at end of file diff --git a/skins/photo_theme/main_template_macros.pt b/skins/photo_theme/main_template_macros.pt new file mode 100644 index 0000000..71c04a0 --- /dev/null +++ b/skins/photo_theme/main_template_macros.pt @@ -0,0 +1,123 @@ + + + + + + + + + + + +
+ + +
+ + + + + + + +
+ + + + + +
+
+ + +
+ + + + + + +
Guest
+
+ + +
+ + You are here: ID / +
+ + +
+
+ Paste +
+
left boxes
+
+ +
+ +
+ Paste +
+ +
right boxes
+ +
Clipboard
+
+ + + + \ No newline at end of file diff --git a/skins/photo_theme/main_template_standard.pt b/skins/photo_theme/main_template_standard.pt new file mode 100755 index 0000000..724b156 --- /dev/null +++ b/skins/photo_theme/main_template_standard.pt @@ -0,0 +1,168 @@ + + + + + + + + + Title goes here + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Top bar
+ + + +
+ + + + + + + +
+
+ Left cell +
+
+ Right cell +
+
+ +
+ Information + Status message. +
+ + +
+
special context header
+
+
Content tabs
+
Additional tabs
+
+
+
+
+

+ Page Title +

+
+ Description of the resource goes here, perhaps even wrapping lines; this is to make it long enough to test. +
+
+
+ +
+
+

Section Header

+

The content of the object is rendered + hre. Lorem ipsum dolorem. Nihil obstat imprimatur. Semper ubi sub ubi. + Non illegitimi carborundum. In vino veritas. E pluribus unam. +

+
+
+
+
+ Content by me +
+
+
footer slot
+
+
+ +
+
+ + + + +
\ No newline at end of file diff --git a/skins/photo_theme/member_albums.py b/skins/photo_theme/member_albums.py new file mode 100755 index 0000000..9425f2b --- /dev/null +++ b/skins/photo_theme/member_albums.py @@ -0,0 +1,6 @@ +##parameters= + +from Products.realis.utils import searchContentsWithLocalRolesForAuthenticatedUser as search + +results = search(context, portal_type='Portfolio') +return context.member_albums_template(results = results) \ No newline at end of file diff --git a/skins/photo_theme/member_albums_template.pt b/skins/photo_theme/member_albums_template.pt new file mode 100644 index 0000000..eceee09 --- /dev/null +++ b/skins/photo_theme/member_albums_template.pt @@ -0,0 +1,42 @@ + + + Member albums' template + + + + + +
+

My albums

+
You don't have any album yet.
+ +
+ + diff --git a/skins/photo_theme/mi.gif b/skins/photo_theme/mi.gif new file mode 100644 index 0000000..cb71f7e Binary files /dev/null and b/skins/photo_theme/mi.gif differ diff --git a/skins/photo_theme/mi_ani.gif b/skins/photo_theme/mi_ani.gif new file mode 100644 index 0000000..10c759a Binary files /dev/null and b/skins/photo_theme/mi_ani.gif differ diff --git a/skins/photo_theme/pl.gif b/skins/photo_theme/pl.gif new file mode 100644 index 0000000..26268f6 Binary files /dev/null and b/skins/photo_theme/pl.gif differ diff --git a/skins/photo_theme/pl_ani.gif b/skins/photo_theme/pl_ani.gif new file mode 100644 index 0000000..773202c Binary files /dev/null and b/skins/photo_theme/pl_ani.gif differ diff --git a/skins/photo_theme/portfolio_properties.props b/skins/photo_theme/portfolio_properties.props new file mode 100644 index 0000000..44d3744 --- /dev/null +++ b/skins/photo_theme/portfolio_properties.props @@ -0,0 +1,19 @@ +medium_image_background:string=#727272 +metadata_bar_background:string=#555 +photographer_font_color:string=#fff +title_font_color:string=#2b2b2b +metadata_edit_label_color:string=#9da097 +metadata_edit_panel_background:string=#3e3e3e +metadata_panel_border_sep_color:string=#484848 +metadata_input_font_color:string=#d9d9d9 +metadata_input_background:string=#3a3a3a +metadata_input_border_color:string=#3a3a3a +metadata_input_hover_background:string=#4c4c4c +metadata_input_focus_font_color:string=#000 +metadata_input_focus_background:string=#fff +metadata_input_border_focus_color:string=#313131 +portfolio_slide_background:string=#1b1b1b +portfolio_slide_hover_background:string=#2b2b2b +slide_background:string=#555 +slide_hover_background:string=#606060 +slide_selected_background:string=#727272 diff --git a/skins/photo_theme/realis_main_macros.pt b/skins/photo_theme/realis_main_macros.pt new file mode 100644 index 0000000..c5e1bfa --- /dev/null +++ b/skins/photo_theme/realis_main_macros.pt @@ -0,0 +1,33 @@ + + + Macros realis + + + +
+
+
+ Search + + + + +
+
+
+ bob +      + + Login +  |  + + Join +
+
+
+ + diff --git a/skins/photo_theme/realis_style.css.dtml b/skins/photo_theme/realis_style.css.dtml new file mode 100644 index 0000000..76a4f20 --- /dev/null +++ b/skins/photo_theme/realis_style.css.dtml @@ -0,0 +1,169 @@ +/* + + +*/ + +h1, h2, h3, h4, h5, h6 { + color:#fff +} + +.ActionTitle { + color: #fff; +} + +.ActionLink a:link, +.ActionLink a:visited, +.ActionLink a:active { + color: #fff; +} + +.ActionLink a:hover { color: #ef8e32} + +#NavBar a, +#NavBar a:link, +#NavBar a:visited, +#NavBar a:active { + color: #fff; +} + +#NavBar a:hover { + color: #ef8e32; +} + +#Footer { + color: #e6eadd; +} + +#quicksearch, #quickuser { + padding:2px; + font-size: 90%; +} + +#quicksearch { + float:left; +} + + +#quickuser { + float:right; +} + +#quicksearch input { + /*height:16px;*/ + vertical-align:middle; +} + +#quicksearch span { + vertical-align:middle; +} +#quickuser span { + padding-top:5px; + vertical-align: middle; +} + +body { + padding: 0 40px; +} + +img { + border:0; +} + +#search_bar { + padding: 1px 8px ; + color:#f0f0f0; + background: #707070; +} +#search_bar input { + font-size:90%; + background:#e4e4e4; + border: 1px solid #2d2d2d; +} + + +#Masthead { + padding:4px; +} + +#site_menu { + float:left; + font-size:130%; + margin-left:2em; +} + +#site_related { + font-size:90%; + float:right; +} + +#mainCell { + padding:4px 0 0 0; +} + +.contentTabs a, +.contentTabs a:visited +{ + border-left : none; + border-top : none; + border-right : none; +} + +#DesktopDescription { + font-size: &dtml-fontSmallSize;; + color: &dtml-descriptionColor;; +} + +#Desktop { + padding: 0; +} + +#DesktopTitle { + padding: 0; +} + +.header { + padding: 0; +} + +.boxes_container li { + list-style:square inside; +} + +table.home { + background:#111; + font-size:95%; +} +table.home td { + margin:0; + padding:0; +} + +.home_menu a { + background:#111; + color: &dtml-fontColor;; + display:block; + width: 186px; + height: 216px; + display:block; + text-align:center; + overflow:hidden; +} + +.home_menu a:hover { + background:#222; +} + +.home_menu a h3 { + color:#fff; +} + +.home_menu a:hover h3 { + color:&dtml-linkHoverColor;; +} + +.home_menu p { + font-weight:bold; + font-size:10px; +} + +/* */ \ No newline at end of file diff --git a/skins/photo_theme/search.pt b/skins/photo_theme/search.pt new file mode 100644 index 0000000..8d90e1b --- /dev/null +++ b/skins/photo_theme/search.pt @@ -0,0 +1,52 @@ + + + + + + + + +
+
+ +

Search Results

+ +
+ +
+

Found 100 items matching 'search term'. +

+
+

Found 1 item.

+

Found 2 items.

+
+
+
+
+
+

+ There are no items matching your specified criteria. +

+
+
+
+ + diff --git a/skins/photo_theme/search_results_macros.pt b/skins/photo_theme/search_results_macros.pt new file mode 100644 index 0000000..a45d22b --- /dev/null +++ b/skins/photo_theme/search_results_macros.pt @@ -0,0 +1,62 @@ + + + Macros utilisées pour l'affichage des résultats + + + +
batch navigation
+ + + + + + + + + + + + + + + + + + + + + + + +
 TitleCreatorTypeDate
Title(No title)TypeDate
 Description(No description)
+ +
+
+
+
+
+ + diff --git a/skins/photo_theme/tabs.pt b/skins/photo_theme/tabs.pt new file mode 100644 index 0000000..c7a57cb --- /dev/null +++ b/skins/photo_theme/tabs.pt @@ -0,0 +1,50 @@ + + + + + + + tabs + + + + + + +
+
+ +
+
+ +
+
+ +
+
+ + + diff --git a/skins/photo_theme/validatePrivateAccess.py b/skins/photo_theme/validatePrivateAccess.py new file mode 100755 index 0000000..19e3a7d --- /dev/null +++ b/skins/photo_theme/validatePrivateAccess.py @@ -0,0 +1,16 @@ +##parameters=**kw +kg = lambda name : kw.get(name,'').strip() + +weddingId = kg('wedding_id') +if not weddingId : + return True + +else : + password = kg('wedding_password') + confirm = kg('wedding_password_confirm') + memberId = kg('member_id') + msg = context.grantAccess(context, weddingId, password, confirm, memberId) + if msg : + return context.setStatus(False, msg) + else : + return True