taskmapper-trac 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rbenv-gemsets +1 -0
- data/.rvmrc +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +75 -0
- data/LICENSE +22 -0
- data/README.md +60 -0
- data/Rakefile +48 -0
- data/VERSION +1 -0
- data/lib/provider/comment.rb +79 -0
- data/lib/provider/project.rb +72 -0
- data/lib/provider/ticket.rb +126 -0
- data/lib/provider/trac.rb +49 -0
- data/lib/taskmapper-trac.rb +15 -0
- data/lib/trac/trac.rb +44 -0
- data/spec/comments_spec.rb +54 -0
- data/spec/commentutil_spec.rb +14 -0
- data/spec/commentutils-data.html +405 -0
- data/spec/fixtures/tickets.xml +0 -0
- data/spec/projects_spec.rb +43 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +11 -0
- data/spec/taskmapper-trac_spec.rb +13 -0
- data/spec/tickets_spec.rb +54 -0
- data/taskmapper-trac.gemspec +90 -0
- metadata +188 -0
@@ -0,0 +1,49 @@
|
|
1
|
+
module TaskMapper::Provider
|
2
|
+
# This is the Yoursystem Provider for taskmapper
|
3
|
+
module Trac
|
4
|
+
include TaskMapper::Provider::Base
|
5
|
+
|
6
|
+
# This is for cases when you want to instantiate using TaskMapper::Provider::Yoursystem.new(auth)
|
7
|
+
def self.new(auth = {})
|
8
|
+
TaskMapper.new(:trac, auth)
|
9
|
+
end
|
10
|
+
|
11
|
+
def authorize(auth = {})
|
12
|
+
@authentication ||= TaskMapper::Authenticator.new(auth)
|
13
|
+
auth = @authentication
|
14
|
+
@trac = ::Trac.new(auth.url, auth.username, auth.password)
|
15
|
+
TaskMapper::Provider::Trac.api = {:trac => @trac, :url => auth.url, :username => auth.username, :password => auth.password}
|
16
|
+
end
|
17
|
+
|
18
|
+
# declare needed overloaded methods here
|
19
|
+
def projects(*options)
|
20
|
+
[Project.new({:url => @authentication.url, :username => @authentication.username, :name => "#{@authentication.username}-project"})]
|
21
|
+
end
|
22
|
+
|
23
|
+
def project(*options)
|
24
|
+
unless options.empty?
|
25
|
+
Project.new({:url => @authentication.url, :username => @authentication.username, :name => "#{@authentication.username}-project"})
|
26
|
+
else
|
27
|
+
TaskMapper::Provider::Trac::Project
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.api=(trac_instance)
|
32
|
+
@api = trac_instance
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.api
|
36
|
+
@api
|
37
|
+
end
|
38
|
+
|
39
|
+
def valid?
|
40
|
+
begin
|
41
|
+
@trac.tickets.list
|
42
|
+
true
|
43
|
+
rescue Exception
|
44
|
+
false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'openssl'
|
3
|
+
require 'trac4r'
|
4
|
+
require 'nokogiri'
|
5
|
+
require 'open-uri'
|
6
|
+
|
7
|
+
# FIXME: Hack for SSL problem
|
8
|
+
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
|
9
|
+
|
10
|
+
require File.dirname(__FILE__) + '/trac/trac'
|
11
|
+
|
12
|
+
%w{ trac ticket project comment }.each do |f|
|
13
|
+
require File.dirname(__FILE__) + '/provider/' + f + '.rb';
|
14
|
+
end
|
15
|
+
|
data/lib/trac/trac.rb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
# code to communicate with your backend goes here...
|
2
|
+
|
3
|
+
class CommentUtil
|
4
|
+
|
5
|
+
def initialize(ticket_id, trac, doc = nil)
|
6
|
+
@doc = doc || Nokogiri::HTML(open("#{trac[:url]}/ticket/#{ticket_id}", :http_basic_authentication=>[trac[:username], trac[:password]]))
|
7
|
+
@ticket_id = ticket_id
|
8
|
+
end
|
9
|
+
|
10
|
+
def comments
|
11
|
+
comment_id = 0
|
12
|
+
@doc.css('h3.change a.timeline').collect do |value|
|
13
|
+
body = @doc.css('div.comment')
|
14
|
+
authors = @doc.css('h3.change')
|
15
|
+
comment_id += 1
|
16
|
+
unless body[comment_id-1].nil? || authors[comment_id-1].nil?
|
17
|
+
comment_body = body[comment_id-1].text
|
18
|
+
if comment_body =~ /\w+/
|
19
|
+
build_comment_hash(value, comment_id, comment_body, authors[comment_id-1].content)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
def build_comment_hash(value, comment_id, body, author)
|
27
|
+
comment = {}
|
28
|
+
comment[:created_at] = date_from_attributes(value)
|
29
|
+
comment[:updated_at] = date_from_attributes(value)
|
30
|
+
comment[:ticket_id] = @ticket_id
|
31
|
+
comment[:body] = body
|
32
|
+
comment[:author] = normalize_author_field(author)
|
33
|
+
comment[:id] = comment_id
|
34
|
+
comment
|
35
|
+
end
|
36
|
+
|
37
|
+
def normalize_author_field(author)
|
38
|
+
author.strip.split(/by/)[1].split(/@/)[0]
|
39
|
+
end
|
40
|
+
|
41
|
+
def date_from_attributes(value)
|
42
|
+
value.attributes["title"].value.split(/\s/)[0]
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe TaskMapper::Provider::Trac::Comment do
|
4
|
+
before(:each) do
|
5
|
+
@taskmapper = TaskMapper.new(:trac, {:username => 'george.rafael@gmail.com', :password => '123456', :url => 'http://pl3.projectlocker.com/cored/testrepo/trac'})
|
6
|
+
@project = @taskmapper.projects.first
|
7
|
+
@project.stub!(:tickets).and_return([TaskMapper::Provider::Trac::Ticket.new])
|
8
|
+
@ticket = @project.tickets.first
|
9
|
+
@klass = TaskMapper::Provider::Trac::Comment
|
10
|
+
@comment_1 = @klass.new(:id => 1)
|
11
|
+
@comment_2 = @klass.new(:id => 2)
|
12
|
+
@comments = [@comment_1, @comment_2]
|
13
|
+
@ticket.stub!(:comments).and_return(@comments)
|
14
|
+
@ticket.stub!(:comment).and_return(@comment_2)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should load all comments from a ticket" do
|
18
|
+
@ticket.comments.should be_an_instance_of(Array)
|
19
|
+
@ticket.comments.first.should be_an_instance_of(@klass)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should be able to load all comments based on id's" do
|
23
|
+
@comments = @ticket.comments([1,2])
|
24
|
+
@comments.should be_an_instance_of(Array)
|
25
|
+
@comments.first.id.should == 1
|
26
|
+
@comments.last.id.should == 2
|
27
|
+
@comments[1].should be_an_instance_of(@klass)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should be able to load comments throught attributes" do
|
31
|
+
@comments = @ticket.comments(:ticket_id => 1)
|
32
|
+
@comments.should be_an_instance_of(Array)
|
33
|
+
@comments.first.id.should == 1
|
34
|
+
@comments.last.id.should == 2
|
35
|
+
@comments[1].should be_an_instance_of(@klass)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should be able to load a comment based on id" do
|
39
|
+
@comment = @ticket.comment(2)
|
40
|
+
@comment.should be_an_instance_of(@klass)
|
41
|
+
@comment.id.should == 2
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should return the comment class" do
|
45
|
+
@ticket.comment.should be_an_instance_of(@klass)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should be able to load a comment using attributes" do
|
49
|
+
@comment = @ticket.comment(:ticket_id => 2)
|
50
|
+
@comment.should be_an_instance_of(@klass)
|
51
|
+
@comment.id.should == 2
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe CommentUtil do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
trac = {:url => 'http://localhost/trac', :username => 'username', :password => 'password'}
|
7
|
+
@comment_util = CommentUtil.new(1, trac, Nokogiri::HTML(File.open('spec/commentutils-data.html')))
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should return all comments for a ticket" do
|
11
|
+
@comment_util.comments.should be_instance_of(Array)
|
12
|
+
@comment_util.comments.first[:comment_id] == 1
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,405 @@
|
|
1
|
+
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
<head>
|
11
|
+
<title>
|
12
|
+
#142 (Accredited investor reminder on forwarded deals)
|
13
|
+
– CapLinked ProjectLocker
|
14
|
+
</title>
|
15
|
+
<link rel="search" href="/CapLinked/Website/trac/search" />
|
16
|
+
<link rel="prev" href="/CapLinked/Website/trac/ticket/115" title="Ticket #115" />
|
17
|
+
<link rel="last" href="/CapLinked/Website/trac/ticket/165" title="Ticket #165" />
|
18
|
+
<link rel="help" href="/CapLinked/Website/trac/wiki/TracGuide" />
|
19
|
+
<link rel="alternate" href="/CapLinked/Website/trac/ticket/142?format=csv" type="text/csv" class="csv" title="Comma-delimited Text" /><link rel="alternate" href="/CapLinked/Website/trac/ticket/142?format=tab" type="text/tab-separated-values" class="tab" title="Tab-delimited Text" /><link rel="alternate" href="/CapLinked/Website/trac/ticket/142?format=rss" type="application/rss+xml" class="rss" title="RSS Feed" />
|
20
|
+
<link rel="up" href="/CapLinked/Website/trac/report/6?USER=ron%40hybridgroup.com&page=1" />
|
21
|
+
<link rel="next" href="/CapLinked/Website/trac/ticket/154" title="Ticket #154" />
|
22
|
+
<link rel="start" href="/CapLinked/Website/trac/wiki" />
|
23
|
+
<link rel="stylesheet" href="/CapLinked/Website/trac/chrome/common/css/trac.css" type="text/css" /><link rel="stylesheet" href="/CapLinked/Website/trac/chrome/common/css/ticket.css" type="text/css" />
|
24
|
+
<link rel="first" href="/CapLinked/Website/trac/ticket/172" title="Ticket #172" />
|
25
|
+
<link rel="shortcut icon" href="/CapLinked/Website/trac/chrome/site/button_folder.jpg" type="image/jpeg" />
|
26
|
+
<link rel="icon" href="/CapLinked/Website/trac/chrome/site/button_folder.jpg" type="image/jpeg" />
|
27
|
+
<link type="application/opensearchdescription+xml" rel="search" href="/CapLinked/Website/trac/search/opensearch" title="Search CapLinked ProjectLocker" />
|
28
|
+
<script type="text/javascript" src="/CapLinked/Website/trac/chrome/common/js/jquery.js"></script><script type="text/javascript" src="/CapLinked/Website/trac/chrome/common/js/trac.js"></script><script type="text/javascript" src="/CapLinked/Website/trac/chrome/common/js/search.js"></script>
|
29
|
+
<!--[if lt IE 7]>
|
30
|
+
<script type="text/javascript" src="/CapLinked/Website/trac/chrome/common/js/ie_pre7_hacks.js"></script>
|
31
|
+
<![endif]-->
|
32
|
+
<script type="text/javascript" src="/CapLinked/Website/trac/chrome/common/js/wikitoolbar.js"></script><script type="text/javascript">
|
33
|
+
jQuery(document).ready(function($) {
|
34
|
+
$("div.description").find("h1,h2,h3,h4,h5,h6").addAnchor("Link to this section");
|
35
|
+
$("#changelog h3.change").addAnchor("Link to this change");
|
36
|
+
/* only enable control elements for the currently selected action */
|
37
|
+
var actions = $("#action input[name='action']");
|
38
|
+
function updateActionFields() {
|
39
|
+
actions.each(function () {
|
40
|
+
$(this).siblings().find("*[id]").enable($(this).checked());
|
41
|
+
$(this).siblings().filter("*[id]").enable($(this).checked());
|
42
|
+
});
|
43
|
+
}
|
44
|
+
actions.click(updateActionFields);
|
45
|
+
updateActionFields();
|
46
|
+
});
|
47
|
+
</script>
|
48
|
+
</head>
|
49
|
+
<body>
|
50
|
+
<div id="banner">
|
51
|
+
<div id="header">
|
52
|
+
<a id="logo" href="https://portal.projectlocker.com/user/home"><img src="/CapLinked/Website/trac/chrome/common/ProjectLocker_logo.gif" alt="ProjectLocker Logo" height="64" width="289" /></a>
|
53
|
+
</div>
|
54
|
+
<form id="search" action="/CapLinked/Website/trac/search" method="get">
|
55
|
+
<div>
|
56
|
+
<label for="proj-search">Search:</label>
|
57
|
+
<input type="text" id="proj-search" name="q" size="18" value="" />
|
58
|
+
<input type="submit" value="Search" />
|
59
|
+
</div>
|
60
|
+
</form>
|
61
|
+
<div id="metanav" class="nav">
|
62
|
+
<ul>
|
63
|
+
<li class="first">logged in as ron@hybridgroup.com</li><li><a href="/CapLinked/Website/trac/prefs">Preferences</a></li><li><a href="/CapLinked/Website/trac/wiki/TracGuide">Help/Guide</a></li><li><a href="/CapLinked/Website/trac/about">About Trac</a></li><li><a href="/CapLinked/Website/trac/rpc">RPC API</a></li><li class="last"><a href="/CapLinked/Website/trac/logout">Logout</a></li>
|
64
|
+
</ul>
|
65
|
+
</div>
|
66
|
+
</div>
|
67
|
+
<div id="mainnav" class="nav">
|
68
|
+
<ul>
|
69
|
+
<li class="first"><a href="/CapLinked/Website/trac/wiki">Wiki</a></li><li><a href="/CapLinked/Website/trac/timeline">Timeline</a></li><li><a href="/CapLinked/Website/trac/roadmap">Roadmap</a></li><li><a href="/CapLinked/Website/trac/browser">Browse Source</a></li><li class="active"><a href="/CapLinked/Website/trac/report">View Tickets</a></li><li><a href="/CapLinked/Website/trac/newticket">New Ticket</a></li><li><a href="/CapLinked/Website/trac/search">Search</a></li><li class="last"><a href="/CapLinked/Website/trac/admin" title="Administration">Admin</a></li>
|
70
|
+
</ul>
|
71
|
+
</div>
|
72
|
+
<div id="main">
|
73
|
+
<div id="ctxtnav" class="nav">
|
74
|
+
<h2>Context Navigation</h2>
|
75
|
+
<ul>
|
76
|
+
<li class="first"><span>← <a class="prev" href="/CapLinked/Website/trac/ticket/115" title="Ticket #115">Previous Ticket</a></span></li><li><a href="/CapLinked/Website/trac/report/6?USER=ron%40hybridgroup.com&page=1">Back to Query</a></li><li class="last"><span><a class="next" href="/CapLinked/Website/trac/ticket/154" title="Ticket #154">Next Ticket</a> →</span></li>
|
77
|
+
</ul>
|
78
|
+
<hr />
|
79
|
+
</div>
|
80
|
+
<div id="content" class="ticket">
|
81
|
+
<h1>
|
82
|
+
Ticket #142
|
83
|
+
<span class="status">(closed defect: fixed)</span>
|
84
|
+
</h1>
|
85
|
+
<!-- Do not show the ticket (pre)view when the user first comes to the "New Ticket" page.
|
86
|
+
Wait until they hit preview. -->
|
87
|
+
<!-- Ticket Box (ticket fields along with description) -->
|
88
|
+
<div id="ticket">
|
89
|
+
<div class="date">
|
90
|
+
<p>Opened <a class="timeline" href="/CapLinked/Website/trac/timeline?from=2010-09-24T19%3A49%3A29-0500&precision=second" title="2010-09-24T19:49:29-0500 in Timeline">7 months</a> ago</p>
|
91
|
+
<p>Last modified <a class="timeline" href="/CapLinked/Website/trac/timeline?from=2010-10-27T23%3A55%3A16-0500&precision=second" title="2010-10-27T23:55:16-0500 in Timeline">6 months</a> ago</p>
|
92
|
+
</div>
|
93
|
+
<!-- use a placeholder if it's a new ticket -->
|
94
|
+
<h2 class="summary searchable">Accredited investor reminder on forwarded deals</h2>
|
95
|
+
<table class="properties">
|
96
|
+
<tr>
|
97
|
+
<th id="h_reporter">Reported by:</th>
|
98
|
+
<td headers="h_reporter" class="searchable">eric@…</td>
|
99
|
+
<th id="h_owner">Owned by:</th>
|
100
|
+
<td headers="h_owner">george@…
|
101
|
+
</td>
|
102
|
+
</tr>
|
103
|
+
<tr>
|
104
|
+
<th id="h_priority">
|
105
|
+
Priority:
|
106
|
+
</th>
|
107
|
+
<td headers="h_priority">
|
108
|
+
High (urgent)
|
109
|
+
</td>
|
110
|
+
<th id="h_milestone">
|
111
|
+
Milestone:
|
112
|
+
</th>
|
113
|
+
<td headers="h_milestone">
|
114
|
+
<a class="milestone" href="/CapLinked/Website/trac/milestone/milestone4">milestone4</a>
|
115
|
+
</td>
|
116
|
+
</tr><tr>
|
117
|
+
<th id="h_component">
|
118
|
+
Component:
|
119
|
+
</th>
|
120
|
+
<td headers="h_component">
|
121
|
+
UI
|
122
|
+
</td>
|
123
|
+
<th id="h_keywords">
|
124
|
+
Keywords:
|
125
|
+
</th>
|
126
|
+
<td headers="h_keywords" class="searchable">
|
127
|
+
</td>
|
128
|
+
</tr><tr>
|
129
|
+
<th id="h_cc">
|
130
|
+
Cc:
|
131
|
+
</th>
|
132
|
+
<td headers="h_cc" class="searchable">
|
133
|
+
dave@…
|
134
|
+
</td>
|
135
|
+
<th>
|
136
|
+
</th>
|
137
|
+
<td>
|
138
|
+
</td>
|
139
|
+
</tr>
|
140
|
+
</table>
|
141
|
+
<div class="description">
|
142
|
+
<h3 id="comment:description">
|
143
|
+
Description
|
144
|
+
</h3>
|
145
|
+
<form id="addreply" method="get" action="#comment">
|
146
|
+
<div class="inlinebuttons">
|
147
|
+
<input type="hidden" name="replyto" value="description" />
|
148
|
+
<input type="submit" name="reply" value="Reply" title="Reply, quoting this description" />
|
149
|
+
</div>
|
150
|
+
</form>
|
151
|
+
<div class="searchable">
|
152
|
+
<p>
|
153
|
+
Upon further consideration and discussion with counsel, Chris and I concluded we ought to display the following message on a deal when it is sent to a recipient:<br />
|
154
|
+
</p>
|
155
|
+
<p>
|
156
|
+
"Remember that you may need to be an accredited investor (see the Disclaimer for a full description of this) in order to make an investent in this deal that complies with applicable securities laws. Please make sure that you understand whether or not you qualify as an accredited investor before considering this as an investment. Thank you."<br />
|
157
|
+
</p>
|
158
|
+
<p>
|
159
|
+
The message could be displayed as a modal window or as small text under the <a class="missing wiki" href="/CapLinked/Website/trac/wiki/Note/Things" rel="nofollow">Note/Things?</a>-to-Do section.<br />
|
160
|
+
</p>
|
161
|
+
|
162
|
+
</div>
|
163
|
+
</div>
|
164
|
+
</div>
|
165
|
+
<h2>Attachments</h2>
|
166
|
+
<div id="attachments">
|
167
|
+
<form method="get" action="/CapLinked/Website/trac/attachment/ticket/142/" id="attachfile">
|
168
|
+
<div>
|
169
|
+
<input type="hidden" name="action" value="new" />
|
170
|
+
<input type="submit" name="attachfilebutton" value="Attach file" />
|
171
|
+
</div>
|
172
|
+
</form>
|
173
|
+
</div>
|
174
|
+
<h2>Change History</h2>
|
175
|
+
<div id="changelog">
|
176
|
+
<form method="get" action="#comment" class="printableform">
|
177
|
+
<div class="change">
|
178
|
+
<h3 class="change" id="comment:1">
|
179
|
+
Changed <a class="timeline" href="/CapLinked/Website/trac/timeline?from=2010-09-25T18%3A13%3A35-0500&precision=second" title="2010-09-25T18:13:35-0500 in Timeline">7 months</a> ago by eric@…
|
180
|
+
</h3>
|
181
|
+
<div class="inlinebuttons">
|
182
|
+
<input type="hidden" name="replyto" value="1" />
|
183
|
+
<input type="submit" value="Reply" title="Reply to comment 1" />
|
184
|
+
</div>
|
185
|
+
<div class="comment searchable">
|
186
|
+
<p>
|
187
|
+
Revised text: "Remember that you may need to be an accredited investor (see the Disclaimer for a description of this term) in order to make an investent in this deal that complies with applicable securities laws. Please make sure that you understand who is eligible to invest in this deal before making any investment."<br />
|
188
|
+
</p>
|
189
|
+
|
190
|
+
</div>
|
191
|
+
</div>
|
192
|
+
</form><form method="get" action="#comment" class="printableform">
|
193
|
+
<div class="change">
|
194
|
+
<h3 class="change" id="comment:2">
|
195
|
+
Changed <a class="timeline" href="/CapLinked/Website/trac/timeline?from=2010-09-26T20%3A22%3A40-0500&precision=second" title="2010-09-26T20:22:40-0500 in Timeline">7 months</a> ago by eric@…
|
196
|
+
</h3>
|
197
|
+
<div class="inlinebuttons">
|
198
|
+
<input type="hidden" name="replyto" value="2" />
|
199
|
+
<input type="submit" value="Reply" title="Reply to comment 2" />
|
200
|
+
</div>
|
201
|
+
<ul class="changes">
|
202
|
+
<li>
|
203
|
+
<strong>priority</strong>
|
204
|
+
changed from <em>critical</em> to <em>blocker</em>
|
205
|
+
</li>
|
206
|
+
</ul>
|
207
|
+
<div class="comment searchable">
|
208
|
+
<p>
|
209
|
+
Note -- this one is a blocker for Deals launch tonight. Please add the revised text that was posted yesterday onto the Deal summary page under the "Things To Do" section.<br />
|
210
|
+
</p>
|
211
|
+
|
212
|
+
</div>
|
213
|
+
</div>
|
214
|
+
</form><form method="get" action="#comment" class="printableform">
|
215
|
+
<div class="change">
|
216
|
+
<h3 class="change" id="comment:3">
|
217
|
+
Changed <a class="timeline" href="/CapLinked/Website/trac/timeline?from=2010-10-03T14%3A47%3A30-0500&precision=second" title="2010-10-03T14:47:30-0500 in Timeline">6 months</a> ago by cg@…
|
218
|
+
</h3>
|
219
|
+
<div class="inlinebuttons">
|
220
|
+
<input type="hidden" name="replyto" value="3" />
|
221
|
+
<input type="submit" value="Reply" title="Reply to comment 3" />
|
222
|
+
</div>
|
223
|
+
<ul class="changes">
|
224
|
+
<li>
|
225
|
+
<strong>milestone</strong>
|
226
|
+
changed from <em>None</em> to <em>milestone4</em>
|
227
|
+
</li>
|
228
|
+
</ul>
|
229
|
+
<div class="comment searchable">
|
230
|
+
|
231
|
+
</div>
|
232
|
+
</div>
|
233
|
+
</form><form method="get" action="#comment" class="printableform">
|
234
|
+
<div class="change">
|
235
|
+
<h3 class="change" id="comment:4">
|
236
|
+
Changed <a class="timeline" href="/CapLinked/Website/trac/timeline?from=2010-10-27T23%3A55%3A16-0500&precision=second" title="2010-10-27T23:55:16-0500 in Timeline">6 months</a> ago by dave@…
|
237
|
+
</h3>
|
238
|
+
<div class="inlinebuttons">
|
239
|
+
<input type="hidden" name="replyto" value="4" />
|
240
|
+
<input type="submit" value="Reply" title="Reply to comment 4" />
|
241
|
+
</div>
|
242
|
+
<ul class="changes">
|
243
|
+
<li>
|
244
|
+
<strong>status</strong>
|
245
|
+
changed from <em>new</em> to <em>closed</em>
|
246
|
+
</li><li>
|
247
|
+
<strong>resolution</strong>
|
248
|
+
set to <em>fixed</em>
|
249
|
+
</li>
|
250
|
+
</ul>
|
251
|
+
<div class="comment searchable">
|
252
|
+
<p>
|
253
|
+
This functionality has been on the system since the release of Deals.<br />
|
254
|
+
</p>
|
255
|
+
|
256
|
+
</div>
|
257
|
+
</div>
|
258
|
+
</form>
|
259
|
+
</div>
|
260
|
+
<form action="/CapLinked/Website/trac/ticket/142" method="post" id="propertyform"><div><input type="hidden" name="__FORM_TOKEN" value="cb2a4cc2d44af8aa40b13882" /></div>
|
261
|
+
<h3><a id="edit" onfocus="$('#comment').get(0).focus()">
|
262
|
+
Add/Change #142 (Accredited investor reminder on forwarded deals)</a></h3>
|
263
|
+
<div class="field">
|
264
|
+
<fieldset class="iefix">
|
265
|
+
<label for="comment">Comment (you may use
|
266
|
+
<a tabindex="42" href="/CapLinked/Website/trac/wiki/WikiFormatting">WikiFormatting</a>
|
267
|
+
here):
|
268
|
+
</label><br />
|
269
|
+
<p><textarea id="comment" name="comment" class="wikitext" rows="10" cols="78">
|
270
|
+
</textarea></p>
|
271
|
+
</fieldset>
|
272
|
+
</div>
|
273
|
+
<fieldset id="properties">
|
274
|
+
<legend>
|
275
|
+
Change Properties
|
276
|
+
</legend>
|
277
|
+
<table>
|
278
|
+
<tr>
|
279
|
+
<th><label for="field-summary">Summary:</label></th>
|
280
|
+
<td class="fullrow" colspan="3">
|
281
|
+
<input type="text" id="field-summary" name="field_summary" value="Accredited investor reminder on forwarded deals" size="70" />
|
282
|
+
</td>
|
283
|
+
</tr>
|
284
|
+
<tr>
|
285
|
+
<th><label for="field-reporter">Reporter:</label></th>
|
286
|
+
<td class="fullrow" colspan="3">
|
287
|
+
<input type="text" id="field-reporter" name="field_reporter" value="eric@caplinked.com" size="70" />
|
288
|
+
</td>
|
289
|
+
</tr>
|
290
|
+
<tr>
|
291
|
+
<th><label for="field-description">Description:</label></th>
|
292
|
+
<td class="fullrow" colspan="3">
|
293
|
+
<textarea id="field-description" name="field_description" class="wikitext" rows="10" cols="68">
|
294
|
+
Upon further consideration and discussion with counsel, Chris and I concluded we ought to display the following message on a deal when it is sent to a recipient:
|
295
|
+
|
296
|
+
"Remember that you may need to be an accredited investor (see the Disclaimer for a full description of this) in order to make an investent in this deal that complies with applicable securities laws. Please make sure that you understand whether or not you qualify as an accredited investor before considering this as an investment. Thank you."
|
297
|
+
|
298
|
+
The message could be displayed as a modal window or as small text under the Note/Things-to-Do section.</textarea>
|
299
|
+
</td>
|
300
|
+
</tr>
|
301
|
+
<tr>
|
302
|
+
<th class="col1">
|
303
|
+
<label for="field-type">Type:</label>
|
304
|
+
</th>
|
305
|
+
<td class="col1">
|
306
|
+
<select id="field-type" name="field_type">
|
307
|
+
<option selected="selected">defect</option><option>enhancement</option><option>task</option>
|
308
|
+
</select>
|
309
|
+
</td>
|
310
|
+
<th class="col2">
|
311
|
+
<label for="field-priority">Priority:</label>
|
312
|
+
</th>
|
313
|
+
<td class="col2">
|
314
|
+
<select id="field-priority" name="field_priority">
|
315
|
+
<option selected="selected">High (urgent)</option><option>Medium-High</option><option>Medium (normal)</option><option>Medium-Low</option><option>Low (not time sensitive)</option>
|
316
|
+
</select>
|
317
|
+
</td>
|
318
|
+
</tr><tr>
|
319
|
+
<th class="col1">
|
320
|
+
<label for="field-milestone">Milestone:</label>
|
321
|
+
</th>
|
322
|
+
<td class="col1">
|
323
|
+
<select id="field-milestone" name="field_milestone">
|
324
|
+
<option></option>
|
325
|
+
<optgroup label="Open (no due date)">
|
326
|
+
<option>"ASAP" (only for bugs)</option><option>"At Bat" (current week)</option><option>"On Deck" (near term)</option><option>"Ongoing"</option><option>None</option><option>milestone1</option><option>milestone2</option><option>milestone3</option><option selected="selected">milestone4</option><option>milestone5</option>
|
327
|
+
</optgroup>
|
328
|
+
</select>
|
329
|
+
</td>
|
330
|
+
<th class="col2">
|
331
|
+
<label for="field-component">Component:</label>
|
332
|
+
</th>
|
333
|
+
<td class="col2">
|
334
|
+
<select id="field-component" name="field_component">
|
335
|
+
<option>Analytics</option><option>Backend</option><option>Frontend</option><option>SystemJobs</option><option selected="selected">UI</option>
|
336
|
+
</select>
|
337
|
+
</td>
|
338
|
+
</tr><tr>
|
339
|
+
<th class="col1">
|
340
|
+
<label for="field-keywords">Keywords:</label>
|
341
|
+
</th>
|
342
|
+
<td class="col1">
|
343
|
+
<input type="text" id="field-keywords" name="field_keywords" value="" />
|
344
|
+
</td>
|
345
|
+
<th class="col2">
|
346
|
+
<label for="field-cc">Cc:</label>
|
347
|
+
</th>
|
348
|
+
<td class="col2">
|
349
|
+
<span>
|
350
|
+
<input type="text" id="field-cc" title="Space or comma delimited email addresses and usernames are accepted." name="field_cc" value="dave@caplinked.com" />
|
351
|
+
</span>
|
352
|
+
</td>
|
353
|
+
</tr>
|
354
|
+
</table>
|
355
|
+
</fieldset>
|
356
|
+
<fieldset id="action">
|
357
|
+
<legend>Action</legend>
|
358
|
+
<div>
|
359
|
+
<input type="radio" id="action_leave" name="action" value="leave" checked="checked" />
|
360
|
+
<label for="action_leave">leave</label>
|
361
|
+
as closed
|
362
|
+
<span class="hint"></span>
|
363
|
+
</div><div>
|
364
|
+
<input type="radio" id="action_reopen" name="action" value="reopen" />
|
365
|
+
<label for="action_reopen">reopen</label>
|
366
|
+
<span class="hint">The resolution will be deleted. Next status will be 'reopened'</span>
|
367
|
+
</div>
|
368
|
+
</fieldset>
|
369
|
+
<div class="buttons">
|
370
|
+
<input type="hidden" name="ts" value="2010-10-28 04:55:16+00:00" />
|
371
|
+
<input type="hidden" name="replyto" />
|
372
|
+
<input type="hidden" name="cnum" value="5" />
|
373
|
+
<input type="submit" name="preview" value="Preview" />
|
374
|
+
<input type="submit" name="submit" value="Submit changes" />
|
375
|
+
</div>
|
376
|
+
</form>
|
377
|
+
<div id="help">
|
378
|
+
<strong>Note:</strong> See
|
379
|
+
<a href="/CapLinked/Website/trac/wiki/TracTickets">TracTickets</a> for help on using
|
380
|
+
tickets.
|
381
|
+
</div>
|
382
|
+
</div>
|
383
|
+
<div id="altlinks">
|
384
|
+
<h3>Download in other formats:</h3>
|
385
|
+
<ul>
|
386
|
+
<li class="first">
|
387
|
+
<a rel="nofollow" href="/CapLinked/Website/trac/ticket/142?format=csv" class="csv">Comma-delimited Text</a>
|
388
|
+
</li><li>
|
389
|
+
<a rel="nofollow" href="/CapLinked/Website/trac/ticket/142?format=tab" class="tab">Tab-delimited Text</a>
|
390
|
+
</li><li class="last">
|
391
|
+
<a rel="nofollow" href="/CapLinked/Website/trac/ticket/142?format=rss" class="rss">RSS Feed</a>
|
392
|
+
</li>
|
393
|
+
</ul>
|
394
|
+
</div>
|
395
|
+
</div>
|
396
|
+
<div id="footer" lang="en" xml:lang="en"><hr />
|
397
|
+
<a id="tracpowered" href="http://trac.edgewall.org/"><img src="/CapLinked/Website/trac/chrome/common/trac_logo_mini.png" height="30" width="107" alt="Trac Powered" /></a>
|
398
|
+
<p class="left">
|
399
|
+
Powered by <a href="/CapLinked/Website/trac/about"><strong>Trac 0.11.7</strong></a><br />
|
400
|
+
By <a href="http://www.edgewall.org/">Edgewall Software</a>.
|
401
|
+
</p>
|
402
|
+
<p class="right"><a href="http://portal.projectlocker.com/user/home">Back to My ProjectLocker</a></p>
|
403
|
+
</div>
|
404
|
+
</body>
|
405
|
+
</html>
|