4 add_topic.pl adds posts to topics or comments to webpages.
8 This script handles the addition, removal, and editing of topic entries to the SOL forum. Users need to be logged in to use it, otherwise they are re-directed to the login page.
10 The topic information is stored in the relevant tables in the sgn_people schema of the cxgn database. The back-store functionality is wrapped by the CXGN::People::Forum classes, o which this code depends.
14 The following html parameters are supported:
20 one of: edit, delete, review, save, add.
22 =item topic_description
24 A string with a short description of what the topic is supposed to be about and what it is not about.
32 Lukas Mueller (lam87@cornell.edu)
39 use CXGN
::DB
::Connection
;
44 use CXGN
::People
::Forum
;
46 use CXGN
::Page
::FormattingHelpers qw
/ page_title_html
49 my $dbh = CXGN
::DB
::Connection
->new();
50 my $page = CXGN
::Page
->new( "SGN Forum | Configure topic", "Lukas" );
52 my $sp_person_id = CXGN
::Login
->new($dbh)->verify_session();
54 my ( $subject, $topic_description, $action, $topic_id, $sort_order ) =
55 $page->get_encoded_arguments( "subject", "topic_description", "action",
56 "topic_id", "sort_order" );
58 # we define 3 actions:
62 # all other values for the action parameter will show the input as default.
65 # get information about the user
67 my $user = CXGN
::People
::Person
->new( $dbh, $sp_person_id );
68 my $name = $user->get_first_name() . " " . $user->get_last_name();
69 my $user_id = $user->get_sp_person_id();
71 my $topic = CXGN
::People
::Forum
::Topic
->new( $dbh, $topic_id );
73 # check if the user has the necessary privileges to work with this
74 # topic. if there it is a topic to be entered, forgo the check.
76 if ( ( $topic->get_person_id() && ( $topic->get_person_id() ne $user_id ) )
77 && ( $user->get_user_type() ne "curator" ) )
80 "Error:\nYou don't have the privileges to edit this topic, because you did not create it.\n\n\n"
84 if ( $action eq "edit" ) {
85 if ($topic_description) {
86 $topic->set_topic_description($topic_description);
88 if ($subject) { $topic->set_topic_name($subject); }
89 if ($sort_order) { $topic->set_topic_sort_order($sort_order); }
90 show_form
( $dbh, $topic, "review", $user, $page );
92 elsif ( $action eq "delete" ) {
93 delete_topic
($topic, $page);
95 elsif ( $action eq "confirm_delete" ) {
96 confirm_delete_topic
($topic, $page);
98 elsif ( $action eq "review" ) {
99 $topic->set_topic_description($topic_description);
100 $topic->set_topic_name($subject);
101 $topic->set_topic_sort_order($sort_order);
102 review_topic
($topic, $page);
104 elsif ( $action eq "save" ) {
105 if ($topic_description) {
106 $topic->set_topic_description($topic_description);
109 $topic->set_topic_name($subject);
112 $topic->set_topic_sort_order($sort_order);
114 save_topic
( $topic, $user, $page );
119 # the action is "new" or anything else.
121 show_form
( $dbh, $topic, "review", $user, $page );
125 my ($topic,$user,$page) = @_;
127 # don't clobber the old person id if this is an edit.
129 if ( !$topic->get_person_id() ) {
130 $topic->set_person_id( $user->get_sp_person_id() );
133 # store the topic -- performs an update if topic_id
134 # already exists, other new insert...
140 print page_title_html
("Store your topic");
144 Steps: Configure topic</b> -\> Review topic -\> <b>Store topic</b><br /><br />
146 <b>The topic has been successfully stored.</b>
148 <a href="topics.pl">Return to topics.</a>
157 my ($topic,$page) = @_;
158 my $topic_id = $topic->get_forum_topic_id();
159 my $topic_name = $topic->get_topic_name();
160 my $topic_post_count = $topic->get_post_count();
161 my $topic_desc = $topic->get_topic_description();
165 print page_title_html
("Delete your topic");
168 <div class="container-fluid">
169 <b>SGN Forum:</b> Delete the following topic, including <b>$topic_post_count</b> posts?</b><br /><br />\n
171 <div class="panel panel-default"><div class="panel-body">
172 <b>$topic_name</b><br /><br />
179 <tr><td align="left"><a href="topics.pl">Cancel</a>
180 </td><td align="right">
181 <form action="add_topic.pl?action=confirm_delete&topic_id=$topic_id">
183 <input type="hidden" name="action" value="confirm_delete" />
184 <input type="hidden" name="topic_id" value="$topic_id" />
185 <input class="btn btn-primary"type="submit" value="delete topic" />\n
196 sub confirm_delete_topic
{
197 my ($topic,$page) = @_;
199 my $topic_name = $topic->get_topic_name();
200 my $delete_count = ( $topic->delete() - 1 );
204 print page_title_html
("Topic deleted");
207 <b>SOL Forum</b>: Topic deleted.<br /><br />
208 The topic $topic_name and $delete_count associated posts, have been successfully deleted.<br />\n
209 <a href="topics.pl">back to topics</a>\n
218 my ($topic,$page) = @_;
220 my $topic_name = $topic->get_topic_name();
221 my $topic_desc = $topic->get_topic_description();
222 my $topic_id = $topic->get_forum_topic_id();
223 my $sort_order = $topic->get_topic_sort_order();
225 my $display_topic_desc = $topic->format_post_text($topic_desc);
227 my $sort_order_message = "";
228 if ( $sort_order =~ /asc/i ) {
229 $sort_order_message = "Latest post shown at the bottom.";
231 elsif ( $sort_order =~ /desc/i ) {
232 $sort_order_message = "Latest post shown at the top.";
237 print page_title_html
("Review your topic");
240 <div class="container-fluid">
241 Steps: Configure topic -\> <b>Review topic</b> -\> Store topic<br /><br />
242 Please verify the following topic submission: <br /><br />
244 <div class="panel panel-primary"><div class="panel-body">
245 <b>Topic name</b>: $topic_name<br /><br />
246 <b>Topic Description</b>:<br />$display_topic_desc<br /><br />\n
247 <b>Other configurations</b>: $sort_order_message<br /><br />\n
251 <table width="100%"><tr><td align="left">
252 <form action="add_topic.pl">
253 <input type="hidden" name="action" value="edit" />
254 <input type="hidden" name="topic_id" value="$topic_id" />
255 <input type="hidden" name="subject" value="$topic_name" />
256 <input type="hidden" name="topic_description" value="$topic_desc" />
257 <input type="hidden" name="sort_order" value="$sort_order" />
258 <input class="btn btn-info" type="submit" value="Edit Topic" />
261 </td><td align="center">
262 <a href="topics.pl">Back to topics</a>
263 </td><td align="right">
265 <form action="add_topic.pl">
266 <input type="hidden" name="action" value="save" />
267 <input type="hidden" name="topic_id" value="$topic_id" />
268 <input type="hidden" name="subject" value="$topic_name" />
269 <input type="hidden" name="topic_description" value="$topic_desc" />
270 <input class="btn btn-primary" type="submit" value="store topic" />
282 my ($dbh, $topic, $action, $user, $page) = @_;
284 my $subject = $topic->get_topic_name();
285 if ( !$subject ) { $subject = "new topic"; }
286 my $topic_description = $topic->get_topic_description();
287 my $topic_id = $topic->get_forum_topic_id();
289 CXGN
::People
::Person
->new( $dbh, $topic->get_person_id() );
290 my $topic_creator_name =
291 $topic_creator->get_first_name() . " " . $topic_creator->get_last_name();
293 if ( !$topic_creator->get_sp_person_id() ) {
294 $topic_creator_name =
295 $user->get_first_name() . " " . $user->get_last_name();
297 $page->header( "SGN | New topic",
298 "SGN Forum: Configure topic \"" . $subject . "\"" );
300 if ( !$action ) { $action = "review"; }
302 # print page_title_html("SGN Forum: Enter new topic");
306 <form method="post" action="add_topic.pl">
308 Steps: <b>Configure topic</b> -> Review topic -> Store topic<br /><br />
309 The owner of this topic is: <b>$topic_creator_name</b>.
310 The owner can edit and delete the topic at any time when logged in.<br />
311 HTML tags are
not supported
. You can add links to your post by using square brackets as follows
:<br
/>
312 [url
]sgn
.cornell
.edu
[/url
].
313 This will appear as
<a href
="http://sgn.cornell.edu">sgn
.cornell
.edu
</a> in the post.<br /><br
/>
314 <b
>Note
:</b
> this service is provided as a courtesy
. SGN reserves the right to
delete topics
and posts at any
time for any reason
.
316 <input type
="hidden" name
="action" value
="$action" />
317 <input type
="hidden" name
="topic_id" value
="$topic_id" />
318 Topic
sort order
: <br
/>
319 <input type
="radio" name
="sort_order" value
="asc" />Latest entry at the top<br />
320 <input type
="radio" name
="sort_order" value
="desc" checked
="1" />Latest entry at the bottom<br />
322 Topic subject
: <input
class="form-control" name
="subject" value
="$subject"><br
/><br />
324 <textarea
class="form-control" rows
="5" cols
="80" name
="topic_description">$topic_description</textarea
>
327 <table width
="100%" summary
="">
328 <tr
><td
><a href
="topics.pl">Back to forum
</a></td
>
329 <td align
="right"><input
class="btn btn-primary" type
=submit value
="Review topic" /></td
>