From de068d5b8a1fd46a70f75f4e20e581ee846f866d Mon Sep 17 00:00:00 2001 From: =?utf8?q?Beno=C3=AEt=20Pin?= Date: Sun, 14 Nov 2010 22:28:02 +0100 Subject: [PATCH] =?utf8?q?Le=20th=C3=A8me=20cr=C3=A9=C3=A9=20pour=20realis?= =?utf8?q?=20est=20reconverti=20en=20th=C3=A8me=20=C2=AB=C2=A0photo=C2=A0?= =?utf8?q?=C2=BB=20pour=20Plinn=20core.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- directories.zcml | 1 + profiles/photo/skins.xml | 8 +- skins/photo_theme/base_properties.props | 65 +++++ skins/photo_theme/collapsePalette.gif | Bin 0 -> 567 bytes skins/photo_theme/collapsedPalette.gif | Bin 0 -> 195 bytes skins/photo_theme/createMemberContent.py | 2 + skins/photo_theme/customer_join_form.py | 61 +++++ skins/photo_theme/customer_join_template.pt | 159 ++++++++++++ skins/photo_theme/doFormSearch.py | 45 ++++ skins/photo_theme/expandPalette.gif | Bin 0 -> 567 bytes skins/photo_theme/expandedPalette.gif | Bin 0 -> 196 bytes skins/photo_theme/folder_contents.py | 232 ++++++++++++++++++ skins/photo_theme/folder_contents_macros.pt | 118 +++++++++ skins/photo_theme/global_plinn_style.css.dtml | 16 ++ .../global_plinn_style.css.dtml.metadata | 2 + skins/photo_theme/homepage_dispatcher.py | 28 +++ skins/photo_theme/imagerotator.swf | Bin 0 -> 42010 bytes skins/photo_theme/info.gif | Bin 0 -> 4614 bytes skins/photo_theme/loading_progress.gif | Bin 0 -> 5649 bytes skins/photo_theme/logo.gif | Bin 0 -> 3074 bytes skins/photo_theme/logout.py | 17 ++ skins/photo_theme/main_template_macros.pt | 123 ++++++++++ skins/photo_theme/main_template_standard.pt | 168 +++++++++++++ skins/photo_theme/member_albums.py | 6 + skins/photo_theme/member_albums_template.pt | 42 ++++ skins/photo_theme/mi.gif | Bin 0 -> 183 bytes skins/photo_theme/mi_ani.gif | Bin 0 -> 513 bytes skins/photo_theme/pl.gif | Bin 0 -> 183 bytes skins/photo_theme/pl_ani.gif | Bin 0 -> 511 bytes skins/photo_theme/portfolio_properties.props | 19 ++ skins/photo_theme/realis_main_macros.pt | 33 +++ skins/photo_theme/realis_style.css.dtml | 169 +++++++++++++ skins/photo_theme/search.pt | 52 ++++ skins/photo_theme/search_results_macros.pt | 62 +++++ skins/photo_theme/tabs.pt | 50 ++++ skins/photo_theme/validatePrivateAccess.py | 16 ++ 36 files changed, 1491 insertions(+), 3 deletions(-) create mode 100755 skins/photo_theme/base_properties.props create mode 100644 skins/photo_theme/collapsePalette.gif create mode 100644 skins/photo_theme/collapsedPalette.gif create mode 100755 skins/photo_theme/createMemberContent.py create mode 100755 skins/photo_theme/customer_join_form.py create mode 100644 skins/photo_theme/customer_join_template.pt create mode 100755 skins/photo_theme/doFormSearch.py create mode 100644 skins/photo_theme/expandPalette.gif create mode 100644 skins/photo_theme/expandedPalette.gif create mode 100755 skins/photo_theme/folder_contents.py create mode 100644 skins/photo_theme/folder_contents_macros.pt create mode 100755 skins/photo_theme/global_plinn_style.css.dtml create mode 100644 skins/photo_theme/global_plinn_style.css.dtml.metadata create mode 100755 skins/photo_theme/homepage_dispatcher.py create mode 100644 skins/photo_theme/imagerotator.swf create mode 100644 skins/photo_theme/info.gif create mode 100755 skins/photo_theme/loading_progress.gif create mode 100755 skins/photo_theme/logo.gif create mode 100755 skins/photo_theme/logout.py create mode 100644 skins/photo_theme/main_template_macros.pt create mode 100755 skins/photo_theme/main_template_standard.pt create mode 100755 skins/photo_theme/member_albums.py create mode 100644 skins/photo_theme/member_albums_template.pt create mode 100644 skins/photo_theme/mi.gif create mode 100644 skins/photo_theme/mi_ani.gif create mode 100644 skins/photo_theme/pl.gif create mode 100644 skins/photo_theme/pl_ani.gif create mode 100644 skins/photo_theme/portfolio_properties.props create mode 100644 skins/photo_theme/realis_main_macros.pt create mode 100644 skins/photo_theme/realis_style.css.dtml create mode 100644 skins/photo_theme/search.pt create mode 100644 skins/photo_theme/search_results_macros.pt create mode 100644 skins/photo_theme/tabs.pt create mode 100755 skins/photo_theme/validatePrivateAccess.py 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 0000000000000000000000000000000000000000..27771705047115b6586c679d7cc7b44339fd4ed6 GIT binary patch literal 567 zcmZ?wbhEHb6krfwxT?%h6k>LzjKRm#<$pKB|2BsIEet1%*rz9`$NSla`#5gMkX)TE z(-oupzl-5*9fO~z^Z#CkO_>rM(R#0I8UFV${Ap$g@^X&ywg2DFuq8|ETrqR9zwQ4{ z22Xd_m1%Ml<2Cx@wEp)oxVgFg|NozX20-yA3o8SIGJ_7tY>=NA*xVc@7I^4L^`BT0 zB*|epKOo(qL&9Y-^O1nUR<{l@AM=)tBK(gJUo0$DU=+|`nPB3;d&=dorH9T=MJ{h8 zCRSFaW+fgTcSi;!qZt|afsldC6=bvvONYlpWg`yNP6eloUm}cZmvf8~PgHfzbv^uB z)JrSnQ$Uc%^j4;gw>$S_+_}1XmzI^s${HnpNs*F9C299|PZX0GpeB0&P1Z;<=s2-( zL4bhD#CZW3A7#`mg8UX~8F?&i(_;9<>&W2m9{I{c?%I9kK!*lzPQQhR{)KV~GS>t# zb0{%3#WTiq_w+g=8O{g{5s0&$z#+oN%(2+Wq{C*)kqJ{iG;%Gy!O76|R!Znt-u8_z pT#nxDO6hnfCh^8BvOp|b@8P=S-E-vDC@G3a`Zq92H#jm_0|3z}p40#U literal 0 HcmV?d00001 diff --git a/skins/photo_theme/collapsedPalette.gif b/skins/photo_theme/collapsedPalette.gif new file mode 100644 index 0000000000000000000000000000000000000000..17caf5385fec88553f7fe7601418faf42e228495 GIT binary patch literal 195 zcmZ?wbhEHb6krfwIKseC6k@hIUFJ#|gP*7K|2BsIT?|pa_FXZ$(-YL={cJtmUEkI* zY|50F7_X7+Z~Ld2;ao9uN3`C_BKH3+3|q3q!hIb7_b|M!W$^KI`QOd(zmLJq&5Z#G zDE?#t^K?KY$W8`UhX-nXDUn>AEAyg`@o29+>muA;T*p}W&RcZq`EU*mufq?OmAs#+ hwWn?Ba8y%dTbO?^`YA_;^l7KYPFB8+RU%9b)&Mr*KVSd= literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..cb528748e6b479e3486587d2cbcc8f414a4bbeb9 GIT binary patch literal 567 zcmZ?wbhEHb6krfwxXQp#6k>LzjKRm#<$pKB|2BsIEet1%*rz9`$NSla`#5gMkX)TE z(-oupzl-5*9fO~z^Z#CkO_>rM(R#0I8UFV${Ap$g@^X&ywg2DFuq8|ETrqR9zwQ4{ z22Xd_m1%Ml<2Cx@wEp)oxVgD8&;}^}WMKiBtOFuIeqvyAb(mP-p(Do3u{cOX%0P`3~cT|lTRe@^m{liRB*7eU3lS8rBA`4IV_W*B7bKXPu-M^#!9EJ@}>>LXZ{p#V-mB`~rR+Kx!zWDGf3nm4B g4u;GMsY#t~#S;SZoVmP|m{?hvnv{5W+#DIK0U{xqMgRZ+ literal 0 HcmV?d00001 diff --git a/skins/photo_theme/expandedPalette.gif b/skins/photo_theme/expandedPalette.gif new file mode 100644 index 0000000000000000000000000000000000000000..9b4f5a0d6c259b3de42b1adb12c6a1b3e201a555 GIT binary patch literal 196 zcmZ?wbhEHb6krfwIKsg2znfu0hGe*pW005g|8|BeWeg{a*t=qM-_|h{g_!wxy2Sh0 z{%>KJo}m7}mtj+;#Q!da|9uQ@Zf*?30mYvzV1+s$5@aU>tK$NdzLd;)8LL*gKH0Y+ zx`SKb_yHp}^FI@qo%Ed~rbrz=##!jRK!|UK@ 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 0000000000000000000000000000000000000000..0156f0eda45a504ca180d7edc741eb748eb44760 GIT binary patch literal 42010 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%0A+^6W~awmp<}AN-mDBtIeIRE z0-r$&)O<&Avt5dt=SZ`_@x91isfJT4VeYR|t{7H1443ktbBhrW)`#7>&}46Dcu*2M?hZTvRpU3vv52XO|YI0 zZ4PL+E$P=bsauQaQY3L*Qq~nlM^Ce({27i94~Ff_8VF|cL@Yu(9pWm3D-LuB9h-LX z6K=QITP>hhqwSNv!AReU%TsVu0x9D95F%U7a*Oe-dypg8FB%N)f=KdugOw;@cbEer z*)x#=F*ckY7)kWeKi3lGj- zTnvgl?ZSAUX9=J`Xv-=I*x)u_aysto=Yw&lhl;2KDbsH&s3wtRgK{b> z3&vgFsjN;E=0y+rx)r-z>MF%KZkZ^g2Um&Us-Uw_FPQzovqm_-(hGq#s$!fRQx)if zas;@<80fdz(@JGKHr2^qOzYxH>y#`9pH7FZMKM+atd`ZFJh@M|2S|3GH_B^!=pg6} z+h-Oyb-mw36Pm|ome|W7VzF5mw~AolDXS@{Sx|_u*|gPRJIwm{nC7pkK{(#7Gf<&W zyZV*7RVdYEu8OQzqT5~}EX=d!TMI~7SSTEZi*_L2%FQ~sIa!?DVg-6Jf%e4!v_qiH zo-|o9_GMY1XDHBflz&n$c!zq68rsGs0a0~HfKQ&s(XBCO(P7FZVw=iOeZSN^nl#g% zHPmI0OtPcPwgPYbHYv_rrpDPrbd2MiJWlL|F(+7*<#tc4*x|fyiv0fz*JOThO;*fh zHZ@1q1l!4qJW09DlWb8u$qB)ekR`{7f_M^}NRL(CSOhT6FY?SUm>;pTJNMCm z5r`#*M>2R35~q9c>T(~_FkPM0l}u)M(C$?De8IRn{r`*}Nj5A*yb`71scun|#BB|eGsj?T5gr!xiB4t6niKYg%7ca&)*+WYxn#4&qzCS@T816KlRC|Tp zm?jOP8c&ucFVFDXE;bOm#m=PIUIZ*08-aA}&)x}yeLLDORU4<5?m8XJX(J)Gth{}h z6!XI_n-6x`4Bd{{W%G+Si_1j0bvqKEU+jUc1daGA_6uAB{BjSh4ECA!h|R6?0aEqg zM+JNw79Y4(c1+(Y8`QVTQgC<7jV60L1((ayW?&Tt_A$oz!$9F}TT0 zJ5}41sWUcZrpQf%m3CN_OIY>26|kg27&Ma#uW?CRna5 zuwDV$Atm0>g`=82t3j`3+7qQ?F5PRz#rhdA> z6-eyL4*`fxO^pAi#RqS!Bm)ODoUj)nx<@qK0;(;!GNsVcp_7u^CJ$mMIzYgUwWtrv zwbvruAOT(cnKzMw%>tq<(sd@&F)|6`YnWI?we=L1Lbax$d4k|@DMT4}T)NBM>YQh6 z(yy<6rTXeuX72(j3xFDAZOi>WlpQPJ z>G!rR7|pT>*r+daE&4KdwQdn`Mz;uf4=jNH$6S+WQG35&`)V{H-?6hzD_Um!gtW@- zcS)F~HmGx3C8uetWWBLUR;x?I@CKSvp>=D3c8AU6bHYWo`xb!VBCMV1{Ot^(&WHDz zZud5p(iZhO=?2^0CHUZ2EDkV$nJZGoa`34@1D6iCzB z!G5<34oD_JDH09j#cB`jT-_@1%Hr=rs-{(kqz?())=>qIV?4GYy2}X%H!* zNtT4Gq%)~Vrf-m?2a~5_eP}_*-xA@Iv8Xs2n+hicNhLcxI4zVUHXs!lj)XIWb_4~K z^x(+AKwOC@$5o4QXdWn@d34bJEq&Z@A9Jv}$;Yn!z_(8LP!%pY(wBuWZ;y#?uYvOs#BO(VxD z>ni}-`OXOu?QB34(;ad%LMX%rLC_UJ%oV|KIWnNT%M>&=%LW}J+B7l|{fcrSrPnOZ z1^a-4W|pOtE}Wt*lrY*?X74twB)Y4M&oL|-+RHdLAWsSi3Dr7pTK2E-}Qnfm!JavoaUV%B<|6i{K+BNj_q-&PPnKB{Voju-T*UKS)Wi z3Um<_DAud43MmXFUA1Zv_k%(h1u9r4Nt7FH5NA_4H!{Vv!+^|!;Dn@AhmpXx$>1{A z3@JFylvKDvY{9^j&dRpH?Y7z`jGjf0n4?Ev)#q{{nEY+#1R&CRLRmuL0nv?fHMV0G zvjGG8b0m$W(+3UAh6mBJwPbjS)?+H?b^qMT#74376L^uUWJ6_ps86c)*ukh_K9_D_U-; z6|tA0nYl+jM__R_0yc;;$0WfeVTo(%rNL0v99m}HtUQ>rsO2`cb?ygYmgLK;trshT znmx-(dk%Z#nN|L$js;MbRbq+hKzpvb?5Nf4%E}1is$J&_-Iu&EOn4Cg9*L7v-k zTZ$JuTSP9aS=0Z|J(<_2_PxfVV_&IZf16z|yp*QNX(&Zm9P}dz3|;gK9f5| zEw`D(gh&<+yKTD4Rk-ORo0Srb#%{KwoQ4WjL0JIew!I+b=wvrxYZ#G`2JFKV6SjnX z!5iSpTXue3(ftz_vk(Mw_VHvY-5TfeNLortSxUVT*nIOK`7-W3_n45n>kd#wdf0ebYbenIw8o*}4Nd) z_*fX~WBmWo(|86$S1}(wLqW;J?gSU+_oTog5iJVsd5qwC_iEE|L46*0IcJsnS;!npqA&bB?`g+TBZ0i-|KD!}w7 zMVdVb3Vsn-f3gF?^(VU}z@c#ZguvziyoNKGaNpp8c{YF{NBJrcj^jITAU+XO zY$O4ro{*yh`1p<(;Rz48)jSa!3R7D{1!2%aR6Fdl1CVy;ypw!=OD1q3IsnJ`A!R%7 z#4|&H{3k{8U?vAh&qMri_`t~ zPN0R)l6JBq)b24Z#bV1YYGpNJOi__l@}3}y zs8$g*QjbBOwW2=2`PQ0;vnh%kwyYH#hGHi<%zChdm)~&mzewX5fZZzfWM`V9XL4Yy z<<8Dn?Z~Lt$SosJGF=BD6&H;=jQVSr<;lck2QX9GT{b9K4HJRYkPSvs8gustuTe z!N@Gl+M(vBL9=5mBgEZy=jh1B3bD!K2V35i)ElR@j+K*GfcL{5h#o_Nr)yd-9Mvj= zO28d6Wucr21H9UpCgiM*9H>R$k=tBV;JL`SsVQsa+fhm`=A3Q1h|m$YmAQ2re_2I| zNPNVuSxavubmf>_>-EXCMia8sL?u`oRP@H2ur_7G+F-)ktnk`A5xh3L;YER45aL!1 z2hjxER8iX|Qq(rLqPD3f*fxvLz45 zO@)En?7&T)a@vA3YO4dwkddpUpj?|&E*dFKD%U1lTX#Cv*1{@cAY!c5tyyce-|i!4 z;m(D<(89B>$ut9eb@IZFU6^M#KKGC@mQ?3xQNlp2P2Ub#D7gvObO;VY{Al<#KOam? zt4!;BoroYOcvp_$ez&PFmumUFMRJI=>qPQ|S4Mm6=m02h_c5mB5L2=pOW#-6lx%mK zlI?0rQuO|bz}nyjt3yQ}m5LHw^+sj5d&7J&7PXh=#Yw*&D9A{v2`>meB&Hc zF<64i!{1?2&5uA?7Ka_WVEYTMxA*N1sZ-$S@@k5(-JY#%<_{N{EV&{6l5C-K zT9-p+ZS#UhT+x$Tc{7if6bHG?8otnT&RlVVBcOaSSL;tcNjaFIE8J_ zO|`4dwe1=Wv8ZtYOz^-9JqQVhgF6Lzf{t8LWV~#au*&E2+@x{j0? z=|bkRXlV82;%tcA6lTknTC(b(6dVWCGW8sW7sqxCyPEN6?wk{oX8UA(1zYf~&Rm|uHT+Iiy z)g0kRX_|h-nEf$*Nj;7wO2+F%Q2pYnxxzk;OluDhjl-fcBn}h}!N)1_k${gI#77c7 z-X=bV;p5%nKbX_*y#5`#bQ3_gXy_dA16 zlWS6E@EHtFJAo9n?Gx$y9n$#KmW(>|Ud^lsSGH2AFzuR6dNHc8H6i07s zv&Wt@Jz`7_!XK^rup3cf|VeZwew6hZ*<=RB5mM7Jm{a24_Wo;%_iQVqESl64U zj%Z$6i{^kjH zygMG_4Tqlbhl9JmR^!>LHJ%-B5iMZwOhgU{$=4MI!ClS3Xq59e_Ob`ej;%!YDhH*q zkhV~cjybJ5rg5B(x#iE)F@L;yn!BmksVf#~0Jn=+DNKbWM zr8=J{)om)(ZMjmp;3f&tb!yn(%kmHVxBZcZy+xx{-)qJobC=nDlD?^6Y;XTxfbEsif{~lztiK2z+mVzaYi68PfJFV7K4XV9<`ZS?R$=g97%;mjG^1`JNU2@5uYlh#|@f+B) zqP=LiSDvFsgHiI~EP!{C$?AbfCcH~}O{U6`?Hqb#w(EqRo}m@suIKgyo$b4P4`esY z-Gu8#y66ltu3xfZ3F|(Sri*%p!@aS1ECc?c!2lO*1*OYJaY#PP>JD1EGnI^{BI)!c zY)2QeFglmNo4|bL11eLLOlMdzp9##*rv=<;V&9~LYh1wgS**)qHB33d*`Fo91r%+J z3KKiwCZ|{^u1djinA3w}`402S9y(rEVO-f$sVlc80l~!G20jmZ=!EBEg2B|!uW$G8 zvQ#;ETDw>>;HZzJEP7atedxRvn~=_G)QRKfW_roi`M|4Y@`S_xrGX{y8HDR6=!T-q=}PCbpZ5&jy_*ZOQ^fcjBC4j{0)eX%5h-8hM+u zam)u(&BsgI7MPxU8=Zj0DO)+7!M&1V!56i86%@{OFQm5s97hM%E6cW|IY<^<4qLg! zayREP{!t^Z!drqebV%xYz1A{Y>n=uMiMnZ{LK_S6r2i5OmG_vEwbgR8%M_LrKEL1I zOx3)}CxaN)vUTN}+0!vZx{w-oo3zQT0)Q|MSzi7Fu4p`UW1M5~;M zu$;N*RL9F(5%0*x7A!aA+AgE4)!30uV$T4xIh*|gu7Mg@e->EPlFHDaQ&e~jg_|0P z8bbqt>DE%4=h1$^3@Vbny)J8btyjZqgYCIGHWY;`q;QFvN5}MX&8v+$W?e(xIoaSg zCmS}ILeHiyb=idNhe=y9vV4xxLb(}F&t}a?Z`NFl>P+bt^8Bz>GNs$LN)COKn07H% z1nn}*14sc^ZEcs=&h7{jWI~F=vq_zqq@_z5C`n7JRvh~JCa#7cjNe7fwK_%F)sdr} zudsV$hwpF$xs`N;{(vx=)Rw0X+9p9DZCbo@J4#+)Ihl4|O4X-2E4ft(HkUh>JFhU> zG~I>Cv%y0*ly>wa6&lTrjJ@b12=OQ$n@$d`Y6#El9_DNyN zVc`l719Go}8RZN>3DRjGGc$B%)Uq8%XXhzZ)Jx_8lS!*gY~1>+ay6Z$GeJ7zNhd{0 z8q4HrigD$e#OdG)o*+b}ATLp&GL|&T9b?YT5-*-zUmT!Udh`nTofVh@Wm=Ppa@F{c z(n{0tP<*Lz)Ktr-x6eba?bC*Q#k^4@7p$JEnB>V{mY1uOwsxmxI;SytyB-?rC` z7sqyT=6A-^AZ=k<&D1UlqCKNauSa&Avm<5-m)D{r{BYP6`ylSgnr_1BzXi=ai~o_w z_}Rqu`>Z)CXfE>p)6j_>C7nagvkiGioBV=d;S(4L_e|YJY-^ryIy&D} zed`_mc`?qKP~Mu&-{|O*B}5+cOJYx9Wi;U`98I>MtITj(Aoy5&(|UFdo$)jnxjOm@Q;b<)(5Crur0_7yFQa54t` zt&&g5xG)=%#LI93EK^k2DeQYfHhYa5F9_#JC^aKbS7FVMx zDa(*s>K}S?mNK6Sx$7F;SFt?Qs>rFlG1f1nVIDjQmVGF!&UEaLZmg|oCI;QPF5HbNLzD5Iv^p{n{IM+2ot+MV7gj- zGh*>wi;Hijz{OWv%*HA|Pz+$s-|AUDfz?-o;9P$Bn!1axt%)>Bp!vLoXcu9o5uUqa zWQywzr$CexKAYhyHk>iNj3g6$Mco6dv%N<1l{^-YQy{wANS@}xe*%P4@Gk=HHd>wD zk%fzq@!V_JE=T&4)E*?sikmG7ZKqSkY|3)!(t+JMJq_oe0~-sa0}koMx+uy}A}ND$ z1%aikH4>mZ=hQ&@ASjoc#a^awt;mQ;LH%p8@iiq_rroyWwW_pSx)pd;4rtXudGe|T zS-DyjL#yghW*;!7HMdSb66V?_yl&HMO&sN_FD#cj!qSk1jfj{&E}D&)VumBd;j9!h z>CKBy1SDtNByE_=CEIHsK%vBRVWqlCiUQ|4PT!Vc4GG3PU2mvzhxF|8^JJeres*!? zz2lxV05k%-sOt2(5ihz)vO=*g z^K-E-G{2@v*2V4Y2zpN=d9kRFyScP`1(qpVHzH`=Mx=Ek1=2c)KmM`G?qUFS{zyUB zElPUlfI?;ve6f$D5Lh6nvVUIvTA!^3bZG~O5hD1djRk+krxo5qhwT6$X6JD}mOq7JZ!Igx0744GpKhhuJ z=umEomfXtE|x@F7{*OP?2`EXqcvG%Pyc+t)h{i2-<`b9fSX>ra@pgEU>H3#ty?9oY|dNOO2W+xggxX#2i2-LDjwEXLMZbHeK$d zP8iU}i^V|En(5{d&eH;5mD0ZvjhQSCCTRPJXp|~+$xv86B#wuag_#``j zo9D8L+~uYKq|YS!P`W}te6&}m$ysg|dgQUs)ke?0pDmLdMva-S-@=RnF`!4?NSW-r z-h?uZ+}R5S8+rM2=-_NW^~3UJHiD)638Fb7m+v4{Ii=67=tJLwx+6&a3QR0jndl*W z42q@EQnLRNCT9;7A=gQou$9Cpw|HO9Y#}PjT3K(poe+G5rV|3FyMNv&6j0RS0)GOlDut(V&_DHcO2t@{0URAJ}#Yldmd*oOMJ-yT;9$NnJLH={6do z8Kya<1kw9lE@>~b2?kFxOGz$Sk_J@zBG{xR$tKO#*`zt9D{ra(oolOq=b3cvHj$zZ z?4hzMQ3Sh(zHQ)=fXtDoag-B6v*930I!d3WOPBfx$!bH@kpjW_E{g6xPj1|V7kAj8 zlpVW3NT|xR71F<5?*BneaX2herR!rw;g7$I@_`+%F>W2E{dtg4E>4uem`n@rj-2 z6Whnlxf80pkDB#U3-&^xp$LnF6Q5dWf3*6WrtKAu%Tmm?S&GGqr8p&63R3Z&n#gr} z@_yLG6#(Y^DevxyUZy8+q2sT}5CCTp(+(*J-a=?e83lgm^Wko62 zVTG;#*+sBKob#r~4h0%G0{*e?p&^2$yH5d!xh9sAw4CPI;dAwLhyJ$yQ zS>f3Pc?uzx?!J7FZu#%Hn|7$rI4yv>06cX;7jbKM*xCmGvM;Mu7wa0w8swEg@Y@^B zK5W6u&bq5t^RBF2u?saC=A$MW8(_zWqnErw;Gc3{-?IQLFH5*U0XO3o0UH$nHmVrd zC@aQWl%@OPtlG;t2hK?a;C4>3S@&t&lx1^MNF|B{(;^gWN5sly=?s*%7L^%a<+iQ9 z+ofk)+4D zO7X&t8^(bPX|252v{qiM+|uL%WfOlIT$hPGD?SrEI1{9O`V_@SIPPw$)*@&(NaXj* z{NAkm+Fe)o3RIUUu5+E$iqB z*~D@qG{ece>X@v+CW4_ui^WQ5bH7U2+}ju3{E#WGPnVIt!tA?ymIU>4BhpxKNic8C z)a^E+JAAS`d|BOL)?_tSe%me2TtoLg zSwr_?8!PuXTWSn^m%DxRakuvM4cm39*Ve1i`J@20U{jukTjD%U?^g6oW}eK-LS2*V z!1JQ?wAPUiG$0S&O_E&d;iyeW&ieh*qbNd zhDS(200dqFz^g{&%Le!7_3ppcdGPprE>FPZ3ZK<`FgU{Bn-IS>B43-3FB;sV*)bfR zV6+j*;tHuO5uGCx@cD;Ug!1@;Xim)2dJh^qra2Ew=fsTEdX6@@S7(yhJVCmIm6H@L z7V^4^g0m9o8H*Wv@-d?gNH$jxFXDc0^tHGg(FJeJA}SK;9omq=wWzbJ0&iFPh=ja5 zRX#~#4wV&?n;iY+%Aj^_=wcD)X`P2MDSA^DaS=m&xG>~~(U-=GX;EQ^41SMlJa;JZ z530S})aW19`+m31_iSlkt!&|78S3Wx`9D{Cjcsz>uEc*;{Cqg}8 z`uWf5-6>2_s|tI%G_X>-=-`U5qq^W20q=3GXQP7DSr}r>undOQWRiF0;u6K2s!Z|+ z*#ubvBU#KQ(qo4V;LcopS5Z(TOZ2eDt4_Y~#LA$eH0r66z->8%!ZhkP<>2#rkJlzd zl9>IV+UstWPucQ_i);LQ*7z@pW1U|WkQT>Ej%BZ19?`ePpTQM!`GR{@K1Yj!Q)1cS zOz{ROIWC4f*5p>aG;&Keu}-!yUBbMuD&SF#*Zu;uP{2E+4ISI)Rxe*Tw#ltDow84j zQKdxPs+|8*wRZ$lbYXSCqgu~PYf;N2%op|U-6acRg}l9L^wK!iKpE=Xs({`#{;6^7 zPYc4dOQ=kaup~Y5qg>qbcqW-4&P$F`B}eJgBWq;j<12&iRe4`p>-W}#cw<6Dv19mr zKJfqa_>Ij;6-z+2R427WYP4P>mE|dPV5TBlsivVGAO9K!D&;g(%0e+ttYIl~l>Aby zBB3-kQC6BKi;$zDqwJ}AiauYHuh2_mWHy%PxkC?ZE5~^*GD@)+_8Pz)(^I9-n6mF)Ywp8S6frPp{jDdaa~2ZVQtx( z)vHQN^u;TSbcNa#ngVscDlb==lbxlI%QB@I|5&~(eQDZ~)Rg3;#DvB1lDJs0D8_PW z<8e7`7L!4bj-pW`DG}j|$O}nC0v?COpu<8#f`i^)5E$T(@&n)Vo$urA<>}#$M7X)S zI6KXo>*z4Y-p+6oSXLIA+;6@2105H|ihekBEL$AA_)pYTDtBLbwfwa{CPK`8_S z2=c!`9d>o(%kL8d%($a|U6O9SP_SZ*q_c@z(H^ z;3(Nm5nuxe)B<){2I~fQD(GQ$x^=-CuyKJa>4ssVycn|D&#fCqf+F-0OHA}_@SM4* ztKl8PhR#@;)vjje+mI?O8s}ha=9$YOA3r>g92KS50}eeV9N5nI5N0Hn=e0bWmU?0B{B(Dm5b> z7CLl#5SExGFj+U?uB@BaFM4&mj7x%<9osbftG8OwTG{iChT#IO_Fq6$?&#S(Vut1! zY{gc)x(rZgN6^R+w!~!!*ls`EEChT^PplWXA%^KzSpGGU`+!^fojBjrR)Z(or?VV@ z9R}|!5N%_)O1n5KXNWx+xX%dS;LLzKf#1y_#*wxKW1`_BL%7u{Jb%}KZrA}vlt9^` zFW!Rd%HR*#^@dq5ag@F7X9Q~!OF8ClP~LSJJ8;NbIIGc-`> z*%NeOpo@o7u1#84GYshl4yGDx;rP#i{yOJ#Hdd)pPS_d!aE#62FtY)$lgNi5N4Jv) zyPf*dGb)JX4?CD1%SH!docjR{<8nzlRL`L|0UV(3p`(G=M{+#|II!o!Y~Q>}bb_XI tnT>#b5Ma>ROF}C=oO%!Z7Ux3U#6l(vt~liw?$mw87s=PGBdxii2 literal 0 HcmV?d00001 diff --git a/skins/photo_theme/loading_progress.gif b/skins/photo_theme/loading_progress.gif new file mode 100755 index 0000000000000000000000000000000000000000..c2f0e7c7bab72caae36630dd3787a6a47468900b GIT binary patch literal 5649 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 XXovq^&1h#(ZT)B$^~`!%6cGL!sdYNF literal 0 HcmV?d00001 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
+
+ + +
+ + +
+
+ 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 0000000000000000000000000000000000000000..cb71f7e59c36e10fe21dbb56713472c77270f252 GIT binary patch literal 183 zcmZ?wbhEHb6krfwIKseix>WjqH^Y`3)!lhYp6;&yI~ZDHOar}K=BDVrYT!r>w95~% zUYMpG=Hpx$Zkgb3@8jwEzn$TJjbL-M>Hl5^H#av1yg>0M3s_zUM1t&OU^Pil?Mum= zm$7QyROh`0IWru1yq62zxYERB=I~0OkyTEM#b<+(ibgA2wo~E;7v>YCr&C)Q7_0$k CrZLL^ literal 0 HcmV?d00001 diff --git a/skins/photo_theme/mi_ani.gif b/skins/photo_theme/mi_ani.gif new file mode 100644 index 0000000000000000000000000000000000000000..10c759a112a078fa8a8dd07d98be503ed83a0fc5 GIT binary patch literal 513 zcmZ?wbhEHb6krfwxXQqAs7T(^-SvMrLzs{A+!Wpa9SqkhMN!OYT-aHm;Hr`cdG?oHE;xbJOA%wXpJ#FQY?R?N;JXW zep$NKuQrC=c}fjYX8*ewcH}8NtLOgT&d?QSvOY_FVVd@)Y&D>zS1QDl1MHWiX-`Zr zoS&+DzeezLGvkYT?rpg$?Xf1+krr`&4)2>-{`WGtxw$c51ByRcSh#=^Iv`1qpBUII z9Oe{w=t%XSc=BajbRbVD zNXGd5dv-v5T}0CNk|)GX1aoZGpsJ6^OLy27@R&2e@2mLp|Lcy<_UZwa!v@Z!6ZwiAkhOhCtR z0}V8S`n7L%(atkGif5j7S9rMQcPS}x8Txsg7J2Rwq13md;c1w}g2MjWFLnRubT~3t F0|4l|w&?%> literal 0 HcmV?d00001 diff --git a/skins/photo_theme/pl.gif b/skins/photo_theme/pl.gif new file mode 100644 index 0000000000000000000000000000000000000000..26268f6ee3cfe926531b98b523211f3ea0467d13 GIT binary patch literal 183 zcmZ?wbhEHb6krfwIKsft9Bu09?wTKBy}wZLP?7xYYT^Ig3`^3q|93KM%2vw?vQ6-} z5B7HU@pKLIaqfyU`QO9vxtZ}smFV0Q-6O^F|2r7|_cFM-xiR1Xia%MvGCCj!OYT-aHm;Hr`cdG?oHE;xbJOA%wXpJ#FQY?R?N;JXW zep$NKuQrC=c}fjYX8*ewcH}8NtLOgT&d?QSvOY_FVVd@)Y&D>zS1QDl1MHWiX-`Zr zoS&+DzeezLGvkYT?rpg$?Xf1+krr`&4)2>-{`WGtxw$c51ByRcSh#=^Iv`1qpBUII z9Oe{w=t%XSSW?tkd}m%j#xaggr}*Q}r>cS#1j9UvoSK$dcrl4=1*>U2;vt>?P`Xa~Pra7>2w7%S8#d34Yty2XT zIUASrrtlW|S!Z&-J)z07!(cm0t;K~G-<`Fc9gz)WWZ(fpi0dRIq}ut8T$I?bgwI>? zVcBFCcGg#Gw~A!u&+Gg+;n%$sx8|S60yvDbvz%`*-gw{Obw=>*?`DKyObm=bxA6iE zGlY1xz5nqCwLp#h0N&#qt;+($leR`Fu(aIPWsqr`IxUnZd*NO~4dz#Bi+tpo8LR=f CM6bgD literal 0 HcmV?d00001 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 -- 2.20.1