added a request tracker system via the CS

This commit is contained in:
JT Smith 2006-04-27 21:56:15 +00:00
parent d5a33068d1
commit 6b77047cde
9 changed files with 698 additions and 16 deletions

View file

@ -32,6 +32,7 @@
- Increased the performance of CS Thread viewing by 500%.
- Changed the CS post rating mechinism to thumbs up/down to be less
confusing.
- Added CS templates to run a request tracker (trouble ticket) style system.
- Updated TinyMCE rich text editor to version 2.0.5.1.
- Disabled the rich editor for Safari because it doesn't work correctly.
- Added install/uninstall functions to the asset and wobject skeletons to

View file

@ -485,6 +485,24 @@ sub addPrototypes {
threadTemplateId=>"PBtmpl0000000000000067",
postFormTemplateId=>"PBtmpl0000000000000068"
},"pbproto000000000000001");
$importNode->addChild({
title=>"Request Tracker",
menuTitle=>"Request Tracker",
url=>"request-tracker-prototype",
groupIdView=>'7',
groupIdEdit=>'12',
className=>'WebGUI::Asset::Wobject::Collaboration',
assetId=>"new",
allowReplies=>1,
attachmentsPerPost=>10,
isPrototype=>1,
usePreview=>0,
archiveAfter=>60*60*24*30,
defaultKarmaScale=>100,
collaborationTemplateId=>"PBtmpl0000000000000208",
threadTemplateId=>"PBtmpl0000000000000209",
postFormTemplateId=>"PBtmpl0000000000000210"
},"pbproto000000000000001");
}

View file

@ -0,0 +1,110 @@
#PBtmpl0000000000000208
#create
#namespace:Collaboration
#url:request-tracker-template
#title:Request Tracker
#menuTitle:Request Tracker
<a name="id<tmpl_var assetId>" id="id<tmpl_var assetId>"></a>
<tmpl_if session.var.adminOn>
<p><tmpl_var controls></p>
</tmpl_if>
<tmpl_if displayTitle>
<h2><tmpl_var title></h2>
</tmpl_if>
<tmpl_if description>
<tmpl_var description>
</tmpl_if>
<p>
<tmpl_if user.canPost>
<a href="<tmpl_var add.url>"><tmpl_var add.label></a>
&#149;
</tmpl_if>
<tmpl_unless user.isVisitor>
<tmpl_if user.isSubscribed>
<a href="<tmpl_var unsubscribe.url>"><tmpl_var unsubscribe.label></a>
<tmpl_else>
<a href="<tmpl_var subscribe.url>"><tmpl_var subscribe.label></a>
</tmpl_if>
&#149;
</tmpl_unless>
<a href="<tmpl_var search.url>"><tmpl_var search.label></a>
</p>
<table width="100%">
<tr>
<td class="forumHead"><a href="<tmpl_var sortby.title.url>"><tmpl_var subject.label></a></td>
<td class="forumHead"><a href="<tmpl_var sortby.username.url>"><tmpl_var user.label></a></td>
<tmpl_if karmaIsEnabled>
<td class="forumHead"><a href="<tmpl_var sortby.karmaRank.url>"><tmpl_var karmaRank.label></a></td>
</tmpl_if karmaIsEnabled>
<td class="forumHead"><a href="<tmpl_var sortby.rating.url>"><tmpl_var rating.label></a></td>
<td class="forumHead"><a href="<tmpl_var sortby.date.url>"><tmpl_var date.label></a></td>
<tmpl_if displayLastReply>
<td class="forumHead"><a href="<tmpl_var sortby.lastreply.url>"><tmpl_var lastReply.label></a></td>
</tmpl_if>
</tr>
<tmpl_loop post_loop>
<tr>
<td class="<tmpl_if __ODD__>oddThread<tmpl_else>evenThread</tmpl_if>"><a href="<tmpl_var url>"><tmpl_var title></a></td>
<tmpl_if user.isVisitor>
<td class="<tmpl_if __ODD__>oddThread<tmpl_else>evenThread</tmpl_if>"><tmpl_var username></td>
<tmpl_else>
<td class="<tmpl_if __ODD__>oddThread<tmpl_else>evenThread</tmpl_if>"><a href="<tmpl_var userProfile.url>"><tmpl_var username></a></td>
</tmpl_if>
<tmpl_if karmaIsEnabled>
<td class="<tmpl_if __ODD__>oddThread<tmpl_else>evenThread</tmpl_if>" align="center"><tmpl_var karmaRank></td>
</tmpl_if>
<td class="<tmpl_if __ODD__>oddThread<tmpl_else>evenThread</tmpl_if>" align="center"><tmpl_var rating></td>
<td class="<tmpl_if __ODD__>oddThread<tmpl_else>evenThread</tmpl_if>"><tmpl_var dateSubmitted.human> @ <tmpl_var timeSubmitted.human></td>
<tmpl_if displayLastReply>
<td class="<tmpl_if __ODD__>oddThread<tmpl_else>evenThread</tmpl_if>" style="font-size: 11px;">
<a href="<tmpl_var lastReply.url>"><tmpl_var lastReply.title></a>
by
<tmpl_if lastReply.user.isVisitor>
<tmpl_var lastReply.username>
<tmpl_else>
<a href="<tmpl_var lastReply.userProfile.url>"><tmpl_var lastReply.username></a>
</tmpl_if>
on <tmpl_var lastReply.dateSubmitted.human> @ <tmpl_var lastReply.timeSubmitted.human>
</td>
</tmpl_if>
</tr>
</tmpl_loop>
</table>
<tmpl_if pagination.pageCount.isMultiple>
<div class="pagination">
<tmpl_var pagination.previousPage> &#183; <tmpl_var pagination.pageList.upTo10> &#183; <tmpl_var pagination.nextPage>
</div>
</tmpl_if>
~~~
<style type="text/css">
.forumHead {
background-color: #eeeeee;
border-bottom: 1px solid #cccccc;
padding: 2px;
padding-bottom: 4px;
font-size: 13px;
font-weight: bold;
}
.oddThread {
font-size: 13px;
border-bottom: 1px dashed #83cc83;
padding-bottom: 4px;
}
.evenThread {
font-size: 13px;
border-bottom: 1px dashed #aaaaff;
padding-bottom: 4px;
}
</style>

View file

@ -0,0 +1,343 @@
#PBtmpl0000000000000209
#create
#namespace:Collaboration/Thread
#url:request-tracker-post-template
#title:Request Tracker Post
#menuTitle:Request Tracker Post
<a name="id<tmpl_var assetId>" id="id<tmpl_var assetId>"></a>
<tmpl_if session.var.adminOn>
<p><tmpl_var controls></p>
</tmpl_if>
<h2><tmpl_var title></h2>
<div class="defaultSubmissionDetails">
<b><tmpl_var user.label>:</b>
<tmpl_if user.isVisitor>
<tmpl_var username>
<tmpl_else>
<a href="<tmpl_var userProfile.url>"><tmpl_var username></a>
</tmpl_if>
<br />
<b><tmpl_var date.label>:</b> <tmpl_var dateSubmitted.human><br />
<b><tmpl_var severity.label>:</b> <tmpl_var userDefined1><br />
<b><tmpl_var views.label>:</b> <tmpl_var views><br />
<b><tmpl_var rating.label>:</b> <tmpl_var rating>
<tmpl_unless hasRated>
&nbsp; &nbsp;<tmpl_var rate.label> [ <p style="display:inline;vertical-align:middle;"><a href="<tmpl_var rate.url.thumbsUp>"><img src="<tmpl_var thumbsUp.icon.url>" alt="+" style="border: 0px;vertical-align:middle;" /></a></p> | <p style="display:inline;vertical-align:middle;"><a href="<tmpl_var rate.url.thumbsDown>"><img src="<tmpl_var thumbsDown.icon.url>" alt="-" style="border: 0px;vertical-align:middle;" /></a></p> ]
</tmpl_unless>
<br />
<tmpl_if user.isModerator>
<b><tmpl_var status.label>:</b> <tmpl_if isArchived><tmpl_var closed.label> &nbsp; &nbsp; [ <a href="<tmpl_var unarchive.url>"><tmpl_var open.label></a> <tmpl_else> <tmpl_var open.label> &nbsp; &nbsp; [ <a href="<tmpl_var archive.url>"><tmpl_var close.label></a></tmpl_if> ]<br />
<tmpl_else>
<tmpl_if user.isPoster>
<b><tmpl_var status.label>:</b> <tmpl_if isArchived><tmpl_var closed.label> <tmpl_else> <tmpl_var open.label></tmpl_if><br />
</tmpl_if>
</tmpl_if>
<tmpl_if karmaIsEnabled>
<b><tmpl_var karmaRank.label>:</b> <tmpl_var karmaRank><br />
<b><tmpl_var transferkarma.label>:</b>
<tmpl_var transfer.karma.form>
</tmpl_if>
</div>
<div class="collaborationThreadContent">
<tmpl_var content>
</div>
<tmpl_if attachment_loop>
<br />
<tmpl_loop attachment_loop>
<div style="float: left; padding: 5px;">
<a href="<tmpl_var url>"><tmpl_if isImage><img src="<tmpl_var thumbnail>" border="0" alt="<tmpl_var filename>" /><tmpl_else><img src="<tmpl_var icon>" border="0" alt="<tmpl_var filename>" align="middle" /> <tmpl_var filename></tmpl_if></a>
</div>
</tmpl_loop>
<div style="clear: both;"></div>
<br />
</tmpl_if>
<tmpl_unless isLocked>
<div class="postControls">
<tmpl_if user.canReply>
<a href="<tmpl_var reply.url>"><tmpl_var reply.label></a>
&bull;
</tmpl_if>
<tmpl_if user.canEdit>
<a href="<tmpl_var edit.url>"><tmpl_var edit.label></a>
&bull;
<a href="<tmpl_var delete.url>"><tmpl_var delete.label></a>
</tmpl_if>
</div>
</tmpl_unless>
<tmpl_if repliesAllowed>
<div style="float: left; width: 70%">
<h2><tmpl_var replies.label></h2>
</div>
<div style="width: 30%; float: left; text-align: right;">
<tmpl_if layout.isFlat>
<a href="<tmpl_var layout.nested.url>"><tmpl_var layout.nested.label></a>
<tmpl_else>
<a href="<tmpl_var layout.flat.url>"><tmpl_var layout.flat.label></a>
</tmpl_if>
</div>
<div style="clear: both;"></div>
<tmpl_if layout.isFlat>
<!-- begin flat layout -->
<tmpl_loop post_loop>
<tmpl_unless isThreadRoot>
<div class="postBorder<tmpl_if isCurrent>Current</tmpl_if>">
<a name="<tmpl_var assetId>"></a>
<div class="postSubject">
<tmpl_var title>
</div>
<div class="postData">
<div style="float: left; width: 50%">
<b><tmpl_var user.label>:</b>
<tmpl_if user.isVisitor>
<tmpl_var username>
<tmpl_else>
<a href="<tmpl_var userProfile.url>"><tmpl_var username></a>
</tmpl_if>
<br />
<b><tmpl_var date.label>:</b> <tmpl_var dateSubmitted.human><br />
</div>
<div>
<b><tmpl_var rating.label>:</b> <tmpl_var rating>
<tmpl_unless hasRated>
&nbsp; &nbsp;<tmpl_var rate.label> [ <p style="display:inline;vertical-align:middle;"><a href="<tmpl_var rate.url.thumbsUp>"><img src="<tmpl_var thumbsUp.icon.url>" alt="+" style="border: 0px;vertical-align:middle;" /></a></p> | <p style="display:inline;vertical-align:middle;"><a href="<tmpl_var rate.url.thumbsDown>"><img src="<tmpl_var thumbsDown.icon.url>" alt="-" style="border: 0px;vertical-align:middle;" /></a></p> ]
</tmpl_unless>
</div>
</div>
<div class="postMessage">
<tmpl_var content>
<tmpl_loop attachment_loop>
<div style="float: left; padding: 5px;"><a href="<tmpl_var url>"><tmpl_if isImage><img src="<tmpl_var thumbnail>" border="0" alt="<tmpl_var filename>" /><tmpl_else><img src="<tmpl_var icon>" border="0" alt="<tmpl_var filename>" align="middle" /> <tmpl_var filename></tmpl_if></a></div>
</tmpl_loop>
<div style="clear: both;"></div>
</div>
<tmpl_unless isLocked>
<div class="postControls">
<tmpl_if user.canReply>
<a href="<tmpl_var reply.url>"><tmpl_var reply.label></a>
&bull;
</tmpl_if>
<tmpl_if user.canEdit>
<a href="<tmpl_var edit.url>"><tmpl_var edit.label></a>
&bull;
<a href="<tmpl_var delete.url>"><tmpl_var delete.label></a>
</tmpl_if>
</div>
</tmpl_unless>
</div>
</tmpl_unless>
</tmpl_loop>
<!-- end flat layout -->
</tmpl_if>
<tmpl_if layout.isNested>
<!-- begin nested layout -->
<tmpl_loop post_loop>
<tmpl_unless isThreadRoot>
<div style="margin-left: <tmpl_var depthX10>px;">
<div class="postBorder<tmpl_if isCurrent>Current</tmpl_if>">
<a name="<tmpl_var assetId>"></a>
<div class="postSubject">
<tmpl_var title>
</div>
<div class="postData">
<div style="float: left; width: 50%">
<b><tmpl_var user.label>:</b>
<tmpl_if user.isVisitor>
<tmpl_var username>
<tmpl_else>
<a href="<tmpl_var userProfile.url>"><tmpl_var username></a>
</tmpl_if>
<br />
<b><tmpl_var date.label>:</b> <tmpl_var dateSubmitted.human><br />
</div>
<div>
<b><tmpl_var rating.label>:</b> <tmpl_var rating>
<tmpl_unless hasRated>
&nbsp; &nbsp;<tmpl_var rate.label> [ <p style="display:inline;vertical-align:middle;"><a href="<tmpl_var rate.url.thumbsUp>"><img src="<tmpl_var thumbsUp.icon.url>" alt="+" style="border: 0px;vertical-align:middle;" /></a></p> | <p style="display:inline;vertical-align:middle;"><a href="<tmpl_var rate.url.thumbsDown>"><img src="<tmpl_var thumbsDown.icon.url>" alt="-" style="border: 0px;vertical-align:middle;" /></a></p> ]
</tmpl_unless>
<br />
</div>
</div>
<div class="postMessage">
<tmpl_var content>
<tmpl_loop attachment_loop>
<div style="float: left; padding: 5px;"><a href="<tmpl_var url>"><tmpl_if isImage><img src="<tmpl_var thumbnail>" border="0" alt="<tmpl_var filename>" /><tmpl_else><img src="<tmpl_var icon>" border="0" alt="<tmpl_var filename>" align="middle" /> <tmpl_var filename></tmpl_if></a></div>
</tmpl_loop>
<div style="clear: both;"></div>
</div>
<tmpl_unless isLocked>
<div class="postControls">
<tmpl_if user.canReply>
<a href="<tmpl_var reply.url>"><tmpl_var reply.label></a>
&bull;
</tmpl_if>
<tmpl_if user.canEdit>
<a href="<tmpl_var edit.url>"><tmpl_var edit.label></a>
&bull;
<a href="<tmpl_var delete.url>"><tmpl_var delete.label></a>
</tmpl_if>
</div>
</tmpl_unless>
</div>
</div>
</tmpl_unless>
</tmpl_loop>
<!-- end nested layout -->
</tmpl_if>
<tmpl_if pagination.pageCount.isMultiple>
<div class="pagination" style="margin-top: 20px;">
[ <tmpl_var pagination.previousPage> | <tmpl_var pagination.pageList.upTo10> | <tmpl_var pagination.nextPage> ]
</div>
</tmpl_if>
</tmpl_if>
<div class="postControls">
<tmpl_if previous.url>
<a href="<tmpl_var previous.url>"><tmpl_var previous.label></a>
&bull;
</tmpl_if>
<a href="<tmpl_var collaboration.url>"><tmpl_var back.label></a>
<tmpl_if next.url>
&bull;
<a href="<tmpl_var next.url>"><tmpl_var next.label></a>
</tmpl_if>
<tmpl_if user.canPost>
&bull;
<a href="<tmpl_var add.url>"><tmpl_var add.label></a>
&bull;
</tmpl_if>
<tmpl_if user.isModerator>
<tmpl_if isSticky>
<a href="<tmpl_var unstick.url>"><tmpl_var unstick.label></a>
&bull;
<tmpl_else>
<a href="<tmpl_var stick.url>"><tmpl_var stick.label></a>
&bull;
</tmpl_if>
<tmpl_if isLocked>
<a href="<tmpl_var unlock.url>"><tmpl_var unlock.label></a>
&bull;
<tmpl_else>
<a href="<tmpl_var lock.url>"><tmpl_var lock.label></a>
&bull;
</tmpl_if>
</tmpl_if>
<tmpl_unless user.isVisitor>
<tmpl_if user.isSubscribed>
<a href="<tmpl_var unsubscribe.url>"><tmpl_var unsubscribe.label></a>
<tmpl_else>
<a href="<tmpl_var subscribe.url>"><tmpl_var subscribe.label></a>
</tmpl_if>
</tmpl_unless>
</div>
~~~
<style type="text/css">
.defaultSubmissionDetails
{
float: right;
padding: 2px;
margin: 2px;
font-size:9pt;
font-family:arial;
}
.defaultSubmissionDetails a
{
color:#29587E;
}
.postBorder {
border: 1px solid #cccccc;
margin-bottom: 10px;
}
.postBorderCurrent {
border: 3px dotted black;
margin-bottom: 10px;
}
.postSubject {
border-bottom: 1px solid #cccccc;
font-weight: bold;
padding: 3px;
font-family:arial;
}
.postData {
border-bottom: 1px solid #cccccc;
font-size: 9pt;
background-color: #eeeeee;
color: black;
padding: 3px;
font-family:arial;
}
.postControls {
border-top: 1px solid #cccccc;
background-color: #eeeeee;
color: black;
padding: 3px;
font-family:arial;
}
.postMessage {
padding: 3px;
}
.currentThread {
background-color: #eeeeee;
}
.threadHead {
font-weight: bold;
border-bottom: 1px solid #cccccc;
font-size: 9pt;
background-color: #eeeeee;
color: black;
padding: 3px;
font-family:arial;
}
.threadData {
font-size: 11px;
padding: 3px;
font-family:arial;
}
.postControls
{
background:#C0C0C0;
display:block;
text-align:right;
padding:3px;
font-size:9pt;
font-family:arial;
margin-top: 1px;
}
.postControls a
{
color:white;
}
.collaborationThreadContent
{
height:100px;
font-family:arial;
font-size:9pt;
}
#mainText > .collaborationThreadContent
{
height:auto;
min-height:100px;
}
</style>

View file

@ -0,0 +1,111 @@
#PBtmpl0000000000000210
#create
#namespace:Collaboration/PostForm
#url:request-tracker-template
#title:Request Tracker
#menuTitle:Request Tracker
<a name="id<tmpl_var assetId>" id="id<tmpl_var assetId>"></a>
<tmpl_if preview.title>
<p><b><tmpl_var preview.title></b></p>
</tmpl_if>
<tmpl_if preview.content>
<p><tmpl_var preview.content></p>
</tmpl_if>
<h2><tmpl_var message.header.label></h2>
<tmpl_var form.header>
<table class="defaultPostForm">
<tmpl_if isNewPost>
<tmpl_if user.isVisitor>
<tr>
<td><tmpl_var visitorName.label></td>
<td><tmpl_var visitorName.form></td>
</tr>
</tmpl_if>
</tmpl_if>
<tr>
<td><tmpl_var subject.label></td>
<td><tmpl_var title.form></td>
</tr>
<tr>
<td><tmpl_var severity.label></td>
<td><select id="myCustomField1" name="userDefined1">
<option value="<tmpl_var cosmetic.label>"><tmpl_var cosmetic.label></option>
<option value="<tmpl_var minor.label>"><tmpl_var minor.label></option>
<option value="<tmpl_var critical.label>"><tmpl_var critical.label></option>
<option value="<tmpl_var fatal.label>"><tmpl_var fatal.label></option>
</select>
<script type="text/javascript">
var value = '<tmpl_var name="userDefined1" escape="JS">';
var field = document.getElementById("myCustomField1");
for (var i = 0; i < field.options.length; i++) {
if (field.options[i].value == value) {
field.selectedIndex = i;
}
}
</script>
</td>
</tr>
<tr>
<td><tmpl_var description.label></td>
<td><tmpl_var content.form></td>
</tr>
<tmpl_if attachment.form>
<tr>
<td><tmpl_var attachment.label></td>
<td><tmpl_var attachment.form></td>
</tr>
</tmpl_if>
<tmpl_if user.isModerator><tmpl_if karmaIsEnabled><tmpl_if isThread>
<tr>
<td><tmpl_var karmaScale.label></td>
<td><tmpl_var karmaScale.form></td>
</tr>
</tmpl_if></tmpl_if></tmpl_if>
<tmpl_if isNewPost>
<tmpl_unless user.isVisitor>
<tr>
<td><tmpl_var subscribe.label></td>
<td><tmpl_var subscribe.form></td>
</tr>
</tmpl_unless>
<tmpl_if isNewThread>
<tmpl_if user.isModerator>
<tr>
<td><tmpl_var lock.label></td>
<td><tmpl_var lock.form></td>
</tr>
<tr>
<td><tmpl_var stick.label></td>
<td><tmpl_var sticky.form></td>
</tr>
</tmpl_if>
</tmpl_if>
</tmpl_if>
<tr>
<td></td>
<td><tmpl_if usePreview><tmpl_var form.preview></tmpl_if><tmpl_var form.submit></td>
</tr>
</table>
<tmpl_var form.footer>
<tmpl_if isReply>
<p><b><tmpl_var reply.title></b></p>
<tmpl_var reply.content>
</tmpl_if>
~~~
<style type="text/css">
table.defaultPostForm td
{
font-family:arial;
font-size:9pt;
}
h2
{
font-family:arial;
}
</style>