From 511f6551f0deaecbfdf39f51f0bff1369dffea2f Mon Sep 17 00:00:00 2001 From: Mike Hatfield Date: Thu, 6 Dec 2007 16:48:27 +0000 Subject: [PATCH] Project Spaces - first cut of summary template and some placeholder images git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@7572 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../collaboration/blogSpace.get.html.ftl | 4 +- .../collaboration/blogSummary.get.desc.xml | 8 + .../collaboration/blogSummary.get.html.ftl | 2 + .../alfresco/collaboration/blogSummary.get.js | 48 ++++++ .../colleaguePresence.get.desc.xml | 8 + .../colleaguePresence.get.html.ftl | 138 ++++++++++++++++++ .../collaboration/colleaguePresence.get.js | 72 +++++++++ .../collaboration/projectSpace.get.desc.xml | 8 + .../collaboration/projectSpace.get.html.ftl | 105 +++++++++++++ .../collaboration/projectSpace.get.js | 36 +++++ config/alfresco/web-client-config.xml | 7 + source/web/images/icons/default_avatar.png | Bin 0 -> 2349 bytes .../web/images/icons/project-icon-blog-16.gif | Bin 0 -> 654 bytes .../web/images/icons/project-icon-blog-64.png | Bin 0 -> 6536 bytes source/web/images/icons/project-icon-blog.gif | Bin 0 -> 1139 bytes .../images/icons/project-icon-calendar-16.gif | Bin 0 -> 611 bytes .../images/icons/project-icon-calendar-64.png | Bin 0 -> 6053 bytes .../images/icons/project-icon-calendar.gif | Bin 0 -> 1021 bytes .../icons/project-icon-doclibrary-16.gif | Bin 0 -> 641 bytes .../icons/project-icon-doclibrary-64.png | Bin 0 -> 7045 bytes .../images/icons/project-icon-doclibrary.gif | Bin 0 -> 1162 bytes .../icons/project-icon-emailarchive-16.gif | Bin 0 -> 650 bytes .../icons/project-icon-emailarchive-64.png | Bin 0 -> 9237 bytes .../icons/project-icon-emailarchive.gif | Bin 0 -> 1223 bytes .../images/icons/project-icon-forums-16.gif | Bin 0 -> 625 bytes .../images/icons/project-icon-forums-64.png | Bin 0 -> 8807 bytes .../web/images/icons/project-icon-forums.gif | Bin 0 -> 1070 bytes .../images/icons/project-icon-gallery-16.gif | Bin 0 -> 646 bytes .../images/icons/project-icon-gallery-64.png | Bin 0 -> 8016 bytes .../web/images/icons/project-icon-gallery.gif | Bin 0 -> 1146 bytes .../web/images/icons/project-icon-wiki-16.gif | Bin 0 -> 641 bytes .../web/images/icons/project-icon-wiki-64.png | Bin 0 -> 9783 bytes source/web/images/icons/project-icon-wiki.gif | Bin 0 -> 1208 bytes source/web/jsp/projects/project.jsp | 19 ++- source/web/scripts/ajax/project_presence.js | 126 ++++++++++++++++ source/web/scripts/ajax/project_space.js | 27 ++++ 36 files changed, 602 insertions(+), 6 deletions(-) create mode 100644 config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSummary.get.desc.xml create mode 100644 config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSummary.get.html.ftl create mode 100644 config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSummary.get.js create mode 100644 config/alfresco/templates/webscripts/org/alfresco/collaboration/colleaguePresence.get.desc.xml create mode 100644 config/alfresco/templates/webscripts/org/alfresco/collaboration/colleaguePresence.get.html.ftl create mode 100644 config/alfresco/templates/webscripts/org/alfresco/collaboration/colleaguePresence.get.js create mode 100644 config/alfresco/templates/webscripts/org/alfresco/collaboration/projectSpace.get.desc.xml create mode 100644 config/alfresco/templates/webscripts/org/alfresco/collaboration/projectSpace.get.html.ftl create mode 100644 config/alfresco/templates/webscripts/org/alfresco/collaboration/projectSpace.get.js create mode 100644 source/web/images/icons/default_avatar.png create mode 100644 source/web/images/icons/project-icon-blog-16.gif create mode 100644 source/web/images/icons/project-icon-blog-64.png create mode 100644 source/web/images/icons/project-icon-blog.gif create mode 100644 source/web/images/icons/project-icon-calendar-16.gif create mode 100644 source/web/images/icons/project-icon-calendar-64.png create mode 100644 source/web/images/icons/project-icon-calendar.gif create mode 100644 source/web/images/icons/project-icon-doclibrary-16.gif create mode 100644 source/web/images/icons/project-icon-doclibrary-64.png create mode 100644 source/web/images/icons/project-icon-doclibrary.gif create mode 100644 source/web/images/icons/project-icon-emailarchive-16.gif create mode 100644 source/web/images/icons/project-icon-emailarchive-64.png create mode 100644 source/web/images/icons/project-icon-emailarchive.gif create mode 100644 source/web/images/icons/project-icon-forums-16.gif create mode 100644 source/web/images/icons/project-icon-forums-64.png create mode 100644 source/web/images/icons/project-icon-forums.gif create mode 100644 source/web/images/icons/project-icon-gallery-16.gif create mode 100644 source/web/images/icons/project-icon-gallery-64.png create mode 100644 source/web/images/icons/project-icon-gallery.gif create mode 100644 source/web/images/icons/project-icon-wiki-16.gif create mode 100644 source/web/images/icons/project-icon-wiki-64.png create mode 100644 source/web/images/icons/project-icon-wiki.gif create mode 100644 source/web/scripts/ajax/project_presence.js create mode 100644 source/web/scripts/ajax/project_space.js diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSpace.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSpace.get.html.ftl index 7c15f6cada..c82541c08a 100644 --- a/config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSpace.get.html.ftl +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSpace.get.html.ftl @@ -6,7 +6,7 @@ <#list blogSpace.pending as p>
- ${p.name}, ${p.properties["cm:title"]} + ${p.name}, ${p.properties["cm:title"]!""}
@@ -20,7 +20,7 @@ <#list blogSpace.published as p>
diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSummary.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSummary.get.desc.xml new file mode 100644 index 0000000000..a7e8d792ee --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSummary.get.desc.xml @@ -0,0 +1,8 @@ + + Blog Summary + Collaboration Blog Summary + /collaboration/blogSummary?nodeRef={noderef} + + user + required + diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSummary.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSummary.get.html.ftl new file mode 100644 index 0000000000..910fb2f711 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSummary.get.html.ftl @@ -0,0 +1,2 @@ +${blogSummary.numUpdates} articles need updating
+${blogSummary.numPending} articles pending \ No newline at end of file diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSummary.get.js b/config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSummary.get.js new file mode 100644 index 0000000000..310cbc2630 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/blogSummary.get.js @@ -0,0 +1,48 @@ +/* + * blogSummary + * + * Inputs: + * nodeRef = blog space nodeRef + * + * Outputs: + * blogSummary - object containing + * numUpdates - number of articles updated since being published + * numPending - number of unpublished articles + */ +model.blogSummary = main(args["nodeRef"]); + +function main(nodeRef) +{ + var numUpdates = 0, + numPending = 0; + + if (nodeRef != null) + { + var space = search.findNode(nodeRef); + + if (space != null) + { + for each(node in space.children) + { + if ((node.hasAspect("blg:blogPost")) && (node.properties["blg:published"] == true)) + { + if (node.properties["cm:modified"] > node.properties["blg:lastUpdate"]) + { + ++numUpdates; + } + } + else + { + ++numPending; + } + } + } + } + + var blogSummary = + { + "numUpdates": numUpdates, + "numPending": numPending + }; + return blogSummary; +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/colleaguePresence.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/collaboration/colleaguePresence.get.desc.xml new file mode 100644 index 0000000000..685d01ae97 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/colleaguePresence.get.desc.xml @@ -0,0 +1,8 @@ + + Colleague Presence Custom View + Collaboration Colleague Presence view + /collaboration/colleaguePresence?nodeRef={noderef} + + user + required + diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/colleaguePresence.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/collaboration/colleaguePresence.get.html.ftl new file mode 100644 index 0000000000..d731a0c201 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/colleaguePresence.get.html.ftl @@ -0,0 +1,138 @@ + + +
+ Colleagues Online +
+
+
+<#list colleaguePresence.colleagues?keys as key> + <#assign c = colleaguePresence.colleagues[key]> +
+
+ <#if (c.assocs["cm:avatar"]?exists)> + <#assign avatarURL = c.assocs["cm:avatar"][0].url> + <#else> + <#assign avatarURL = "images/icons/default_avatar.png"> + + avatar +
+
+
+
+
${c.properties["firstName"]!""} ${c.properties["lastName"]!""}
+
${c.properties["jobtitle"]!""}
+
${c.properties["location"]!""}
+
+
+ +
+
+
+
+
+   +
+ + diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/colleaguePresence.get.js b/config/alfresco/templates/webscripts/org/alfresco/collaboration/colleaguePresence.get.js new file mode 100644 index 0000000000..563590d66c --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/colleaguePresence.get.js @@ -0,0 +1,72 @@ +/* + * colleaguePresence + * + * Inputs: + * mandatory: nodeRef = parent space nodeRef + * + * Outputs: colleaguePresence - object containing presence data model + */ +model.colleaguePresence = main(args["nodeRef"]); + +function main(nodeRef) +{ + var space = search.findNode(nodeRef); + var colleagues = {}; + + if (space != null) + { + colleagues = parsePermissions(space); + } + + if (person.assocs["cm:avatar"] != null) + { + model.img = person.assocs["cm:avatar"][0].url; + } + + var colleaguePresence = + { + "colleagues": colleagues + }; + return colleaguePresence; +} + +function parsePermissions(space) +{ + var tokens, user, group; + var userHash = {}; + + try + { + for each(perm in space.permissions) + { + tokens = perm.split(";"); + if (tokens[0] == "ALLOWED") + { + if (("AllCollaboratorContributorCoordinatorEditor").indexOf(tokens[2]) != -1) + { + user = people.getPerson(tokens[1]); + if (user != null) + { + userHash[user.name] = user; + } + else + { + group = people.getGroup(tokens[1]); + if (group != null) + { + for each(user in people.getMembers(group)) + { + userHash[user.name] = user; + } + } + } + } + } + } + } + catch (e) + { + } + + return userHash; +} diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/projectSpace.get.desc.xml b/config/alfresco/templates/webscripts/org/alfresco/collaboration/projectSpace.get.desc.xml new file mode 100644 index 0000000000..2414bdd56f --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/projectSpace.get.desc.xml @@ -0,0 +1,8 @@ + + Project Space Custom View + Collaboration Project Space Space view + /collaboration/projectSpace?nodeRef={noderef} + + user + required + diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/projectSpace.get.html.ftl b/config/alfresco/templates/webscripts/org/alfresco/collaboration/projectSpace.get.html.ftl new file mode 100644 index 0000000000..175893a36e --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/projectSpace.get.html.ftl @@ -0,0 +1,105 @@ + + +
+ ${projectSpace.title} Summary +
+
+ + + + + +
+<#list projectSpace.subSpaces?keys as key> + <#assign node = projectSpace.subSpaces[key]> + <#assign summary = node.properties["cm:summaryWebscript"]!""> +
+
+ +
+ +
${url.context}${summary}?nodeRef=${node.nodeRef}">
+
+ +
+ +
+
+   +
+ + diff --git a/config/alfresco/templates/webscripts/org/alfresco/collaboration/projectSpace.get.js b/config/alfresco/templates/webscripts/org/alfresco/collaboration/projectSpace.get.js new file mode 100644 index 0000000000..5409fe6511 --- /dev/null +++ b/config/alfresco/templates/webscripts/org/alfresco/collaboration/projectSpace.get.js @@ -0,0 +1,36 @@ +/* + * projectSpace + * + * Inputs: + * mandatory: nodeRef = parent space nodeRef + * + * Outputs: projectSpace - object containing pproject space details + */ +model.projectSpace = main(args["nodeRef"]); + +function main(nodeRef) +{ + var title = ""; + var subSpaces = {}; + var space = search.findNode(nodeRef); + + if (space != null) + { + title = space.name; + // Discover the nodeRef of each project subspace + for each(node in space.children) + { + if (node.hasAspect("{http://www.alfresco.org/model/content/1.0}projectsummary")) + { + subSpaces[node.nodeRef] = node; + } + } + } + + var projectSpace = + { + "title": title, + "subSpaces": subSpaces + }; + return projectSpace; +} diff --git a/config/alfresco/web-client-config.xml b/config/alfresco/web-client-config.xml index 0b8a1c12c0..9aa2b4d4ee 100644 --- a/config/alfresco/web-client-config.xml +++ b/config/alfresco/web-client-config.xml @@ -410,6 +410,13 @@ + + + + + + + diff --git a/source/web/images/icons/default_avatar.png b/source/web/images/icons/default_avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..f81df11ca058579622d1d26425bf2db73e98863a GIT binary patch literal 2349 zcmV+|3DWk7P)#; zCK45mpfWBkSSCw?34YX2o2*}J@8ix)&zU(hd)L@_uVZgI(x-d9d++#s=QZb?1*H^> zhf&rK5%q|t2!T)x!JpOhGkOKwd)#-j-p}*RmYAUQ!Onms;{q4d7h`y z-`}sI(Wp9c;)I$zcP_nf67ik?3j(;dBK~^t;6e51(IYk9>g?=PhYlU07q27UMTEaH z0=PDk@O5={YG7bM<+7xdDjtukGiT1w2LC|(7*X(55x7`eTdM`iWeF7C^Mp#LJvE5$ zkh`%Z$`O&g62SF~ZQHh~?(Xhf)UKouN?<&Y@TpWvB@;>g?v5QhXtUoVX6Kv0qZ>DF zOdOAHAJ zCZLD_ejnn{LcEBWkq-h;P*7mit~D=B>SFC1OYfW~{_(S}y;4QV3v; z1CdApyN%Jf(pn{L6BpqE*bxvcwBNlj7DB!R$Cz>gGLcAxi)R*RYn$(F>NKw7kA=~} zd0)XKuJM9+sHdj~1J5>kCWXcGuveTj?!ai>_?gyU- z!lQExPMxp ztjb;6a6Sn1BK~~%@L|A$%%nt0jqDQEg*+)78O0=w@SeU8;eR=L^eFAu$-=kt-cwGX zAMxvR=g!@$um1qB%4E%RkUC$NPG}pe`?%g%rSFc|61*&vb5FE(H=OuXj3<-bp=1thQZ(j`eXy?6J=*oLfEdi_;OSt^4 zLA-?hFkr(D@u49OV$Trr*k#!N2}I)T*|V@~*Dl(Mil8FIr-)`mY|7Ip3V)DHT~kx@ ztEQ%=vREt@I)DB=w70jz%9ShOFAWXQ*VktbIIfZCa3ylruV06?YuD;$KmPdd(A?Zy zuy^0yH}HX9B6dwy1{$^V!L| zxn|88C@CokVn&PsE;WR|gg{_1=;;9W_}&Efy?ZUNY15|9@a^9qeml~wo@bqBVgQBz zCIu@VT5qmfw=S6Q?w@4}J?W}d#f2ZA+WcKInZzD>F&%7+IZ0Gbw7j-K{Qmy^`@c`Z zkKO-{t$h+-s_ah82y04h*Vx!If=Mh{@;V$iaG(NT|2bmrL`rOWVGW|8wY7D|f&~i# zYe08nLSA&%sHYa!_9EKGuR-`!|{y-IQP#4;Z$NY@>^XCW8V0J12 z+!rwHR6=F-10rJ)F2@ze$&n*Rs89Zho!kX=p&xAAun`Ii3xgBTE(0T)c#$ z2{#xp@eqkbCOoYm0x}*S3L-!E$SO0`wLxnAe59`nqiNx0sLD44Q#OI9i5_HetW^TI zkMs?6rEeOovRuWrpjz7^6DO3m=rfRRqIdEn{gej(nJ9sCd-m*sXf&Fe?}N(tJqsmV z=^)*APIyaB_|FEjM@M@H)YjI*@#DvVdj)cZbkLJ{3F64ARjb}1BGuK^&kbDLF1mt^ z{M!?J+R{lYT+t@%sq1l*?@9d(J$vQK6~M9_uw;M0lZyY+?{J7K)H~;T5)*+}5Ni?d zA-=nP`}SA2Zruu1RaG!^=FF@^OZw*infZ^eOt3)Tw=lxJwg@AOt9fejV`^;(L7k#_H9pUs=C?Jy2;~S-A?PPoKtaFoyP>;I`f| z-_bOq>7Pw->((u3Y;1%(ckYnDJ=`DnbFchw#J{-NA20^bk$`RrLLo{6FS9$n!6zbJ zU!^K>>C&a8%a$#Jii!$YxNsp*-Beay4s&MD(Zon#?7jfIF6esP1?_F^@bL48@ZiB` z7+d!N3&j|ZQF?i-GROq(v*x30iB!;jz~9hB_#m0bH3^ZR^7JJp@*?K$?_|(ysGBX}jolR57kEr!t>OQ%!efDlS-1h8 z+jR3dWsof-#_#gJ9D$MNMG+I4K8giGzJq$C1rm%DTPQ%AI(Y>0zH%k-KLG{+?q9fl Tu9KR?00000NkvXXu0mjfkJx;y literal 0 HcmV?d00001 diff --git a/source/web/images/icons/project-icon-blog-16.gif b/source/web/images/icons/project-icon-blog-16.gif new file mode 100644 index 0000000000000000000000000000000000000000..307859d0e7f24f7a56dfb1258d8eb562253fea53 GIT binary patch literal 654 zcmV;90&)FENk%w1VGsZi0EPeo>FMd;-{0foihfq_xJbp_4V4?+QGrWv9YqQuCCtR-sa}!^78WC-QBjfw*CD4+uPgk z@9*pD>+bIE*VosqtgO`A+xhVz#h0tL&d$!&)z#+ZUC9ubuz$ex#CA z;pOnm%*^KI<(!+G^XH}C#7VcYq5l2-$;rv(<>kD+!2k1nv7lJ!>-NUR#_Q|q=;!B! zhKtwBiP5w^k&uhOzreDxwV<7kbZ%Iws;{1&o~^B|s;a7`rKO&ppOBA_l$Do)gNV4d zwaUuMeSLiR`1b$+00000000000000000000000000000000000EC2ui01yBW00sy1 zfB*pi0s{mE1_uZU3JVI43=NNs4i66y5fY7$6BHE|4;L627#bTKjE)^19~T!OAsHbe zBP1o8CMOml7_le~C?6>*3M&gN0v8#}zb!5=FflSS3N!;44K)o7EjBI`12;H1IteK| zFD)-G-aIcoK0iP~LJ&0+_%0p*3`0akMvf>zlB9u$g8+CaS;C}=lP6FVL^1G!0S_Jw zPDo)eg-R7G3a(%|;9^3SEE77o&{AXzmoAOGMEN3Mg3S(K!iX6|MnMGyWg?s~5g-6j oA!g2?NwX=6nl)^qwu#~94V*Y~HYo_@N|b^*bY9f4FewlKJMpw#?*IS* literal 0 HcmV?d00001 diff --git a/source/web/images/icons/project-icon-blog-64.png b/source/web/images/icons/project-icon-blog-64.png new file mode 100644 index 0000000000000000000000000000000000000000..9ebaebfd21bcb27f514e8b6bae3454de008cfe87 GIT binary patch literal 6536 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 literal 0 HcmV?d00001 diff --git a/source/web/images/icons/project-icon-calendar-16.gif b/source/web/images/icons/project-icon-calendar-16.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd1eb6d219d9dc9e088ef94df402c26f83d752af GIT binary patch literal 611 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 literal 0 HcmV?d00001 diff --git a/source/web/images/icons/project-icon-doclibrary-16.gif b/source/web/images/icons/project-icon-doclibrary-16.gif new file mode 100644 index 0000000000000000000000000000000000000000..6b607d237330b6c9336646408a235e2b658f4949 GIT binary patch literal 641 zcmcIh-)mA)0QO2Xt&H2+XvK6cT8?F9v&eLTtgTgCt!=hOiE~4uVD#i$3l_6A#R{Ad zi1;ur26EYhTzqgB8FG=3gOD7I#=(biGLVB0a)^lF=KhF2zSr*;-_*T3wwsHridC(v z7&$T_mt@?)LWaksB+M+se4Nxo`is&A1PKqR@GuvpEd;g#I3L3M7}g-lu8=wqb0R7x zaYdvpg3AKxXj1`@4x$oIS_I{zcn{Df28jU5hUAz>%!;JU(98%}G7mE=WKU8Q1*E*BD&RsC)e)`BQbEF1QE3yj9YlpV%7tJ$AV)Y@g`^Ha z87O}gw1=d;L~1h5t-$m$ZBx==lhAztQURsinJM5>Cn88{5^W%m@REuEb8*_jI3Gnt z9+yRw38H+QHWBPhu1Y8uRsA=Z51bFaIMUTvoqp2ae{tTr5sut)=uET6r~I3KyD@CA zT|YKtIM+Qk=3TfNo;m#JgnL0a>vmrov~L`B`yBH|pUYguhDatCN=DE)abOl zecyZk89O)=*wryTN&ZXh2h%;kvBTf{&THh6GqJzF-z=@IzSi3hyNS#=UNA&e%a8()_(42IHQwg@%r=xcNbfhLh7E+RyCt?`~y}|CMN&@ literal 0 HcmV?d00001 diff --git a/source/web/images/icons/project-icon-doclibrary-64.png b/source/web/images/icons/project-icon-doclibrary-64.png new file mode 100644 index 0000000000000000000000000000000000000000..b6095c4ed51e003da8ff73faabdc21827cd5c419 GIT binary patch literal 7045 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 literal 0 HcmV?d00001 diff --git a/source/web/images/icons/project-icon-emailarchive-16.gif b/source/web/images/icons/project-icon-emailarchive-16.gif new file mode 100644 index 0000000000000000000000000000000000000000..bcd1b346f967ce7977d2f94c7bf224e634c962a3 GIT binary patch literal 650 zcmV;50(JdINk%w1VGsZi0EPeoj8*{Lt{l9AB>&o6%$g+3u6*>yEX0Bwow+@=)VqD;h&JnXt`+@3t_(scCRl=R9>?6PF^z9gh(4D7Zf zw1Os zqBP8+RHSYk%$6jydL+D-T+Eg{^wLzkf-KC6DAb-Y%&v_8(n9RIB<$+syox-`k~GxD ztpED-|Kfb)*2MqjoaDk(w2DXMwq)GSw3J=|yowa;#ze%549t!!ynZDA)>zb@PpoPH z|Mv9Es(kdqeB`obta29g?&$yCY}}??#ELYWW*qFkH2>OkHEmMrA1T3IB+QyD%&vs2ZVaq?EZm+%)S5)RdKBcgG{lB1EC2ui01yBW00sx| zfNp|<9(XTAL4%5eK15(VU}PgZi*7+OWJOYJDsp^ib5Md+BWz<6Q&SvHDqdVzL`H6P zSY}>hV=8Mi5ou{$6eV~ZYyxS$duu%%%zrU8BMB#DDNJe|R3cp>R2(Q%1rlbcD^wZ) zM|loT6LJwzSX`}US9)(*WK(9Xd{Jy=5dw0-z~&Bu7B_CRfZ<|Ihie_uIJse`f&~*{ zF0cror_T})J=CZnU}A_6IzUK#NkWRs2OCRlz_GH$PZKQ+29OZcK*o~~2NpD;5rTyn kEjijKGV(xy5(67@NX?)_siGe^ki==jwapn85CQ=JJ7^p^`Tzg` literal 0 HcmV?d00001 diff --git a/source/web/images/icons/project-icon-emailarchive-64.png b/source/web/images/icons/project-icon-emailarchive-64.png new file mode 100644 index 0000000000000000000000000000000000000000..3d46397b8eb36be25e43522413266f42e4e2c231 GIT binary patch literal 9237 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 literal 0 HcmV?d00001 diff --git a/source/web/images/icons/project-icon-emailarchive.gif b/source/web/images/icons/project-icon-emailarchive.gif new file mode 100644 index 0000000000000000000000000000000000000000..4def233538deb865497927b650dcb8fe6a583822 GIT binary patch literal 1223 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 literal 0 HcmV?d00001 diff --git a/source/web/images/icons/project-icon-gallery-16.gif b/source/web/images/icons/project-icon-gallery-16.gif new file mode 100644 index 0000000000000000000000000000000000000000..19acad713c2c754eca2ac304bd1f4779762458b0 GIT binary patch literal 646 zcmV;10(t#MNk%w1VGsZi0EPeoJeq8jro5EOtnAiQ#EMAF=GauKeAKFV)XKzcvV?4g zg#Z7X+^lr0(zNW-uym^2thTh=x{vhg-pra_biSPb_WzX1>|~yV^z!T^hUDbNq0HLU z^xnkm!i=nHLgu$dlrvL2Dq@>Qc)aL(Wj(ps*e5}^Qgr1Z%g2e2~q}-xpjL58{vb@BW zROHdI+`gQwrlj1;e1xLB#KOEprgVI^?6j_wWU`FB%EYA6|J362yx!ET*8g;(jC7KO zRIdNLy2PBStaQ4RjIyNM?*DwIj3kcqtgf`2%Dl9?#Q)yBjKY-UwuJxx|IFgl)b9WP z^5M+Bl$@fp)TL^SuAFR;ggl1K%41Mbb4(pZY&Nga4bKEh!GqPGCCzTHVmR<2Z;v^6CrzKd#$b$aEKFo z5*T`VVPS1Aye}n(c5YsDbYTcuAIVW4K|~bP-^B6 zSaBySc71q1CJ-%a^hRO}LPkSA8hsiaY%HW{qD0A@0VtFN*i)iJgf2(2G$2t042={^ zz(|=ursEC|Xht*``KEvu5oUfw$djjp3nm4=yqN(b0T(%D6nWV&@~ literal 0 HcmV?d00001 diff --git a/source/web/images/icons/project-icon-gallery-64.png b/source/web/images/icons/project-icon-gallery-64.png new file mode 100644 index 0000000000000000000000000000000000000000..a1b25f469e3de7bd07cd68550ad49e03b14d7dd3 GIT binary patch literal 8016 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 F{SU-mQg8qO literal 0 HcmV?d00001 diff --git a/source/web/images/icons/project-icon-wiki-64.png b/source/web/images/icons/project-icon-wiki-64.png new file mode 100644 index 0000000000000000000000000000000000000000..342e71380e86e6d4575c789a7a1362e0788cb6a8 GIT binary patch literal 9783 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 Rt}y@r002ovPDHLkV1m_VD{}w< literal 0 HcmV?d00001 diff --git a/source/web/images/icons/project-icon-wiki.gif b/source/web/images/icons/project-icon-wiki.gif new file mode 100644 index 0000000000000000000000000000000000000000..bba4866601fe97e16654950b6ea20413bb409be2 GIT binary patch literal 1208 zcmV;p1V{TvNk%w1VITk?0Oo%H%*^4_)8wtK&#J1<>gw{DnwYw})Rd*Syu8_?q|4XX z){VOB^z`@r{r$JOwt0Jr%F5n(dZ=7vY=eWTqp7T#o5kYd?S!%8jEubP?e2PmlarLf z<>A`d+39qh$%2EjoSn#ui?Oq_%!G=Jc9pe!e4V7D!l0nPwYAlHd$h&H-ehNHoSeIT zmaoFY+=GO;e5u)YkEUmJf5O7nfu6c+d4iCTw6Czy+}!Gdj+S_)*82JO@$m3&Z;II1 z<$R^j#>d61v9hYF#=*hc($UPZvaV%joYvOo-rnngtJ;L5#ddafb*0&il9uG*?l?yzFprq?MM*eXiq&wdabr=4XA9!N9xD&*Y}3&bGGCi@52B zh`W!Fz__^Ac&OXIz}u6PkKy6oy}sG%=HI2Jp@xNljgG_i_Vmxs;+L4kYmTvhf`4$3 zuz!HJ*x2dF$Jbk6VEFj@mzcbdpRUHn*vQD=U}|w}Zf(%g(f|MdA^8LW004ggEC2ui z03ZM$000O7fPaF6go7C~P(Fo=jExL4LSHUIf(;oBjhTXvLTCYWT?ryzLQpuGj06xu z5J)%yDh4JYLM~_~n5cpTGa>*M9d0UU2tz7(v|Tm-SGh7%+>(Mfc(&c(%y zHwJu&5aB}zkb?-AKtiXfM3fbWpc#YWhJXPTFjO!KWu_nj5S~u#0wL;DmRA!bnDR!< zhYx!H7R^AR4uIW?E{0%a8Pv;K5Ld3ud12#DAqytf?Wvfp44Rcuta|Y>#YTw-Ju*jt zP^iHPV=nSK-Wz$q053Kk6mVdMkCZKZG-N3BC5lvmd(oQqQbIz3AbDbJ@$f@RA2YKD z;i!Od3{}2YCx=*~fy9q2Sr*9QGs2960?Gf}fkHJ(WUHs8n^99kOBFC+7PMGXAP$it zY7~m_V)g27wNpG`Mhi(SP(>9BfDywQIq+e}2nF~t$PpL_FqvNfR@R3c@fmoa5)>$K zMi3e_;Q$3m*?{2`EP_x02))U%fEHjJc)=DY;eW@ z1ANGF9efMin8pq|wsA%QeGsAt1|YoQC0xLLh*au;>I>#I-SV3kG z4RFx{7PrCxg9its(L^8NRT9Fm#1?CW6(uZDgdZ_H;j9kiK0!kPb^yVM5GkY(ffYtf zzybhwWMD=O9$-NRxjHaG1{@Lu(TER5Y|BC&3=qOY0WwJ8fevJNAjcLDsM`n?4?@h~ WL?aClQNRN-$WX%w4p2czAOJfe&@J!) literal 0 HcmV?d00001 diff --git a/source/web/jsp/projects/project.jsp b/source/web/jsp/projects/project.jsp index f820ce119e..dcd67a3722 100644 --- a/source/web/jsp/projects/project.jsp +++ b/source/web/jsp/projects/project.jsp @@ -109,10 +109,21 @@ - - <%-- TODO: Project View webscripts --%> - - + + + + <%-- Project Summary webscript --%> + + + <%-- Colleague Presence Status webscript --%> + + + +
+ + + +
diff --git a/source/web/scripts/ajax/project_presence.js b/source/web/scripts/ajax/project_presence.js new file mode 100644 index 0000000000..86ee04cf3e --- /dev/null +++ b/source/web/scripts/ajax/project_presence.js @@ -0,0 +1,126 @@ +/* +* Prerequisites: mootools.v1.11.js +*/ +var ProjectPresence = +{ + OFFLINE_OPACITY: 0.2, + + init: function() + { + window.contextPath = ProjectPresence.getContextPath(); + + var statuses = $$("#projectColleagues .colleaguePresence"); + var rows = $$("#projectColleagues .colleagueRow"); + + $('colleaguesNotOnline').setStyle("opacity", ProjectPresence.OFFLINE_OPACITY); + + statuses.each(function(status, i) + { + var userDetails = status.attributes["rel"].value.split("|"); + var proxyURL = window.contextPath + "/ajax/invoke/PresenceProxyBean.proxyRequest"; + var statusURL = ProjectPresence.getStatusURL(userDetails); + + if (statusURL != "") + { + // ajax call to load online status + var myAjax = new Ajax(proxyURL, { + method: 'get', + headers: {'If-Modified-Since': 'Sat, 1 Jan 2000 00:00:00 GMT'}, + onComplete: function(textResponse, xmlResponse) + { + var statusType = ProjectPresence.getStatusType(userDetails[0], textResponse); + status.addClass(userDetails[0] + "-" + statusType); + if (statusType == "unknown") + { + status.title = "User's status is unknown, possibly due to client privacy settings"; + } + else + { + status.title = "User's status is " + statusType; + } + if (statusType == "online") + { + $('colleaguesOnline').adopt(rows[i]); + } + else + { + $('colleaguesNotOnline').adopt(rows[i]); + } + } + }).request("url=" + escape(statusURL)); + } + else + { + status.addClass("none"); + status.title = "User's presence provider has not been configured by Alfresco admin"; + $('colleaguesNotOnline').adopt(rows[i]); + } + }); + }, + + /* Calculates and returns the context path for the current page */ + getContextPath: function() + { + var path = window.location.pathname; + var idx = path.indexOf("/", 1); + var contextPath = ""; + if (idx != -1) + { + contextPath = path.substring(0, idx); + } + else + { + contextPath = ""; + } + + return contextPath; + }, + + getStatusURL: function(userDetails) + { + var provider = userDetails[0]; + var username = userDetails[1]; + var statusURL = ""; + + switch(provider) + { + case "skype": + statusURL = "http://mystatus.skype.com/" + username + ".txt"; + break; + case "yahoo": + statusURL = "http://opi.yahoo.com/online?u=" + username + "&m=t&t=1"; + break; + } + + return statusURL; + }, + + getStatusType: function(provider, response) + { + var statusType = "unknown"; + + switch(provider) + { + case "skype": + switch (response) + { + case "Online": + statusType = "online"; + break; + case "Offline": + statusType = "offline"; + break; + default: + statusType = "unknown"; + } + break; + case "yahoo": + statusType = (response == "01") ? "online" : "offline"; + break; + } + + return statusType; + } +} + +window.addEvent('domready', ProjectPresence.init); diff --git a/source/web/scripts/ajax/project_space.js b/source/web/scripts/ajax/project_space.js new file mode 100644 index 0000000000..44346a37f4 --- /dev/null +++ b/source/web/scripts/ajax/project_space.js @@ -0,0 +1,27 @@ +/* +* Prerequisites: mootools.v1.11.js +*/ +var ProjectSpace = +{ + init: function() + { + var summaries = $$("#projectSummary .projectSpaceSummary"); + + summaries.each(function(summary, i) + { + var summaryURL = summary.attributes["rel"].value; + + if (summaryURL != "") + { + // ajax call to load space summary + var myAjax = new Ajax(summaryURL, { + method: "get", + headers: {"If-Modified-Since": "Sat, 1 Jan 2000 00:00:00 GMT"}, + update: summary + }).request(); + } + }); + } +} + +window.addEvent('domready', ProjectSpace.init);