Passed
Push — 1.10.x ( 64f6cc...c002d1 )
by
unknown
52:14
created

Blog::delete_assigned_task()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 9

Duplication

Lines 14
Ratio 100 %
Metric Value
dl 14
loc 14
rs 9.4285
cc 1
eloc 9
nc 1
nop 3
1
<?php
2
/* For licensing terms, see /license.txt */
3
4
/**
5
 * Class Blog
6
 *
7
 * Contains several functions dealing with displaying,
8
 * editing,... of a blog
9
10
 * @package chamilo.blogs
11
 * @author Toon Keppens <[email protected]>
12
 * @author Julio Montoya - Cleaning code
13
 */
14
class Blog
15
{
16
	/**
17
	 * Get the title of a blog
18
	 * @author Toon Keppens
19
	 *
20
	 * @param int $blog_id
21
	 *
22
	 * @return String Blog Title
23
	 */
24 View Code Duplication
	public static function get_blog_title ($blog_id)
25
	{
26
	    $course_id = api_get_course_int_id();
27
28
		if (is_numeric($blog_id)) {
29
			$tbl_blogs = Database::get_course_table(TABLE_BLOGS);
30
31
			$sql = "SELECT blog_name
32
					FROM " . $tbl_blogs . "
33
					WHERE c_id = $course_id AND blog_id = " . intval($blog_id);
34
35
			$result = Database::query($sql);
36
			$blog = Database::fetch_array($result);
37
38
			return stripslashes($blog['blog_name']);
39
		}
40
	}
41
42
43
	/**
44
	 * Get the description of a blog
45
	 * @author Toon Keppens
46
	 *
47
	 * @param Integer $blog_id
48
	 *
49
	 * @return String Blog description
50
	 */
51 View Code Duplication
	public static function get_blog_subtitle($blog_id)
52
	{
53
		$tbl_blogs = Database::get_course_table(TABLE_BLOGS);
54
	  	$course_id = api_get_course_int_id();
55
		$sql = "SELECT blog_subtitle FROM $tbl_blogs
56
				WHERE c_id = $course_id AND blog_id ='".intval($blog_id)."'";
57
		$result = Database::query($sql);
58
		$blog = Database::fetch_array($result);
59
60
		return stripslashes($blog['blog_subtitle']);
61
	}
62
63
	/**
64
	 * Get the users of a blog
65
	 * @author Toon Keppens
66
	 *
67
	 * @param Integer $blog_id
68
	 *
69
	 * @return Array Returns an array with [userid]=>[username]
70
	 */
71
	public static function get_blog_users($blog_id)
72
	{
73
		// Database table definitions
74
		$tbl_users = Database::get_main_table(TABLE_MAIN_USER);
75
		$tbl_blogs_rel_user = Database::get_course_table(TABLE_BLOGS_REL_USER);
76
77
		$course_id = api_get_course_int_id();
78
79
		// Get blog members
80
		$sql = "SELECT user.user_id, user.firstname, user.lastname
81
				FROM " . $tbl_blogs_rel_user . " blogs_rel_user
82
				INNER JOIN " . $tbl_users . " user
83
				ON blogs_rel_user.user_id = user.user_id
84
				WHERE
85
				    blogs_rel_user.c_id = $course_id AND
86
					blogs_rel_user.blog_id = '" . (int)$blog_id."'";
87
		$result = Database::query($sql);
88
		$blog_members = array ();
89 View Code Duplication
		while($user = Database::fetch_array($result)) {
90
			$blog_members[$user['user_id']] = api_get_person_name($user['firstname'], $user['lastname']);
91
		}
92
93
		return $blog_members;
94
	}
95
96
	/**
97
	 * Creates a new blog in the given course
98
	 * @author Toon Keppens
99
	 * @param int $course_id Id
0 ignored issues
show
Bug introduced by
There is no parameter named $course_id. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
100
	 * @param string $title
101
	 * @param Text $description
0 ignored issues
show
Bug introduced by
There is no parameter named $description. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
102
	 */
103
	public static function create_blog($title, $subtitle)
104
	{
105
		$_user = api_get_user_info();
106
        $course_id = api_get_course_int_id();
107
108
		$current_date=date('Y-m-d H:i:s',time());
109
		$session_id = api_get_session_id();
110
		// Tabel definitions
111
        $tbl_blogs = Database::get_course_table(TABLE_BLOGS);
112
        $tbl_tool = Database::get_course_table(TABLE_TOOL_LIST);
113
        $tbl_blogs_posts = Database::get_course_table(TABLE_BLOGS_POSTS);
114
115
		//verified if exist blog
116
		$sql = 'SELECT COUNT(*) as count FROM '.$tbl_blogs.'
117
			  	WHERE
118
			  	    c_id = '.$course_id.' AND
119
			  	    blog_name="'.Database::escape_string($title).'" AND
120
			  	    blog_subtitle="'.Database::escape_string($subtitle).'"';
121
        $res = Database::query($sql);
122
        $info_count = Database::result($res, 0, 0);
123
124
        if ($info_count == 0) {
125
			// Create the blog
126
            $params = [
127
				'blog_id' => 0,
128
                'c_id' => $course_id,
129
                'blog_name' => $title,
130
                'blog_subtitle' =>  $subtitle,
131
                'date_creation' => $current_date,
132
                'visibility' => 1 ,
133
                'session_id' => $session_id,
134
            ];
135
			$this_blog_id = Database::insert($tbl_blogs, $params);
136
137 View Code Duplication
			if ($this_blog_id > 0) {
138
139
                $sql = "UPDATE $tbl_blogs SET blog_id = iid WHERE iid = $this_blog_id";
140
                Database::query($sql);
141
142
				// insert into item_property
143
                api_item_property_update(
144
                    api_get_course_info(),
145
                    TOOL_BLOGS,
146
                    $this_blog_id,
147
                    'BlogAdded',
148
                    api_get_user_id()
149
                );
150
			}
151
152
			// Make first post. :)
153
154
            $params = [
155
				'post_id' => 0,
156
                'c_id' => $course_id,
157
                'title' => get_lang("Welcome"),
158
                'full_text' => get_lang('FirstPostText'),
159
                'date_creation' => $current_date,
160
                'blog_id' => $this_blog_id,
161
                'author_id' => $_user['user_id'],
162
            ];
163
            $postId = Database::insert($tbl_blogs_posts, $params);
164
            if ($postId) {
165
                $sql = "UPDATE $tbl_blogs_posts SET post_id = iid WHERE iid = $postId";
166
                Database::query($sql);
167
            }
168
169
			// Put it on course homepage
170
			$sql = "INSERT INTO $tbl_tool (c_id, name, link, image, visibility, admin, address, added_tool, session_id)
171
					VALUES ($course_id, '".Database::escape_string($title)."','blog/blog.php?blog_id=".(int)$this_blog_id."','blog.gif','1','0','pastillegris.gif',0,'$session_id')";
172
			Database::query($sql);
173
174
            $toolId = Database::insert_id();
175
            if ($toolId) {
176
                $sql = "UPDATE $tbl_tool SET id = iid WHERE iid = $toolId";
177
                Database::query($sql);
178
            }
179
180
			// Subscribe the teacher to this blog
181
			Blog::set_user_subscribed($this_blog_id, $_user['user_id']);
182
		}
183
	}
184
185
	/**
186
	 * Update title and subtitle of a blog in the given course
187
	 * @author Toon Keppens
188
	 * @param int $course_id Id
0 ignored issues
show
Bug introduced by
There is no parameter named $course_id. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
189
	 * @param string $title
190
	 * @param string $description
0 ignored issues
show
Bug introduced by
There is no parameter named $description. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
191
	 */
192
	public static function edit_blog($blog_id, $title, $subtitle)
193
	{
194
		// Table definitions
195
		$tbl_blogs = Database::get_course_table(TABLE_BLOGS);
196
		$tbl_tool = Database::get_course_table(TABLE_TOOL_LIST);
197
198
        $course_id = api_get_course_int_id();
199
200
		// Update the blog
201
		$sql = "UPDATE $tbl_blogs SET
202
		        blog_name = '".Database::escape_string($title)."',
203
		        blog_subtitle = '".Database::escape_string($subtitle)."'
204
		        WHERE
205
		            c_id = $course_id AND
206
		            blog_id ='".Database::escape_string((int)$blog_id)."'
207
                LIMIT 1";
208
		Database::query($sql);
209
210
		//update item_property (update)
211
        api_item_property_update(
212
            api_get_course_info(),
213
            TOOL_BLOGS,
214
            intval($blog_id),
215
            'BlogUpdated',
216
            api_get_user_id()
217
        );
218
219
		// Update course homepage link
220
		$sql = "UPDATE $tbl_tool SET
221
		        name = '".Database::escape_string($title)."'
222
		        WHERE c_id = $course_id AND link = 'blog/blog.php?blog_id=".(int)$blog_id."' LIMIT 1";
223
		Database::query($sql);
224
	}
225
226
	/**
227
	 * Deletes a blog and it's posts from the course database
228
	 * @author Toon Keppens
229
	 * @param Integer $blog_id
230
	 */
231
	public static function delete_blog($blog_id)
232
	{
233
		// Init
234
        $tbl_blogs = Database::get_course_table(TABLE_BLOGS);
235
        $tbl_blogs_posts = Database::get_course_table(TABLE_BLOGS_POSTS);
236
        $tbl_blogs_comment = Database::get_course_table(TABLE_BLOGS_COMMENTS);
237
        $tbl_blogs_tasks = Database::get_course_table(TABLE_BLOGS_TASKS);
238
        $tbl_tool = Database::get_course_table(TABLE_TOOL_LIST);
239
        $tbl_blogs_rating = Database::get_course_table(TABLE_BLOGS_RATING);
240
241
        $course_id = api_get_course_int_id();
242
        $blog_id = intval($blog_id);
243
244
		// Delete posts from DB and the attachments
245
		delete_all_blog_attachment($blog_id);
246
247
		//Delete comments
248
		$sql = "DELETE FROM $tbl_blogs_comment WHERE c_id = $course_id AND blog_id ='".$blog_id."'";
249
   		Database::query($sql);
250
251
		// Delete posts
252
   		$sql = "DELETE FROM $tbl_blogs_posts WHERE c_id = $course_id AND blog_id ='".$blog_id."'";
253
   		Database::query($sql);
254
255
		// Delete tasks
256
		$sql = "DELETE FROM $tbl_blogs_tasks WHERE c_id = $course_id AND blog_id ='".$blog_id."'";
257
		Database::query($sql);
258
259
		// Delete ratings
260
		$sql = "DELETE FROM $tbl_blogs_rating WHERE c_id = $course_id AND blog_id ='".$blog_id."'";
261
		Database::query($sql);
262
263
		// Delete blog
264
		$sql ="DELETE FROM $tbl_blogs WHERE c_id = $course_id AND blog_id ='".$blog_id."'";
265
		Database::query($sql);
266
267
		// Delete from course homepage
268
		$sql = "DELETE FROM $tbl_tool WHERE c_id = $course_id AND link = 'blog/blog.php?blog_id=".$blog_id."'";
269
		Database::query($sql);
270
271
		//update item_property (delete)
272
        api_item_property_update(
273
            api_get_course_info(),
274
            TOOL_BLOGS,
275
            $blog_id,
276
            'delete',
277
            api_get_user_id()
278
        );
279
	}
280
281
	/**
282
	 * Creates a new post in a given blog
283
	 * @author Toon Keppens
284
	 * @param String $title
285
	 * @param String $full_text
286
	 * @param Integer $blog_id
287
	 */
288
	public static function create_post($title, $full_text, $file_comment, $blog_id)
289
	{
290
		$_user = api_get_user_info();
291
		$_course = api_get_course_info();
292
		$course_id = $_course['real_id'];
293
294
		$blog_table_attachment = Database::get_course_table(TABLE_BLOGS_ATTACHMENT);
295
		$upload_ok=true;
296
		$has_attachment=false;
297
		$current_date = api_get_utc_datetime();
298
299 View Code Duplication
		if (!empty($_FILES['user_upload']['name'])) {
300
			$upload_ok = process_uploaded_file($_FILES['user_upload']);
301
			$has_attachment=true;
302
		}
303
304
		if ($upload_ok) {
305
			// Table Definitions
306
			$tbl_blogs_posts = Database::get_course_table(TABLE_BLOGS_POSTS);
307
308
			// Create the post
309
			$sql = "INSERT INTO $tbl_blogs_posts (c_id, title, full_text, date_creation, blog_id, author_id )
310
					VALUES ($course_id, '".Database::escape_string($title)."', '".Database::escape_string($full_text)."','".$current_date."', '".(int)$blog_id."', '".(int)$_user['user_id']."');";
311
312
			Database::query($sql);
313
			$last_post_id = Database::insert_id();
314
315
            if ($last_post_id) {
316
                $sql = "UPDATE $tbl_blogs_posts SET post_id = iid WHERE iid = $last_post_id";
317
                Database::query($sql);
318
            }
319
320 View Code Duplication
			if ($has_attachment) {
321
				$courseDir   = $_course['path'].'/upload/blog';
322
				$sys_course_path = api_get_path(SYS_COURSE_PATH);
323
				$updir = $sys_course_path.$courseDir;
324
325
				// Try to add an extension to the file if it hasn't one
326
				$new_file_name = add_ext_on_mime(stripslashes($_FILES['user_upload']['name']), $_FILES['user_upload']['type']);
327
328
				// user's file name
329
				$file_name = $_FILES['user_upload']['name'];
330
331
				if (!filter_extension($new_file_name)) {
332
					Display :: display_error_message(get_lang('UplUnableToSaveFileFilteredExtension'));
333
				} else {
334
					$new_file_name = uniqid('');
335
					$new_path = $updir.'/'.$new_file_name;
336
					$result = @move_uploaded_file($_FILES['user_upload']['tmp_name'], $new_path);
337
					$comment = Database::escape_string($file_comment);
338
339
					// Storing the attachments if any
340
					if ($result) {
341
						$sql = 'INSERT INTO '.$blog_table_attachment.'(c_id, filename,comment, path, post_id,size, blog_id,comment_id) '.
342
							   "VALUES ($course_id, '".Database::escape_string($file_name)."', '".$comment."', '".Database::escape_string($new_file_name)."' , '".$last_post_id."', '".intval($_FILES['user_upload']['size'])."',  '".$blog_id."', '0' )";
343
						Database::query($sql);
344
                        $id = Database::insert_id();
345
                        if ($id) {
346
                            $sql = "UPDATE $blog_table_attachment SET id = iid WHERE iid = $id";
347
                            Database::query($sql);
348
                        }
349
					}
350
				}
351
			}
352
		} else {
353
			Display::display_error_message(get_lang('UplNoFileUploaded'));
354
		}
355
	}
356
357
	/**
358
	 * Edits a post in a given blog
359
	 * @author Toon Keppens
360
	 * @param Integer $blog_id
361
	 * @param String $title
362
	 * @param String $full_text
363
	 * @param Integer $blog_id
364
	 */
365 View Code Duplication
	public static function edit_post($post_id, $title, $full_text, $blog_id)
366
	{
367
		$tbl_blogs_posts = Database::get_course_table(TABLE_BLOGS_POSTS);
368
        $course_id = api_get_course_int_id();
369
370
		// Create the post
371
		$sql = "UPDATE $tbl_blogs_posts SET
372
		        title = '" . Database::escape_string($title)."',
373
		        full_text = '" . Database::escape_string($full_text)."'
374
		        WHERE c_id = $course_id AND post_id ='".(int)$post_id."' AND blog_id ='".(int)$blog_id."'
375
		        LIMIT 1 ";
376
		Database::query($sql);
377
	}
378
379
	/**
380
	 * Deletes an article and it's comments
381
	 * @author Toon Keppens
382
	 * @param int $blog_id
383
	 * @param int $post_id
384
	 */
385
	public static function delete_post($blog_id, $post_id)
386
	{
387
		$tbl_blogs_posts = Database::get_course_table(TABLE_BLOGS_POSTS);
388
		$tbl_blogs_comments = Database::get_course_table(TABLE_BLOGS_COMMENTS);
389
		$tbl_blogs_rating = Database::get_course_table(TABLE_BLOGS_RATING);
390
391
        $course_id = api_get_course_int_id();
392
393
		// Delete ratings on this comment
394
		$sql = "DELETE FROM $tbl_blogs_rating
395
				WHERE c_id = $course_id AND blog_id = '".(int)$blog_id."' AND item_id = '".(int)$post_id."' AND rating_type = 'post'";
396
		Database::query($sql);
397
398
		// Delete the post
399
		$sql = "DELETE FROM $tbl_blogs_posts
400
				WHERE c_id = $course_id AND post_id = '".(int)$post_id."'";
401
		Database::query($sql);
402
403
		// Delete the comments
404
		$sql = "DELETE FROM $tbl_blogs_comments
405
				WHERE c_id = $course_id AND post_id = '".(int)$post_id."' AND blog_id = '".(int)$blog_id."'";
406
		Database::query($sql);
407
408
		// Delete posts and attachments
409
		delete_all_blog_attachment($blog_id,$post_id);
410
	}
411
412
	/**
413
	 * Creates a comment on a post in a given blog
414
	 * @author Toon Keppens
415
	 * @param String $title
416
	 * @param String $full_text
417
	 * @param Integer $blog_id
418
	 * @param Integer $post_id
419
	 * @param Integer $parent_id
420
	 */
421
	public static function create_comment($title, $full_text, $file_comment, $blog_id, $post_id, $parent_id, $task_id = 'NULL')
422
	{
423
		$_user = api_get_user_info();
424
		$_course = api_get_course_info();
425
        $blog_table_attachment 	= Database::get_course_table(TABLE_BLOGS_ATTACHMENT);
426
427
        $upload_ok = true;
428
        $has_attachment = false;
429
        $current_date = api_get_utc_datetime();
430
        $course_id = api_get_course_int_id();
431
432 View Code Duplication
		if (!empty($_FILES['user_upload']['name'])) {
433
			$upload_ok = process_uploaded_file($_FILES['user_upload']);
434
			$has_attachment=true;
435
		}
436
437
		if ($upload_ok) {
438
			// Table Definition
439
			$tbl_blogs_comments = Database::get_course_table(TABLE_BLOGS_COMMENTS);
440
441
			// Create the comment
442
			$sql = "INSERT INTO $tbl_blogs_comments (c_id, title, comment, author_id, date_creation, blog_id, post_id, parent_comment_id, task_id )
443
					VALUES ($course_id, '".Database::escape_string($title)."', '".Database::escape_string($full_text)."', '".(int)$_user['user_id']."','".$current_date."', '".(int)$blog_id."', '".(int)$post_id."', '".(int)$parent_id."', '".(int)$task_id."')";
444
			Database::query($sql);
445
446
			// Empty post values, or they are shown on the page again
447
			$last_id = Database::insert_id();
448
449
            if ($last_id) {
450
                $sql = "UPDATE $tbl_blogs_comments SET comment_id = iid WHERE iid = $last_id";
451
                Database::query($sql);
452
            }
453
454 View Code Duplication
			if ($has_attachment) {
455
				$courseDir   = $_course['path'].'/upload/blog';
456
				$sys_course_path = api_get_path(SYS_COURSE_PATH);
457
				$updir = $sys_course_path.$courseDir;
458
459
				// Try to add an extension to the file if it hasn't one
460
				$new_file_name = add_ext_on_mime(
461
					stripslashes($_FILES['user_upload']['name']),
462
					$_FILES['user_upload']['type']
463
				);
464
465
				// user's file name
466
				$file_name =$_FILES['user_upload']['name'];
467
468
				if (!filter_extension($new_file_name)) {
469
					Display :: display_error_message(get_lang('UplUnableToSaveFileFilteredExtension'));
470
				} else {
471
					$new_file_name = uniqid('');
472
					$new_path=$updir.'/'.$new_file_name;
473
					$result= @move_uploaded_file($_FILES['user_upload']['tmp_name'], $new_path);
474
					$comment = Database::escape_string($file_comment);
475
476
					// Storing the attachments if any
477
					if ($result) {
478
						$sql='INSERT INTO '.$blog_table_attachment.'(c_id, filename,comment, path, post_id,size,blog_id,comment_id) '.
479
							 "VALUES ($course_id, '".Database::escape_string($file_name)."', '".$comment."', '".Database::escape_string($new_file_name)."' , '".$post_id."', '".$_FILES['user_upload']['size']."',  '".$blog_id."', '".$last_id."'  )";
480
						Database::query($sql);
481
482
                        $id = Database::insert_id();
483
484
                        if ($id) {
485
                            $sql = "UPDATE $blog_table_attachment SET id = iid WHERE iid = $id";
486
                            Database::query($sql);
487
                        }
488
					}
489
				}
490
			}
491
		}
492
	}
493
494
	/**
495
	 * Deletes a comment from a blogpost
496
	 * @author Toon Keppens
497
	 * @param int $blog_id
498
	 * @param int $comment_id
499
	 */
500
	public static function delete_comment($blog_id, $post_id, $comment_id)
501
	{
502
		$tbl_blogs_comments = Database::get_course_table(TABLE_BLOGS_COMMENTS);
503
		$tbl_blogs_rating = Database::get_course_table(TABLE_BLOGS_RATING);
504
		$blog_id = intval($blog_id);
505
		$post_id = intval($post_id);
506
		$comment_id = intval($comment_id);
507
        $course_id = api_get_course_int_id();
508
509
		delete_all_blog_attachment($blog_id, $post_id, $comment_id);
510
511
		// Delete ratings on this comment
512
		$sql = "DELETE FROM $tbl_blogs_rating
513
				WHERE
514
				    c_id = $course_id AND
515
				    blog_id = '".$blog_id."' AND
516
				    item_id = '".$comment_id."' AND
517
				    rating_type = 'comment'";
518
		Database::query($sql);
519
520
		// select comments that have the selected comment as their parent
521
		$sql = "SELECT comment_id FROM $tbl_blogs_comments
522
				WHERE c_id = $course_id AND parent_comment_id = '".$comment_id."'";
523
		$result = Database::query($sql);
524
525
		// Delete them recursively
526
		while ($comment = Database::fetch_array($result)) {
527
			Blog::delete_comment($blog_id,$post_id,$comment['comment_id']);
528
		}
529
530
		// Finally, delete the selected comment to
531
		$sql = "DELETE FROM $tbl_blogs_comments
532
				WHERE c_id = $course_id AND comment_id = '".$comment_id."'";
533
		Database::query($sql);
534
	}
535
536
	/**
537
	 * Creates a new task in a blog
538
	 * @author Toon Keppens
539
	 * @param Integer $blog_id
540
	 * @param String $title
541
	 * @param String $description
542
	 * @param String $color
543
	 */
544
	public static function create_task($blog_id, $title, $description, $articleDelete, $articleEdit, $commentsDelete, $color)
545
	{
546
		$tbl_blogs_tasks = Database::get_course_table(TABLE_BLOGS_TASKS);
547
		$tbl_tasks_permissions = Database::get_course_table(TABLE_BLOGS_TASKS_PERMISSIONS);
548
549
		$course_id = api_get_course_int_id();
550
551
		// Create the task
552
		$sql = "INSERT INTO $tbl_blogs_tasks (c_id, blog_id, title, description, color, system_task)
553
				VALUES ($course_id , '".(int)$blog_id."', '" . Database::escape_string($title)."', '" . Database::escape_string($description)."', '" . Database::escape_string($color)."', '0');";
554
		Database::query($sql);
555
556
		$task_id = Database::insert_id();
557
558
        if ($task_id) {
559
            $sql = "UPDATE $tbl_blogs_tasks SET task_id = iid WHERE iid = $task_id";
560
            Database::query($sql);
561
        }
562
563
		$tool = 'BLOG_' . $blog_id;
564
565 View Code Duplication
		if ($articleDelete == 'on') {
566
			$sql = " INSERT INTO " . $tbl_tasks_permissions . " ( c_id,  task_id, tool, action) VALUES (
567
					'" . (int)$course_id . "',
568
					'" . (int)$task_id . "',
569
					'" . Database::escape_string($tool) . "',
570
					'article_delete'
571
				)";
572
			Database::query($sql);
573
574
            $id = Database::insert_id();
575
576
            if ($id) {
577
                $sql = "UPDATE $tbl_tasks_permissions SET id = iid WHERE iid = $id";
578
                Database::query($sql);
579
            }
580
        }
581
582 View Code Duplication
		if ($articleEdit == 'on') {
583
			$sql = "
584
				INSERT INTO " . $tbl_tasks_permissions . " (c_id, task_id, tool, action ) VALUES (
585
					'" . (int)$course_id . "',
586
					'" . (int)$task_id . "',
587
					'" . Database::escape_string($tool) . "',
588
					'article_edit'
589
				)";
590
			Database::query($sql);
591
            $id = Database::insert_id();
592
593
            if ($id) {
594
                $sql = "UPDATE $tbl_tasks_permissions SET id = iid WHERE iid = $id";
595
                Database::query($sql);
596
            }
597
		}
598
599 View Code Duplication
		if ($commentsDelete == 'on') {
600
			$sql = "
601
				INSERT INTO " . $tbl_tasks_permissions . " (c_id, task_id, tool, action ) VALUES (
602
					'" . (int)$course_id . "',
603
					'" . (int)$task_id . "',
604
					'" . Database::escape_string($tool) . "',
605
					'article_comments_delete'
606
				)";
607
			Database::query($sql);
608
            $id = Database::insert_id();
609
610
            if ($id) {
611
                $sql = "UPDATE $tbl_tasks_permissions SET id = iid WHERE iid = $id";
612
                Database::query($sql);
613
            }
614
		}
615
	}
616
617
	/**
618
	 * Edit a task in a blog
619
	 * @author Toon Keppens
620
	 * @param Integer $task_id
621
	 * @param String $title
622
	 * @param String $description
623
	 * @param String $color
624
	 */
625
	public static function edit_task($blog_id, $task_id, $title, $description, $articleDelete, $articleEdit, $commentsDelete, $color)
626
	{
627
		$tbl_blogs_tasks = Database::get_course_table(TABLE_BLOGS_TASKS);
628
		$tbl_tasks_permissions = Database::get_course_table(TABLE_BLOGS_TASKS_PERMISSIONS);
629
630
        $course_id = api_get_course_int_id();
631
632
		// Create the task
633
		$sql = "UPDATE $tbl_blogs_tasks SET
634
					title = '".Database::escape_string($title)."',
635
					description = '".Database::escape_string($description)."',
636
					color = '".Database::escape_string($color)."'
637
				WHERE c_id = $course_id AND task_id ='".(int)$task_id."' LIMIT 1";
638
		Database::query($sql);
639
640
		$tool = 'BLOG_' . $blog_id;
641
642
		$sql = "DELETE FROM " . $tbl_tasks_permissions . "
643
				WHERE c_id = $course_id AND task_id = '" . (int)$task_id."'";
644
		Database::query($sql);
645
646 View Code Duplication
		if ($articleDelete == 'on') {
647
			$sql = "INSERT INTO " . $tbl_tasks_permissions . " ( c_id, task_id, tool, action) VALUES (
648
					'" . (int)$course_id . "',
649
					'" . (int)$task_id . "',
650
					'" . Database::escape_string($tool) . "',
651
					'article_delete'
652
				)";
653
			Database::query($sql);
654
            $id = Database::insert_id();
655
656
            if ($id) {
657
                $sql = "UPDATE $tbl_tasks_permissions SET id = iid WHERE iid = $id";
658
                Database::query($sql);
659
            }
660
		}
661
662 View Code Duplication
		if ($articleEdit == 'on') {
663
			$sql = "INSERT INTO " . $tbl_tasks_permissions . " (c_id, task_id, tool, action) VALUES (
664
					'" . (int)$course_id . "',
665
					'" . (int)$task_id . "',
666
					'" . Database::escape_string($tool) . "',
667
					'article_edit'
668
				)";
669
			Database::query($sql);
670
            $id = Database::insert_id();
671
672
            if ($id) {
673
                $sql = "UPDATE $tbl_tasks_permissions SET id = iid WHERE iid = $id";
674
                Database::query($sql);
675
            }
676
		}
677
678 View Code Duplication
		if ($commentsDelete == 'on') {
679
			$sql = " INSERT INTO " . $tbl_tasks_permissions . " (c_id, task_id, tool, action) VALUES (
680
					'" . (int)$course_id . "',
681
					'" . (int)$task_id . "',
682
					'" . Database::escape_string($tool) . "',
683
					'article_comments_delete'
684
				)";
685
			Database::query($sql);
686
            $id = Database::insert_id();
687
688
            if ($id) {
689
                $sql = "UPDATE $tbl_tasks_permissions SET id = iid WHERE iid = $id";
690
                Database::query($sql);
691
            }
692
		}
693
	}
694
695
	/**
696
	 * Deletes a task from a blog
697
	 * @param Integer $blog_id
698
	 * @param Integer $task_id
699
	 */
700
	public static function delete_task($blog_id, $task_id)
701
	{
702
		$tbl_blogs_tasks = Database::get_course_table(TABLE_BLOGS_TASKS);
703
		$course_id = api_get_course_int_id();
704
705
		// Delete posts
706
		$sql = "DELETE FROM $tbl_blogs_tasks
707
				WHERE c_id = $course_id AND blog_id = '".(int)$blog_id."' AND task_id = '".(int)$task_id."'";
708
		Database::query($sql);
709
	}
710
711
	/**
712
	 * Deletes an assigned task from a blog
713
	 * @param Integer $blog_id
714
	 * @param Integer $assignment_id
0 ignored issues
show
Bug introduced by
There is no parameter named $assignment_id. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
715
	 */
716 View Code Duplication
	public static function delete_assigned_task($blog_id, $task_id, $user_id)
717
	{
718
		$tbl_blogs_tasks_rel_user = Database::get_course_table(TABLE_BLOGS_TASKS_REL_USER);
719
        $course_id = api_get_course_int_id();
720
721
		// Delete posts
722
		$sql = "DELETE FROM $tbl_blogs_tasks_rel_user
723
				WHERE
724
				    c_id = $course_id AND
725
				    blog_id = '".(int)$blog_id."' AND
726
				    task_id = '".(int)$task_id."' AND
727
				    user_id = '".(int)$user_id."'";
728
		Database::query($sql);
729
	}
730
731
	/**
732
	 * Get personal task list
733
	 * @author Toon Keppens
734
	 * @return Returns an unsorted list (<ul></ul>) with the users' tasks
735
	 */
736
	public static function get_personal_task_list()
737
	{
738
		$_user = api_get_user_info();
739
740
		$tbl_blogs = Database::get_course_table(TABLE_BLOGS);
741
		$tbl_blogs_tasks_rel_user 	= Database::get_course_table(TABLE_BLOGS_TASKS_REL_USER);
742
		$tbl_blogs_tasks = Database::get_course_table(TABLE_BLOGS_TASKS);
743
744
		$course_id = api_get_course_int_id();
745
746
		if ($_user['user_id']) {
747
			$sql = "SELECT task_rel_user.*, task.title, blog.blog_name
748
                    FROM $tbl_blogs_tasks_rel_user task_rel_user
749
                    INNER JOIN $tbl_blogs_tasks task
750
                    ON task_rel_user.task_id = task.task_id
751
                    INNER JOIN $tbl_blogs blog
752
                    ON task_rel_user.blog_id = blog.blog_id
753
                    AND blog.blog_id = ".intval($_GET['blog_id'])."
754
                    WHERE
755
                        task.c_id = $course_id AND
756
                        blog.c_id = $course_id AND
757
                        task_rel_user.c_id = $course_id AND
758
                        task_rel_user.user_id = ".(int)$_user['user_id']."
759
                    ORDER BY target_date ASC";
760
761
			$result = Database::query($sql);
762
763
			if (Database::num_rows($result) > 0) {
764
				echo '<ul>';
765
				while ($mytask = Database::fetch_array($result)) {
766
					echo '<li><a href="blog.php?action=execute_task&blog_id=' . $mytask['blog_id'] . '&task_id='.stripslashes($mytask['task_id']) . '" title="[Blog: '.stripslashes($mytask['blog_name']) . '] ' . get_lang('ExecuteThisTask') . '">'.stripslashes($mytask['title']) . '</a></li>';
767
				}
768
				echo '<ul>';
769
			} else {
770
				echo get_lang('NoTasks');
771
			}
772
		} else {
773
			echo get_lang('NoTasks');
774
		}
775
	}
776
777
	/**
778
	 * Changes the visibility of a blog
779
	 * @author Toon Keppens
780
	 * @param Integer $blog_id
781
	 */
782
	public static function change_blog_visibility($blog_id)
783
	{
784
		$tbl_blogs = Database::get_course_table(TABLE_BLOGS);
785
		$tbl_tool = Database::get_course_table(TABLE_TOOL_LIST);
786
		$course_id = api_get_course_int_id();
787
788
		// Get blog properties
789
		$sql = "SELECT blog_name, visibility FROM $tbl_blogs
790
				WHERE c_id = $course_id AND blog_id='".(int)$blog_id."'";
791
		$result = Database::query($sql);
792
		$blog = Database::fetch_array($result);
793
		$visibility = $blog['visibility'];
794
		$title = $blog['blog_name'];
795
796
		if ($visibility == 1) {
797
			// Change visibility state, remove from course home.
798
			$sql = "UPDATE $tbl_blogs SET visibility = '0'
799
					WHERE c_id = $course_id AND blog_id ='".(int)$blog_id."' LIMIT 1";
800
			Database::query($sql);
801
802
			$sql = "DELETE FROM $tbl_tool
803
					WHERE c_id = $course_id AND name = '".Database::escape_string($title)."' LIMIT 1";
804
			Database::query($sql);
805
		} else {
806
			// Change visibility state, add to course home.
807
			$sql = "UPDATE $tbl_blogs SET visibility = '1'
808
					WHERE c_id = $course_id AND blog_id ='".(int)$blog_id."' LIMIT 1";
809
			Database::query($sql);
810
811
			$sql = "INSERT INTO $tbl_tool (c_id, name, link, image, visibility, admin, address, added_tool, target )
812
					VALUES ($course_id, '".Database::escape_string($title)."', 'blog/blog.php?blog_id=".(int)$blog_id."', 'blog.gif', '1', '0', 'pastillegris.gif', '0', '_self')";
813
			Database::query($sql);
814
            $id = Database::insert_id();
815
816
            if ($id) {
817
                $sql = "UPDATE $tbl_tool SET id = iid WHERE iid = $id";
818
                Database::query($sql);
819
            }
820
		}
821
	}
822
823
	/**
824
	 * Shows the posts of a blog
825
	 * @author Toon Keppens
826
	 *
827
	 * @param Integer $blog_id
828
	 */
829
	public static function display_blog_posts($blog_id, $filter = '1=1', $max_number_of_posts = 20)
830
    {
831
		// Init
832
		$tbl_blogs_posts = Database::get_course_table(TABLE_BLOGS_POSTS);
833
		$tbl_blogs_comments = Database::get_course_table(TABLE_BLOGS_COMMENTS);
834
		$tbl_users = Database::get_main_table(TABLE_MAIN_USER);
835
836
		$course_id = api_get_course_int_id();
837
838
		// Get posts and authors
839
		$sql = "SELECT post.*, user.lastname, user.firstname, user.username
840
		        FROM $tbl_blogs_posts post
841
                INNER JOIN $tbl_users user
842
                ON post.author_id = user.user_id
843
				WHERE 	post.blog_id = '".(int)$blog_id."' AND
844
						post.c_id = $course_id AND
845
						$filter
846
				ORDER BY post_id DESC LIMIT 0,".(int)$max_number_of_posts;
847
		$result = Database::query($sql);
848
849
		// Display
850
		if(Database::num_rows($result) > 0) {
851
		    $limit = 200;
852
			while ($blog_post = Database::fetch_array($result)) {
853
				// Get number of comments
854
				$sql = "SELECT COUNT(1) as number_of_comments
855
						FROM $tbl_blogs_comments
856
						WHERE
857
						    c_id = $course_id AND
858
						    blog_id = '".(int)$blog_id."' AND
859
						    post_id = '" . (int)$blog_post['post_id']."'";
860
				$tmp = Database::query($sql);
861
				$blog_post_comments = Database::fetch_array($tmp);
862
863
				// Prepare data
864
				$blog_post_id = $blog_post['post_id'];
865
				$blog_post_text = make_clickable(stripslashes($blog_post['full_text']));
866
				$blog_post_date = api_convert_and_format_date($blog_post['date_creation'], null, date_default_timezone_get());
867
868
				// Create an introduction text (but keep FULL sentences)
869
				$words = 0;
870
				$blog_post_text_cut = cut($blog_post_text, $limit) ;
871
				$words = strlen($blog_post_text);
872
873
				if ($words >= $limit) {
874
					$readMoreLink = ' <div class="link" onclick="document.getElementById(\'blogpost_text_' . $blog_post_id . '\').style.display=\'block\'; document.getElementById(\'blogpost_introduction_' . $blog_post_id . '\').style.display=\'none\'">' . get_lang('ReadMore') . '</div>';
875
					$introduction_text = $blog_post_text_cut;
876
				} else {
877
				    $introduction_text = $blog_post_text;
878
					$readMoreLink = '';
879
				}
880
881
				$introduction_text = stripslashes($introduction_text);
882
883
				echo '<div class="blogpost">';
884
				echo '<span class="blogpost_title"><a href="blog.php?action=view_post&blog_id=' . $blog_id . '&post_id=' . $blog_post['post_id'] . '#add_comment" title="' . get_lang('ReadPost') . '" >'.stripslashes($blog_post['title']) . '</a></span>';
885
				echo '<span class="blogpost_date"><a href="blog.php?action=view_post&blog_id=' . $blog_id . '&post_id=' . $blog_post['post_id'] . '#add_comment" title="' . get_lang('ReadPost') . '" >' . $blog_post_date . '</a></span>';
886
				echo '<div class="blogpost_introduction" id="blogpost_introduction_'.$blog_post_id.'">' . $introduction_text.$readMoreLink.'</div>';
887
				echo '<div class="blogpost_text" id="blogpost_text_' . $blog_post_id . '" style="display: none">' . $blog_post_text . '</div>';
888
889
				$file_name_array = get_blog_attachment($blog_id,$blog_post_id,0);
890
891
				if (!empty($file_name_array)) {
892
					echo '<br /><br />';
893
					echo Display::return_icon('attachment.gif',get_lang('Attachment'));
894
					echo '<a href="download.php?file=';
895
					echo $file_name_array['path'];
896
					echo ' "> '.$file_name_array['filename'].' </a><br />';
897
					echo '</span>';
898
				}
899
				$username = api_htmlentities(sprintf(get_lang('LoginX'), $blog_post['username']), ENT_QUOTES);
900
				echo '<span class="blogpost_info">' . get_lang('Author') . ': ' . Display::tag('span', api_get_person_name($blog_post['firstname'], $blog_post['lastname']), array('title'=>$username)) .' - <a href="blog.php?action=view_post&blog_id=' . $blog_id . '&post_id=' . $blog_post['post_id'] . '#add_comment" title="' . get_lang('ReadPost') . '" >' . get_lang('Comments') . ': ' . $blog_post_comments['number_of_comments'] . '</a></span>';
901
				echo '</div>';
902
			}
903
		} else {
904
			if($filter == '1=1') {
905
				echo get_lang('NoArticles');
906
			} else {
907
				echo get_lang('NoArticleMatches');
908
			}
909
		}
910
}
911
912
	/**
913
	 * Display the search results
914
	 *
915
	 * @param Integer $blog_id
916
	 * @param String $query_string
917
	 */
918
	public static function display_search_results ($blog_id, $query_string)
919
	{
920
		// Init
921
		$query_string = Database::escape_string($query_string);
922
		$query_string_parts = explode(' ',$query_string);
923
		$query_string = array();
924
		foreach ($query_string_parts as $query_part) {
925
			$query_string[] = " full_text LIKE '%" . $query_part."%' OR title LIKE '%" . $query_part."%' ";
926
		}
927
		$query_string = '('.implode('OR',$query_string) . ')';
928
929
		// Display the posts
930
		echo '<span class="blogpost_title">' . get_lang('SearchResults') . '</span>';
931
		Blog::display_blog_posts($blog_id, $query_string);
932
	}
933
934
	/**
935
	 * Display posts from a certain date
936
	 *
937
	 * @param Integer $blog_id
938
	 * @param String $query_string
939
	 */
940
	public static function display_day_results($blog_id, $query_string)
941
	{
942
		$date_output = $query_string;
943
		$date = explode('-',$query_string);
944
		$query_string = ' DAYOFMONTH(date_creation) =' . intval($date[2]) . ' AND MONTH(date_creation) =' . intval($date[1]) . ' AND YEAR(date_creation) =' . intval($date[0]);
945
946
		// Put date in correct output format
947
		$date_output = api_format_date($date_output, DATE_FORMAT_LONG);
948
949
		// Display the posts
950
		echo '<span class="blogpost_title">' . get_lang('PostsOf') . ': ' . $date_output . '</span>';
951
		Blog::display_blog_posts($blog_id, $query_string);
952
	}
953
954
	/**
955
	 * Displays a post and his comments
956
	 *
957
	 * @param Integer $blog_id
958
	 * @param Integer $post_id
959
	 */
960
	public static function display_post($blog_id, $post_id)
961
	{
962
		$tbl_blogs_posts = Database::get_course_table(TABLE_BLOGS_POSTS);
963
		$tbl_blogs_comments = Database::get_course_table(TABLE_BLOGS_COMMENTS);
964
		$tbl_users = Database::get_main_table(TABLE_MAIN_USER);
965
966
		global $charset, $dateFormatLong;
967
968
		$course_id = api_get_course_int_id();
969
970
		// Get posts and author
971
		$sql = "SELECT post.*, user.lastname, user.firstname, user.username
972
		        FROM $tbl_blogs_posts post
973
					INNER JOIN $tbl_users user
974
					ON post.author_id = user.user_id
975
                WHERE
976
                    post.c_id = $course_id AND
977
                    post.blog_id = '".(int)$blog_id."' AND
978
                    post.post_id = '".(int)$post_id."'
979
                ORDER BY post_id DESC";
980
		$result = Database::query($sql);
981
		$blog_post = Database::fetch_array($result);
982
983
		// Get number of comments
984
		$sql = "SELECT COUNT(1) as number_of_comments
985
		        FROM $tbl_blogs_comments
986
				WHERE c_id = $course_id AND blog_id = '".(int)$blog_id."' AND post_id = '".(int)$post_id."'";
987
		$result = Database::query($sql);
988
		$blog_post_comments = Database::fetch_array($result);
989
990
		// Prepare data
991
		$blog_post_text = make_clickable(stripslashes($blog_post['full_text']));
992
		$blog_post_date = api_convert_and_format_date($blog_post['date_creation'], null, date_default_timezone_get());
993
		$blog_post_actions = "";
994
995
		$task_id = (isset($_GET['task_id']) && is_numeric($_GET['task_id'])) ? intval($_GET['task_id']) : 0;
996
997
		if (api_is_allowed('BLOG_' . $blog_id, 'article_edit', $task_id)) {
998
			$blog_post_actions .= '<a href="blog.php?action=edit_post&blog_id=' . $blog_id . '&post_id=' . $post_id . '&article_id=' . $blog_post['post_id'] . '&task_id=' . $task_id . '" title="' . get_lang('EditThisPost') . '">';
999
			$blog_post_actions .=  Display::return_icon('edit.png');
1000
			$blog_post_actions .= '</a>';
1001
        }
1002
1003 View Code Duplication
		if (api_is_allowed('BLOG_' . $blog_id, 'article_delete', $task_id)) {
1004
			$blog_post_actions .= '<a href="blog.php?action=view_post&blog_id=' . $blog_id . '&post_id=' . $post_id . '&do=delete_article&article_id=' . $blog_post['post_id'] . '&task_id=' . $task_id . '" title="' . get_lang('DeleteThisArticle') . '" onclick="javascript:if(!confirm(\''.addslashes(api_htmlentities(get_lang("ConfirmYourChoice"),ENT_QUOTES,$charset)). '\')) return false;">';
1005
            $blog_post_actions .= Display::return_icon('delete.png');
1006
            $blog_post_actions .= '</a>';
1007
        }
1008
1009
		if (api_is_allowed('BLOG_' . $blog_id, 'article_rate'))
1010
			$rating_select = Blog::display_rating_form('post',$blog_id,$post_id);
1011
1012
		$blog_post_text=stripslashes($blog_post_text);
1013
1014
		// Display post
1015
		echo '<div class="blogpost">';
1016
		echo '<span class="blogpost_title"><a href="blog.php?action=view_post&blog_id=' . $blog_id . '&post_id=' . $blog_post['post_id'] . '" title="' . get_lang('ReadPost') . '" >'.stripslashes($blog_post['title']) . '</a></span>';
1017
		echo '<span class="blogpost_date">' . $blog_post_date . '</span>';
1018
		echo '<span class="blogpost_text">' . $blog_post_text . '</span><br />';
1019
1020
		$file_name_array = get_blog_attachment($blog_id, $post_id);
1021
1022 View Code Duplication
        if (!empty($file_name_array)) {
1023
			echo ' <br />';
1024
			echo Display::return_icon('attachment.gif',get_lang('Attachment'));
1025
			echo '<a href="download.php?file=';
1026
			echo $file_name_array['path'];
1027
			echo ' "> '.$file_name_array['filename'].' </a>';
1028
			echo '</span>';
1029
			echo '<span class="attachment_comment">';
1030
			echo $file_name_array['comment'];
1031
			echo '</span>';
1032
			echo '<br />';
1033
		}
1034
        $username = api_htmlentities(sprintf(get_lang('LoginX'), $blog_post['username']), ENT_QUOTES);
1035
		echo '<span class="blogpost_info">'.get_lang('Author').': ' .Display::tag('span', api_get_person_name($blog_post['firstname'], $blog_post['lastname']), array('title'=>$username)).' - '.get_lang('Comments').': '.$blog_post_comments['number_of_comments'].' - '.get_lang('Rating').': '.Blog::display_rating('post',$blog_id,$post_id).$rating_select.'</span>';
1036
		echo '<span class="blogpost_actions">' . $blog_post_actions . '</span>';
1037
		echo '</div>';
1038
1039
		// Display comments if there are any
1040
		if($blog_post_comments['number_of_comments'] > 0) {
1041
			echo '<div class="comments">';
1042
				echo '<span class="blogpost_title">' . get_lang('Comments') . '</span><br />';
1043
				Blog::get_threaded_comments(0, 0, $blog_id, $post_id, $task_id);
1044
			echo '</div>';
1045
		}
1046
1047
		// Display comment form
1048
		if (api_is_allowed('BLOG_' . $blog_id, 'article_comments_add')) {
1049
			Blog::display_new_comment_form($blog_id, $post_id, $blog_post['title']);
1050
		}
1051
	}
1052
1053
	/**
1054
	 * Adds rating to a certain post or comment
1055
	 * @author Toon Keppens
1056
	 *
1057
	 * @param String $type
1058
	 * @param Integer $blog_id
1059
	 * @param Integer $item_id
1060
	 * @param Integer $rating
1061
	 *
1062
	 * @return Boolean success
1063
	 */
1064
	public static function add_rating($type, $blog_id, $item_id, $rating)
1065
	{
1066
		$_user = api_get_user_info();
1067
1068
		// Init
1069
		$tbl_blogs_rating = Database::get_course_table(TABLE_BLOGS_RATING);
1070
		$course_id = api_get_course_int_id();
1071
1072
		// Check if the user has already rated this post/comment
1073
		$sql = "SELECT rating_id FROM $tbl_blogs_rating
1074
                WHERE
1075
                    c_id = $course_id AND
1076
                    blog_id = '".(int)$blog_id."' AND
1077
                    item_id = '".(int)$item_id."' AND
1078
                    rating_type = '".Database::escape_string($type)."' AND
1079
                    user_id = '".(int)$_user['user_id']."'";
1080
		$result = Database::query($sql);
1081
1082
        // Add rating
1083
		if (Database::num_rows($result) == 0) {
1084
			$sql = "INSERT INTO $tbl_blogs_rating (c_id, blog_id, rating_type, item_id, user_id, rating )
1085
					VALUES ($course_id, '".(int)$blog_id."', '".Database::escape_string($type)."', '".(int)$item_id."', '".(int)$_user['user_id']."', '".Database::escape_string($rating)."')";
1086
			Database::query($sql);
1087
1088
            $id = Database::insert_id();
1089
            if ($id) {
1090
                $sql = "UPDATE $tbl_blogs_rating SET rating_id = iid WHERE iid = $id";
1091
                Database::query($sql);
1092
            }
1093
1094
			return true;
1095
        } else {
1096
			return false;
1097
		}
1098
	}
1099
1100
	/**
1101
	 * Shows the rating of user
1102
	 *
1103
	 * @param String $type
1104
	 * @param Integer $blog_id
1105
	 * @param Integer $item_id
1106
	 *
1107
	 * @return array()
0 ignored issues
show
Documentation introduced by
The doc-type array() could not be parsed: Expected "|" or "end of type", but got "(" at position 5. (view supported doc-types)

This check marks PHPDoc comments that could not be parsed by our parser. To see which comment annotations we can parse, please refer to our documentation on supported doc-types.

Loading history...
1108
	 */
1109 View Code Duplication
	public static function display_rating($type, $blog_id, $item_id)
1110
	{
1111
		$tbl_blogs_rating = Database::get_course_table(TABLE_BLOGS_RATING);
1112
		$course_id = api_get_course_int_id();
1113
1114
		// Calculate rating
1115
		$sql = "SELECT AVG(rating) as rating FROM $tbl_blogs_rating
1116
				WHERE
1117
				    c_id = $course_id AND
1118
				    blog_id = '".(int)$blog_id."' AND
1119
				    item_id = '".(int)$item_id."' AND
1120
				    rating_type = '".Database::escape_string($type)."' ";
1121
		$result = Database::query($sql);
1122
		$result = Database::fetch_array($result);
0 ignored issues
show
Bug introduced by
It seems like $result can be null; however, fetch_array() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
1123
		return round($result['rating'], 2);
1124
	}
1125
1126
	/**
1127
	 * Shows the rating form if not already rated by that user
1128
	 * @author Toon Keppens
1129
	 *
1130
	 * @param String $type
1131
	 * @param Integer $blog_id
1132
	 * @param Integer $item_id
0 ignored issues
show
Bug introduced by
There is no parameter named $item_id. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
1133
	 *
1134
	 *@return String
1135
	 */
1136
	public static function display_rating_form ($type, $blog_id, $post_id, $comment_id = NULL)
1137
	{
1138
		$_user = api_get_user_info();
1139
		$tbl_blogs_rating = Database::get_course_table(TABLE_BLOGS_RATING);
1140
        $course_id = api_get_course_int_id();
1141
1142 View Code Duplication
        if ($type == 'post') {
1143
			// Check if the user has already rated this post
1144
			$sql = "SELECT rating_id FROM $tbl_blogs_rating
1145
					WHERE c_id = $course_id AND
1146
					blog_id = '".(int)$blog_id."'
1147
					AND item_id = '".(int)$post_id."'
1148
					AND rating_type = '".Database::escape_string($type)."'
1149
					AND user_id = '".(int)$_user['user_id']."'";
1150
			$result = Database::query($sql);
1151
            // Add rating
1152
            if (Database::num_rows($result) == 0) {
1153
				return ' - ' . get_lang('RateThis') . ': <form method="get" action="blog.php" style="display: inline" id="frm_rating_' . $type . '_' . $post_id . '" name="frm_rating_' . $type . '_' . $post_id . '"><select name="rating" onchange="document.forms[\'frm_rating_' . $type . '_' . $post_id . '\'].submit()"><option value="">-</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option></select><input type="hidden" name="action" value="view_post" /><input type="hidden" name="type" value="' . $type . '" /><input type="hidden" name="do" value="rate" /><input type="hidden" name="blog_id" value="' . $blog_id . '" /><input type="hidden" name="post_id" value="' . $post_id . '" /></form>';
1154
            } else {
1155
				return '';
1156
			}
1157
		}
1158
1159 View Code Duplication
        if ($type = 'comment') {
1160
			// Check if the user has already rated this comment
1161
			$sql = "SELECT rating_id FROM $tbl_blogs_rating
1162
					WHERE c_id = $course_id AND blog_id = '".(int)$blog_id ."'
1163
					AND item_id = '".(int)$comment_id."'
1164
					AND rating_type = '".Database::escape_string($type)."'
1165
					AND user_id = '".(int)$_user['user_id']."'";
1166
			$result = Database::query($sql);
1167
1168
            if (Database::num_rows($result) == 0) {
1169
				return ' - ' . get_lang('RateThis') . ': <form method="get" action="blog.php" style="display: inline" id="frm_rating_' . $type . '_' . $comment_id . '" name="frm_rating_' . $type . '_' . $comment_id . '"><select name="rating" onchange="document.forms[\'frm_rating_' . $type . '_' . $comment_id . '\'].submit()"><option value="">-</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option></select><input type="hidden" name="action" value="view_post" /><input type="hidden" name="type" value="' . $type . '" /><input type="hidden" name="do" value="rate" /><input type="hidden" name="blog_id" value="' . $blog_id . '" /><input type="hidden" name="post_id" value="' . $post_id . '" /><input type="hidden" name="comment_id" value="' . $comment_id . '" /></form>';
1170
            } else {
1171
				return '';
1172
			}
1173
		}
1174
	}
1175
1176
	/**
1177
	 * This functions gets all replys to a post, threaded.
1178
	 *
1179
	 * @param Integer $current
1180
	 * @param Integer $current_level
1181
	 * @param Integer $blog_id
1182
	 * @param Integer $post_id
1183
	 */
1184
	public static function get_threaded_comments($current = 0, $current_level = 0, $blog_id, $post_id, $task_id = 0)
1185
	{
1186
		$tbl_blogs_comments = Database::get_course_table(TABLE_BLOGS_COMMENTS);
1187
		$tbl_users = Database::get_main_table(TABLE_MAIN_USER);
1188
		$tbl_blogs_tasks = Database::get_course_table(TABLE_BLOGS_TASKS);
1189
		global $charset;
1190
1191
		$course_id = api_get_course_int_id();
1192
1193
		// Select top level comments
1194
		$next_level = $current_level + 1;
1195
        $sql = "SELECT comments.*, user.lastname, user.firstname, user.username, task.color
1196
                FROM $tbl_blogs_comments comments
1197
                INNER JOIN $tbl_users user
1198
                ON comments.author_id = user.user_id
1199
                LEFT JOIN $tbl_blogs_tasks task
1200
                ON comments.task_id = task.task_id AND task.c_id = $course_id
1201
                WHERE
1202
                    comments.c_id = $course_id AND
1203
                    parent_comment_id = $current AND
1204
                    comments.blog_id = '".(int)$blog_id."' AND
1205
                    comments.post_id = '".(int)$post_id."'";
1206
		$result = Database::query($sql);
1207
1208
		while($comment = Database::fetch_array($result)) {
1209
			// Select the children recursivly
1210
			$tmp = "SELECT comments.*, user.lastname, user.firstname, user.username
1211
			        FROM $tbl_blogs_comments comments
1212
					INNER JOIN $tbl_users user
1213
					ON comments.author_id = user.user_id
1214
					WHERE
1215
						comments.c_id = $course_id AND
1216
						comment_id = $current
1217
						AND blog_id = '".(int)$blog_id."'
1218
						AND post_id = '".(int)$post_id."'";
1219
			$tmp = Database::query($tmp);
1220
			$tmp = Database::fetch_array($tmp);
0 ignored issues
show
Bug introduced by
It seems like $tmp can be null; however, fetch_array() does not accept null, maybe add an additional type check?

Unless you are absolutely sure that the expression can never be null because of other conditions, we strongly recommend to add an additional type check to your code:

/** @return stdClass|null */
function mayReturnNull() { }

function doesNotAcceptNull(stdClass $x) { }

// With potential error.
function withoutCheck() {
    $x = mayReturnNull();
    doesNotAcceptNull($x); // Potential error here.
}

// Safe - Alternative 1
function withCheck1() {
    $x = mayReturnNull();
    if ( ! $x instanceof stdClass) {
        throw new \LogicException('$x must be defined.');
    }
    doesNotAcceptNull($x);
}

// Safe - Alternative 2
function withCheck2() {
    $x = mayReturnNull();
    if ($x instanceof stdClass) {
        doesNotAcceptNull($x);
    }
}
Loading history...
1221
			$parent_cat = $tmp['parent_comment_id'];
1222
			$border_color = '';
1223
1224
			// Prepare data
1225
			$comment_text = make_clickable(stripslashes($comment['comment']));
1226
			$blog_comment_date = api_convert_and_format_date($comment['date_creation'], null, date_default_timezone_get());
1227
			$blog_comment_actions = "";
1228 View Code Duplication
            if (api_is_allowed('BLOG_'.$blog_id, 'article_comments_delete', $task_id)) {
1229
                $blog_comment_actions .= '<a href="blog.php?action=view_post&blog_id='.$blog_id.'&post_id='.$post_id.'&do=delete_comment&comment_id='.$comment['comment_id'].'&task_id='.$task_id.'" title="'.get_lang(
1230
                        'DeleteThisComment'
1231
                    ).'" onclick="javascript:if(!confirm(\''.addslashes(
1232
                        api_htmlentities(get_lang("ConfirmYourChoice"), ENT_QUOTES, $charset)
1233
                    ).'\')) return false;">';
1234
                $blog_comment_actions .= Display::return_icon('delete.png');
1235
                $blog_comment_actions .= '</a>';
1236
            }
1237
1238
            if (api_is_allowed('BLOG_'.$blog_id, 'article_comments_rate')) {
1239
                $rating_select = Blog::display_rating_form('comment', $blog_id, $post_id, $comment['comment_id']);
1240
            }
1241
1242
			if (!is_null($comment['task_id'])) {
1243
				$border_color = ' border-left: 3px solid #' . $comment['color'];
1244
			}
1245
1246
			$comment_text = stripslashes($comment_text);
1247
1248
			// Output...
1249
			$margin = $current_level * 30;
1250
			echo '<div class="blogpost_comment" style="margin-left: ' . $margin . 'px;' . $border_color . '">';
1251
				echo '<span class="blogpost_comment_title"><a href="#add_comment" onclick="document.getElementById(\'comment_parent_id\').value=\'' . $comment['comment_id'] . '\'; document.getElementById(\'comment_title\').value=\'Re: '.addslashes($comment['title']) . '\'" title="' . get_lang('ReplyToThisComment') . '" >'.stripslashes($comment['title']) . '</a></span>';
1252
				echo '<span class="blogpost_comment_date">' . $blog_comment_date . '</span>';
1253
				echo '<span class="blogpost_text">' . $comment_text . '</span>';
1254
1255
				$file_name_array = get_blog_attachment($blog_id,$post_id, $comment['comment_id']);
1256 View Code Duplication
				if (!empty($file_name_array)) {
1257
					echo '<br /><br />';
1258
					echo Display::return_icon('attachment.gif',get_lang('Attachment'));
1259
					echo '<a href="download.php?file=';
1260
					echo $file_name_array['path'];
1261
					echo ' "> '.$file_name_array['filename'].' </a>';
1262
					echo '<span class="attachment_comment">';
1263
					echo $file_name_array['comment'];
1264
					echo '</span><br />';
1265
				}
1266
                $username = api_htmlentities(sprintf(get_lang('LoginX'), $comment['username']), ENT_QUOTES);
1267
				echo '<span class="blogpost_comment_info">'.get_lang('Author').': '.Display::tag('span', api_get_person_name($comment['firstname'], $comment['lastname']), array('title'=>$username)).' - '.get_lang('Rating').': '.Blog::display_rating('comment', $blog_id, $comment['comment_id']).$rating_select.'</span>';
1268
				echo '<span class="blogpost_actions">' . $blog_comment_actions . '</span>';
1269
			echo '</div>';
1270
1271
			// Go further down the tree.
1272
			Blog::get_threaded_comments($comment['comment_id'], $next_level, $blog_id, $post_id);
1273
		}
1274
	}
1275
1276
	/**
1277
	 * Displays the form to create a new post
1278
	 * @author Toon Keppens
1279
	 *
1280
	 * @param Integer $blog_id
1281
	 */
1282
	public static function display_form_new_post($blog_id)
1283
	{
1284
		if (api_is_allowed('BLOG_' . $blog_id, 'article_add')) {
1285
			$form = new FormValidator(
1286
				'add_post',
1287
				'post',
1288
				api_get_path(WEB_CODE_PATH)."blog/blog.php?action=new_post&blog_id=" . $blog_id . "&" . api_get_cidreq(),
1289
				null,
1290
				array('enctype' => 'multipart/form-data')
1291
			);
1292
			$form->addHidden('post_title_edited', 'false');
1293
			$form->addHeader(get_lang('NewPost'));
1294
			$form->addText('title', get_lang('Title'));
1295
			$config = array();
1296
			if (!api_is_allowed_to_edit()) {
1297
				$config['ToolbarSet'] = 'ProjectStudent';
1298
			} else {
1299
				$config['ToolbarSet'] = 'Project';
1300
			}
1301
			$form->addHtmlEditor('full_text', get_lang('Content'), false, false, $config);
1302
			$form->addFile('user_upload', get_lang('AddAnAttachment'));
1303
			$form->addTextarea('post_file_comment', get_lang('FileComment'));
1304
			$form->addHidden('new_post_submit', 'true');
1305
			$form->addButton('save', get_lang('Save'));
1306
1307
			$form->display();
1308
		} else {
1309
			api_not_allowed();
1310
		}
1311
	}
1312
1313
	/**
1314
	 * Displays the form to edit a post
1315
	 * @author Toon Keppens
1316
	 *
1317
	 * @param Integer $blog_id
1318
	 */
1319
	public static function display_form_edit_post($blog_id, $post_id)
1320
	{
1321
		$tbl_blogs_posts = Database::get_course_table(TABLE_BLOGS_POSTS);
1322
		$tbl_users = Database::get_main_table(TABLE_MAIN_USER);
1323
1324
		$course_id = api_get_course_int_id();
1325
1326
		// Get posts and author
1327
		$sql = "SELECT post.*, user.lastname, user.firstname
1328
				FROM $tbl_blogs_posts post
1329
				INNER JOIN $tbl_users user ON post.author_id = user.user_id
1330
				WHERE
1331
				post.c_id 			= $course_id AND
1332
				post.blog_id 		= '".(int)$blog_id ."'
1333
				AND post.post_id	= '".(int)$post_id."'
1334
				ORDER BY post_id DESC";
1335
		$result = Database::query($sql);
1336
		$blog_post = Database::fetch_array($result);
1337
1338
		// Form
1339
		$form = new FormValidator(
1340
			'edit_post',
1341
			'post',
1342
			api_get_path(WEB_CODE_PATH).'blog/blog.php?action=edit_post&post_id=' . intval($_GET['post_id']) . '&blog_id=' . intval($blog_id) . '&article_id='.intval($_GET['article_id']).'&task_id='.intval($_GET['task_id'])
1343
		);
1344
1345
		$form->addHeader(get_lang('EditPost'));
1346
		$form->addText('title', get_lang('Title'));
1347
1348
		if (!api_is_allowed_to_edit()) {
1349
			$config['ToolbarSet'] = 'ProjectStudent';
1350
		} else {
1351
			$config['ToolbarSet'] = 'Project';
1352
		}
1353
		$form->addHtmlEditor('full_text', get_lang('Content'), false, false, $config);
1354
1355
		$form->addHidden('action', '');
1356
		$form->addHidden('edit_post_submit', 'true');
1357
		$form->addHidden('post_id', intval($_GET['post_id']));
1358
		$form->addButton('save', get_lang('Save'));
1359
		$form->setDefaults($blog_post);
1360
		$form->display();
1361
	}
1362
1363
	/**
1364
	 * Displays a list of tasks in this blog
1365
	 * @author Toon Keppens
1366
	 *
1367
	 * @param Integer $blog_id
1368
	 */
1369
	public static function display_task_list($blog_id)
1370
    {
1371
		global $charset;
1372
        $course_id = api_get_course_int_id();
1373
1374
		if (api_is_allowed('BLOG_' . $blog_id, 'article_add')) {
1375
			$tbl_blogs_tasks = Database::get_course_table(TABLE_BLOGS_TASKS);
1376
			$counter = 0;
1377
			global $color2;
1378
1379
			echo '<div class="actions">';
1380
			echo '<a href="' .api_get_self(). '?action=manage_tasks&blog_id=' . $blog_id . '&do=add">';
1381
            echo Display::return_icon('blog_newtasks.gif', get_lang('AddTasks'));
1382
            echo get_lang('AddTasks') . '</a> ';
1383
			echo '<a href="' .api_get_self(). '?action=manage_tasks&blog_id=' . $blog_id . '&do=assign">';
1384
            echo Display::return_icon('blog_task.gif', get_lang('AssignTasks'));
1385
            echo get_lang('AssignTasks') . '</a>';
1386
			?>
1387
				<a href="<?php echo api_get_self(); ?>?action=manage_rights&blog_id=<?php echo $blog_id ?>" title="<?php echo get_lang('ManageRights') ?>">
1388
                    <?php echo Display::return_icon('blog_admin_users.png', get_lang('RightsManager'),'',ICON_SIZE_SMALL). get_lang('RightsManager') ?></a>
1389
			<?php
1390
			echo '</div>';
1391
1392
			echo '<span class="blogpost_title">' . get_lang('TaskList') . '</span><br />';
1393
			echo "<table class=\"data_table\">";
1394
			echo	"<tr bgcolor=\"$color2\" align=\"center\" valign=\"top\">",
1395
					 "<th width='240'><b>",get_lang('Title'),"</b></th>",
1396
					 "<th><b>",get_lang('Description'),"</b></th>",
1397
					 "<th><b>",get_lang('Color'),"</b></th>",
1398
					 "<th width='50'><b>",get_lang('Modify'),"</b></th>",
1399
				"</tr>";
1400
1401
1402
			$sql = " SELECT
1403
                        blog_id,
1404
                        task_id,
1405
                        blog_id,
1406
                        title,
1407
                        description,
1408
                        color,
1409
                        system_task
1410
                    FROM " . $tbl_blogs_tasks . "
1411
                    WHERE c_id = $course_id AND blog_id = " . (int)$blog_id . "
1412
                    ORDER BY system_task, title";
1413
			$result = Database::query($sql);
1414
1415
			while ($task = Database::fetch_array($result)) {
1416
				$counter++;
1417
				$css_class = (($counter % 2) == 0) ? "row_odd" : "row_even";
1418
				$delete_icon = ($task['system_task'] == '1') ? "delete_na.png" : "delete.png";
1419
				$delete_title = ($task['system_task'] == '1') ? get_lang('DeleteSystemTask') : get_lang('DeleteTask');
1420
				$delete_link = ($task['system_task'] == '1') ? '#' : api_get_self() . '?action=manage_tasks&blog_id=' . $task['blog_id'] . '&do=delete&task_id=' . $task['task_id'];
1421
				$delete_confirm = ($task['system_task'] == '1') ? '' : 'onclick="javascript:if(!confirm(\''.addslashes(api_htmlentities(get_lang("ConfirmYourChoice"),ENT_QUOTES,$charset)). '\')) return false;"';
1422
1423
				echo '<tr class="' . $css_class . '" valign="top">';
1424
                echo '<td width="240">'.Security::remove_XSS($task['title']).'</td>';
1425
                echo '<td>'.Security::remove_XSS($task['description']).'</td>';
1426
                echo '<td><span style="background-color: #'.$task['color'].'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></td>';
1427
                echo '<td width="50">';
1428
                echo '<a href="'.api_get_self().'?action=manage_tasks&blog_id='.$task['blog_id'].'&do=edit&task_id='.$task['task_id'].'">';
1429
                echo Display::return_icon('edit.png', get_lang('EditTask'));
1430
                      echo "</a>";
1431
                      echo '<a href="'.$delete_link.'"';
1432
                      echo $delete_confirm;
1433
                       echo '>';
1434
                        echo Display::return_icon($delete_icon, $delete_title);
1435
                       echo "</a>";
1436
                     echo '</td>';
1437
                   echo '</tr>';
1438
			}
1439
			echo "</table>";
1440
		}
1441
	}
1442
1443
	/**
1444
	 * Displays a list of tasks assigned to a user in this blog
1445
	 * @author Toon Keppens
1446
	 *
1447
	 * @param Integer $blog_id
1448
	 */
1449
	public static function display_assigned_task_list ($blog_id)
1450
    {
1451
		// Init
1452
		$tbl_users = Database::get_main_table(TABLE_MAIN_USER);
1453
		$tbl_blogs_tasks = Database::get_course_table(TABLE_BLOGS_TASKS);
1454
		$tbl_blogs_tasks_rel_user = Database::get_course_table(TABLE_BLOGS_TASKS_REL_USER);
1455
		$counter = 0;
1456
		global $charset,$color2;
1457
1458
		echo '<span class="blogpost_title">' . get_lang('AssignedTasks') . '</span><br />';
1459
		echo "<table class=\"data_table\">";
1460
		echo	"<tr bgcolor=\"$color2\" align=\"center\" valign=\"top\">",
1461
				 "<th width='240'><b>",get_lang('Member'),"</b></th>",
1462
				 "<th><b>",get_lang('Task'),"</b></th>",
1463
				 "<th><b>",get_lang('Description'),"</b></th>",
1464
				 "<th><b>",get_lang('TargetDate'),"</b></th>",
1465
				 "<th width='50'><b>",get_lang('Modify'),"</b></th>",
1466
			"</tr>";
1467
1468
		$course_id = api_get_course_int_id();
1469
1470
		$sql = "SELECT task_rel_user.*, task.title, user.firstname, user.lastname, user.username, task.description, task.system_task, task.blog_id, task.task_id
1471
				FROM $tbl_blogs_tasks_rel_user task_rel_user
1472
				INNER JOIN $tbl_blogs_tasks task ON task_rel_user.task_id = task.task_id
1473
				INNER JOIN $tbl_users user ON task_rel_user.user_id = user.user_id
1474
				WHERE
1475
				    task_rel_user.c_id = $course_id AND
1476
					task.c_id = $course_id AND
1477
					task_rel_user.blog_id = '".(int)$blog_id."'
1478
				ORDER BY target_date ASC";
1479
		$result = Database::query($sql);
1480
1481
		while ($assignment = Database::fetch_array($result)) {
1482
			$counter++;
1483
			$css_class = (($counter % 2)==0) ? "row_odd" : "row_even";
1484
			$delete_icon = ($assignment['system_task'] == '1') ? "delete_na.png" : "delete.png";
1485
			$delete_title = ($assignment['system_task'] == '1') ? get_lang('DeleteSystemTask') : get_lang('DeleteTask');
1486
			$delete_link = ($assignment['system_task'] == '1') ? '#' : api_get_self() . '?action=manage_tasks&blog_id=' . $assignment['blog_id'] . '&do=delete&task_id=' . $assignment['task_id'];
1487
			$delete_confirm = ($assignment['system_task'] == '1') ? '' : 'onclick="javascript:if(!confirm(\''.addslashes(api_htmlentities(get_lang("ConfirmYourChoice"),ENT_QUOTES,$charset)). '\')) return false;"';
1488
1489
            $username = api_htmlentities(sprintf(get_lang('LoginX'), $assignment['username']), ENT_QUOTES);
1490
1491
            echo '<tr class="'.$css_class.'" valign="top">';
1492
            echo '<td width="240">'.Display::tag(
1493
                    'span',
1494
                    api_get_person_name($assignment['firstname'], $assignment['lastname']),
1495
                    array('title' => $username)
1496
                ).'</td>';
1497
            echo '<td>'.stripslashes($assignment['title']).'</td>';
1498
            echo '<td>'.stripslashes($assignment['description']).'</td>';
1499
            echo '<td>'.$assignment['target_date'].'</td>';
1500
            echo '<td width="50">';
1501
            echo '<a href="'.api_get_self().'?action=manage_tasks&blog_id='.$assignment['blog_id'].'&do=edit_assignment&task_id='.$assignment['task_id'].'&user_id='.$assignment['user_id'].'">';
1502
	            echo Display::return_icon('edit.png', get_lang('EditTask'));
1503
				echo "</a>";
1504
				echo '<a href="'.api_get_self().'?action=manage_tasks&blog_id='.$assignment['blog_id'].'&do=delete_assignment&task_id='.$assignment['task_id'].'&user_id='.$assignment['user_id'].'" ';
1505
				echo 'onclick="javascript:if(!confirm(\''.addslashes(api_htmlentities(get_lang("ConfirmYourChoice"), ENT_QUOTES, $charset)).'\')) return false;"';
1506
                echo Display::return_icon($delete_icon, $delete_title);
1507
				echo "</a>";
1508
				echo '</td>';
1509
				echo '</tr>';
1510
		}
1511
		echo "</table>";
1512
	}
1513
1514
	/**
1515
	 * Displays new task form
1516
	 * @author Toon Keppens
1517
	 *
1518
	 */
1519
	public static function display_new_task_form ($blog_id)
1520
	{
1521
		// Init
1522
        $colors = array(
1523
            'FFFFFF',
1524
            'FFFF99',
1525
            'FFCC99',
1526
            'FF9933',
1527
            'FF6699',
1528
            'CCFF99',
1529
            'CC9966',
1530
            '66FF00',
1531
            '9966FF',
1532
            'CF3F3F',
1533
            '990033',
1534
            '669933',
1535
            '0033FF',
1536
            '003366',
1537
            '000000'
1538
        );
1539
1540
		// form
1541
		echo '<form name="add_task" method="post" action="blog.php?action=manage_tasks&blog_id=' . $blog_id . '">';
1542
1543
		// form title
1544
		echo '<legend>'.get_lang('AddTask').'</legend>';
1545
1546
		// task title
1547
		echo '	<div class="control-group">
1548
					<label class="control-label">
1549
						<span class="form_required">*</span>' . get_lang('Title') . '
1550
					</label>
1551
					<div class="controls">
1552
						<input name="task_name" type="text" size="70" />
1553
					</div>
1554
				</div>';
1555
1556
		// task comment
1557
		echo '	<div class="control-group">
1558
					<label class="control-label">
1559
						' . get_lang('Description') . '
1560
					</label>
1561
					<div class="controls">
1562
						<textarea name="task_description" cols="45"></textarea>
1563
					</div>
1564
				</div>';
1565
1566
		// task management
1567
		echo '	<div class="control-group">
1568
					<label class="control-label">
1569
						' . get_lang('TaskManager') . '
1570
					</label>
1571
					<div class="controls">';
1572
                echo '<table class="data_table" cellspacing="0" style="border-collapse:collapse; width:446px;">';
1573
                    echo '<tr>';
1574
                        echo '<th colspan="2" style="width:223px;">' . get_lang('ArticleManager') . '</th>';
1575
                        echo '<th width:223px;>' . get_lang('CommentManager') . '</th>';
1576
                    echo '</tr>';
1577
                    echo '<tr>';
1578
                        echo '<th style="width:111px;"><label for="articleDelete">' . get_lang('Delete') . '</label></th>';
1579
                        echo '<th style="width:112px;"><label for="articleEdit">' . get_lang('Edit') . '</label></th>';
1580
                        echo '<th style="width:223px;"><label for="commentsDelete">' . get_lang('Delete') . '</label></th>';
1581
                    echo '</tr>';
1582
                    echo '<tr>';
1583
                        echo '<td style="text-align:center;"><input id="articleDelete" name="chkArticleDelete" type="checkbox" /></td>';
1584
                        echo '<td style="text-align:center;"><input id="articleEdit" name="chkArticleEdit" type="checkbox" /></td>';
1585
                        echo '<td style="border:1px dotted #808080; text-align:center;"><input id="commentsDelete" name="chkCommentsDelete" type="checkbox" /></td>';
1586
                    echo '</tr>';
1587
                echo '</table>';
1588
		echo '		</div>
1589
				</div>';
1590
1591
1592
		// task color
1593
		echo '	<div class="control-group">
1594
					<label class="control-label">
1595
						' . get_lang('Color') . '
1596
					</label>
1597
					<div class="controls">';
1598
        echo '<select name="task_color" id="color" style="width: 150px; background-color: #eeeeee" onchange="document.getElementById(\'color\').style.backgroundColor=\'#\'+document.getElementById(\'color\').value" onkeypress="document.getElementById(\'color\').style.backgroundColor=\'#\'+document.getElementById(\'color\').value">';
1599
                foreach ($colors as $color) {
1600
                    $style = 'style="background-color: #' . $color . '"';
1601
                    echo '<option value="' . $color . '" ' . $style . '>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>';
1602
                }
1603
        echo '</select>';
1604
		echo '		</div>
1605
				</div>';
1606
1607
		// submit
1608
		echo '	<div class="control-group">
1609
					<div class="controls">
1610
							<input type="hidden" name="action" value="" />
1611
							<input type="hidden" name="new_task_submit" value="true" />
1612
						<button class="save" type="submit" name="Submit">' . get_lang('Save') . '</button>
1613
					</div>
1614
				</div>';
1615
		echo '</form>';
1616
1617
		echo '<div style="clear:both; margin-bottom: 10px;"></div>';
1618
	}
1619
1620
1621
	/**
1622
	 * Displays edit task form
1623
	 * @author Toon Keppens
1624
	 *
1625
	 */
1626
	public static function display_edit_task_form ($blog_id, $task_id) {
1627
		$tbl_blogs_tasks = Database::get_course_table(TABLE_BLOGS_TASKS);
1628
        $course_id = api_get_course_int_id();
1629
1630
		$colors = array('FFFFFF','FFFF99','FFCC99','FF9933','FF6699','CCFF99','CC9966','66FF00', '9966FF', 'CF3F3F', '990033','669933','0033FF','003366','000000');
1631
1632
		$sql = "SELECT blog_id, task_id, title, description, color FROM $tbl_blogs_tasks WHERE c_id = $course_id AND task_id = '".(int)$task_id."'";
1633
		$result = Database::query($sql);
1634
		$task = Database::fetch_array($result);
1635
1636
		// Display
1637
		echo '<form name="edit_task" method="post" action="blog.php?action=manage_tasks&blog_id=' . $blog_id . '">
1638
					<legend>' . get_lang('EditTask') . '</legend>
1639
					<table width="100%" border="0" cellspacing="2">
1640
						<tr>
1641
					   <td align="right">' . get_lang('Title') . ':&nbsp;&nbsp;</td>
1642
					   <td><input name="task_name" type="text" size="70" value="'.Security::remove_XSS($task['title']) . '" /></td>
1643
						</tr>
1644
						<tr>
1645
					   <td align="right">' . get_lang('Description') . ':&nbsp;&nbsp;</td>
1646
					   <td><textarea name="task_description" cols="45">'.Security::remove_XSS($task['description']).'</textarea></td>
1647
						</tr>';
1648
1649
						/* edit by Kevin Van Den Haute ([email protected]) */
1650
						$tbl_tasks_permissions = Database::get_course_table(TABLE_BLOGS_TASKS_PERMISSIONS);
1651
1652
						$sql = " SELECT id, action FROM " . $tbl_tasks_permissions . "
1653
							     WHERE c_id = $course_id AND task_id = '" . (int)$task_id."'";
1654
						$result = Database::query($sql);
1655
1656
						$arrPermissions = array();
1657
1658
						while ($row = Database::fetch_array($result))
1659
							$arrPermissions[] = $row['action'];
1660
1661
						    echo '<tr>';
1662
							echo '<td style="text-align:right; vertical-align:top;">' . get_lang('TaskManager') . ':&nbsp;&nbsp;</td>';
1663
							echo '<td>';
1664
								echo '<table  class="data_table" cellspacing="0" style="border-collapse:collapse; width:446px;">';
1665
									echo '<tr>';
1666
										echo '<th colspan="2" style="width:223px;">' . get_lang('ArticleManager') . '</th>';
1667
										echo '<th width:223px;>' . get_lang('CommentManager') . '</th>';
1668
									echo '</tr>';
1669
									echo '<tr>';
1670
										echo '<th style="width:111px;"><label for="articleDelete">' . get_lang('Delete') . '</label></th>';
1671
										echo '<th style="width:112px;"><label for="articleEdit">' . get_lang('Edit') . '</label></th>';
1672
										echo '<th style="width:223px;"><label for="commentsDelete">' . get_lang('Delete') . '</label></th>';
1673
									echo '</tr>';
1674
									echo '<tr>';
1675
										echo '<td style="text-align:center;"><input ' . ((in_array('article_delete', $arrPermissions)) ? 'checked ' : '') . 'id="articleDelete" name="chkArticleDelete" type="checkbox" /></td>';
1676
										echo '<td style="text-align:center;"><input ' . ((in_array('article_edit', $arrPermissions)) ? 'checked ' : '') . 'id="articleEdit" name="chkArticleEdit" type="checkbox" /></td>';
1677
										echo '<td style="text-align:center;"><input ' . ((in_array('article_comments_delete', $arrPermissions)) ? 'checked ' : '') . 'id="commentsDelete" name="chkCommentsDelete" type="checkbox" /></td>';
1678
									echo '</tr>';
1679
								echo '</table>';
1680
							echo '</td>';
1681
						echo '</tr>';
1682
						/* end of edit */
1683
1684
						echo '<tr>
1685
					   <td align="right">' . get_lang('Color') . ':&nbsp;&nbsp;</td>
1686
					   <td>
1687
					   	<select name="task_color" id="color" style="width: 150px; background-color: #' . $task['color'] . '" onchange="document.getElementById(\'color\').style.backgroundColor=\'#\'+document.getElementById(\'color\').value" onkeypress="document.getElementById(\'color\').style.backgroundColor=\'#\'+document.getElementById(\'color\').value">';
1688
                            foreach ($colors as $color) {
1689
                                $selected = ($color == $task['color']) ? ' selected' : '';
1690
                                $style = 'style="background-color: #' . $color . '"';
1691
                                echo '<option value="' . $color . '" ' . $style . ' ' . $selected . ' >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>';
1692
                            }
1693
		echo '			   </select>
1694
						  </td>
1695
						</tr>
1696
						<tr>
1697
							<td align="right">&nbsp;</td>
1698
							<td><br /><input type="hidden" name="action" value="" />
1699
							<input type="hidden" name="edit_task_submit" value="true" />
1700
							<input type="hidden" name="task_id" value="' . $task['task_id'] . '" />
1701
							<input type="hidden" name="blog_id" value="' . $task['blog_id'] . '" />
1702
							<button class="save" type="submit" name="Submit">' . get_lang('Save') . '</button></td>
1703
						</tr>
1704
					</table>
1705
				</form>';
1706
	}
1707
1708
	/**
1709
	 * @param $blog_id
1710
	 * @return FormValidator
1711
	 */
1712
	public static function getTaskForm($blog_id)
1713
	{
1714
		$tbl_users = Database::get_main_table(TABLE_MAIN_USER);
1715
		$tbl_blogs_rel_user = Database::get_course_table(TABLE_BLOGS_REL_USER);
1716
		$tbl_blogs_tasks = Database::get_course_table(TABLE_BLOGS_TASKS);
1717
		$course_id = api_get_course_int_id();
1718
1719
		// Get users in this blog / make select list of it
1720
		$sql = "SELECT user.user_id, user.firstname, user.lastname, user.username
1721
				FROM $tbl_users user
1722
				INNER JOIN $tbl_blogs_rel_user blogs_rel_user
1723
				ON user.user_id = blogs_rel_user.user_id
1724
				WHERE blogs_rel_user.c_id = $course_id AND blogs_rel_user.blog_id = '".(int)$blog_id."'";
1725
		$result = Database::query($sql);
1726
1727
		$options = array();
1728 View Code Duplication
		while ($user = Database::fetch_array($result)) {
1729
			$options[$user['user_id']] = api_get_person_name($user['firstname'], $user['lastname']);
1730
		}
1731
1732
		// Get tasks in this blog / make select list of it
1733
		$sql = "
1734
			SELECT
1735
				blog_id,
1736
				task_id,
1737
				blog_id,
1738
				title,
1739
				description,
1740
				color,
1741
				system_task
1742
			FROM $tbl_blogs_tasks
1743
			WHERE c_id = $course_id AND blog_id = " . (int)$blog_id . "
1744
			ORDER BY system_task, title";
1745
		$result = Database::query($sql);
1746
1747
		$taskOptions = array();
1748
		while ($task = Database::fetch_array($result)) {
1749
			$taskOptions[$task['task_id']] = stripslashes($task['title']);
1750
		}
1751
1752
		$form = new FormValidator(
1753
			'assign_task',
1754
			'post',
1755
			api_get_path(
1756
				WEB_CODE_PATH
1757
			).'blog/blog.php?action=manage_tasks&blog_id='.$blog_id
1758
		);
1759
1760
		$form->addHeader(get_lang('AssignTask'));
1761
		$form->addSelect('task_user_id', get_lang('SelectUser'), $options);
1762
		$form->addSelect('task_task_id', get_lang('SelectTask'), $taskOptions);
1763
		$form->addDatePicker('task_day', get_lang('SelectTargetDate'));
1764
1765
		$form->addHidden('action', '');
1766
		$form->addButtonSave(get_lang('Ok'));
1767
1768
		return $form;
1769
	}
1770
1771
	/**
1772
	 * Displays assign task form
1773
	 * @author Toon Keppens
1774
	 *
1775
	 */
1776
	public static function display_assign_task_form($blog_id)
1777
	{
1778
		$form = self::getTaskForm($blog_id);
1779
		$form->addHidden('assign_task_submit', 'true');
1780
		$form->display();
1781
		echo '<div style="clear: both; margin-bottom:10px;"></div>';
1782
	}
1783
1784
	/**
1785
	 * Displays assign task form
1786
	 * @author Toon Keppens
1787
	 *
1788
	 */
1789
	public static function display_edit_assigned_task_form($blog_id, $task_id, $user_id)
1790
	{
1791
		$tbl_blogs_tasks_rel_user 	= Database::get_course_table(TABLE_BLOGS_TASKS_REL_USER);
1792
1793
		$course_id = api_get_course_int_id();
1794
1795
		// Get assignd date;
1796
		$sql = "
1797
			SELECT target_date
1798
			FROM $tbl_blogs_tasks_rel_user
1799
			WHERE c_id = $course_id AND
1800
			      blog_id = '".(int)$blog_id."' AND
1801
			      user_id = '".(int)$user_id."' AND
1802
			      task_id = '".(int)$task_id."'";
1803
		$result = Database::query($sql);
1804
		$row = Database::fetch_assoc($result);
1805
1806
		$date = $row['target_date'];
1807
1808
		$defaults = [
1809
			'task_user_id' => $user_id,
1810
			'task_task_id' => $task_id,
1811
			'task_day' => $date
1812
		];
1813
		$form = self::getTaskForm($blog_id);
1814
		$form->addHidden('old_task_id', $task_id);
1815
		$form->addHidden('old_user_id', $user_id);
1816
		$form->addHidden('old_target_date', $date);
1817
		$form->addHidden('assign_task_edit_submit', 'true');
1818
		$form->setDefaults($defaults);
1819
		$form->display();
1820
	}
1821
1822
	/**
1823
	 * Assigns a task to a user in a blog
1824
	 *
1825
	 * @param Integer $blog_id
1826
	 * @param Integer $user_id
1827
	 * @param Integer $task_id
1828
	 * @param Date $target_date
1829
	 */
1830
	public static function assign_task($blog_id, $user_id, $task_id, $target_date)
1831
	{
1832
		$tbl_blogs_tasks_rel_user = Database::get_course_table(TABLE_BLOGS_TASKS_REL_USER);
1833
		$course_id = api_get_course_int_id();
1834
1835
		$sql = "
1836
			SELECT COUNT(*) as 'number'
1837
			FROM " . $tbl_blogs_tasks_rel_user . "
1838
			WHERE c_id = $course_id AND
1839
			blog_id = " . (int)$blog_id . "
1840
			AND	user_id = " . (int)$user_id . "
1841
			AND	task_id = " . (int)$task_id . "
1842
		";
1843
1844
		$result = Database::query($sql);
1845
		$row = Database::fetch_assoc($result);
1846
1847
		if ($row['number'] == 0) {
1848
			$sql = "
1849
				INSERT INTO " . $tbl_blogs_tasks_rel_user . " (
1850
					c_id,
1851
					blog_id,
1852
					user_id,
1853
					task_id,
1854
					target_date
1855
				) VALUES (
1856
					'" . (int)$course_id . "',
1857
					'" . (int)$blog_id . "',
1858
					'" . (int)$user_id . "',
1859
					'" . (int)$task_id . "',
1860
					'" . Database::escape_string($target_date) . "'
1861
				)";
1862
1863
			Database::query($sql);
1864
		}
1865
	}
1866
1867
    /**
1868
     * @param $blog_id
1869
     * @param $user_id
1870
     * @param $task_id
1871
     * @param $target_date
1872
     * @param $old_user_id
1873
     * @param $old_task_id
1874
     * @param $old_target_date
1875
     */
1876
    public static function edit_assigned_task(
1877
        $blog_id,
1878
        $user_id,
1879
        $task_id,
1880
        $target_date,
1881
        $old_user_id,
1882
        $old_task_id,
1883
        $old_target_date
1884
    ) {
1885
		$tbl_blogs_tasks_rel_user = Database::get_course_table(TABLE_BLOGS_TASKS_REL_USER);
1886
1887
		$course_id = api_get_course_int_id();
1888
1889
		$sql = "SELECT COUNT(*) as 'number'
1890
                FROM " . $tbl_blogs_tasks_rel_user . "
1891
                WHERE
1892
                    c_id = $course_id AND
1893
                    blog_id = " . (int)$blog_id . " AND
1894
                    user_id = " . (int)$user_id . " AND
1895
                    task_id = " . (int)$task_id . "
1896
            ";
1897
1898
		$result = Database::query($sql);
1899
		$row = Database::fetch_assoc($result);
1900
1901
		if ($row['number'] == 0 || ($row['number'] != 0 && $task_id == $old_task_id && $user_id == $old_user_id)) {
1902
			$sql = "
1903
				UPDATE " . $tbl_blogs_tasks_rel_user . "
1904
				SET
1905
					user_id = " . (int)$user_id . ",
1906
					task_id = " . (int)$task_id . ",
1907
					target_date = '" . Database::escape_string($target_date) . "'
1908
				WHERE
1909
					c_id = $course_id AND
1910
					blog_id = " . (int)$blog_id . " AND
1911
					user_id = " . (int)$old_user_id . " AND
1912
					task_id = " . (int)$old_task_id . " AND
1913
					target_date = '" . Database::escape_string($old_target_date) . "'
1914
			";
1915
			Database::query($sql);
1916
		}
1917
	}
1918
1919
	/**
1920
	 * Displays a list with posts a user can select to execute his task.
1921
	 *
1922
	 * @param Integer $blog_id
1923
	 * @param unknown_type $task_id
1924
	 */
1925
	public static function display_select_task_post($blog_id, $task_id)
1926
    {
1927
		$tbl_blogs_tasks = Database::get_course_table(TABLE_BLOGS_TASKS);
1928
		$tbl_blogs_posts = Database::get_course_table(TABLE_BLOGS_POSTS);
1929
		$tbl_users = Database::get_main_table(TABLE_MAIN_USER);
1930
		$course_id = api_get_course_int_id();
1931
1932
1933
		$sql = "SELECT title, description FROM $tbl_blogs_tasks
1934
				WHERE task_id = '".(int)$task_id."'
1935
				AND c_id = $course_id";
1936
		$result = Database::query($sql);
1937
		$row = Database::fetch_assoc($result);
1938
		// Get posts and authors
1939
		$sql = "SELECT post.*, user.lastname, user.firstname, user.username
1940
				FROM $tbl_blogs_posts post
1941
				INNER JOIN $tbl_users user ON post.author_id = user.user_id
1942
				WHERE post.blog_id = '".(int)$blog_id."' AND post.c_id = $course_id
1943
				ORDER BY post_id DESC
1944
				LIMIT 0, 100";
1945
		$result = Database::query($sql);
1946
1947
		// Display
1948
		echo '<span class="blogpost_title">' . get_lang('SelectTaskArticle') . ' "' . stripslashes($row['title']) . '"</span>';
1949
		echo '<span style="font-style: italic;"">'.stripslashes($row['description']) . '</span><br><br>';
1950
1951
		if (Database::num_rows($result) > 0) {
1952
			while($blog_post = Database::fetch_array($result)) {
1953
			    $username = api_htmlentities(sprintf(get_lang('LoginX'), $blog_post['username']), ENT_QUOTES);
1954
				echo '<a href="blog.php?action=execute_task&blog_id=' . $blog_id . '&task_id=' . $task_id . '&post_id=' . $blog_post['post_id'] . '#add_comment">'.stripslashes($blog_post['title']) . '</a>, ' . get_lang('WrittenBy') . ' ' . stripslashes(Display::tag('span', api_get_person_name($blog_post['firstname'], $blog_post['lastname']), array('title'=>$username))) . '<br />';
1955
			}
1956
        } else {
1957
            echo get_lang('NoArticles');
1958
        }
1959
	}
1960
1961
	/**
1962
	 * Subscribes a user to a given blog
1963
	 * @author Toon Keppens
1964
	 *
1965
	 * @param Integer $blog_id
1966
	 * @param Integer $user_id
1967
	 */
1968
	public static function set_user_subscribed($blog_id, $user_id)
1969
    {
1970
		// Init
1971
		$tbl_blogs_rel_user = Database::get_course_table(TABLE_BLOGS_REL_USER);
1972
		$tbl_user_permissions = Database::get_course_table(TABLE_PERMISSION_USER);
1973
1974
		$course_id = api_get_course_int_id();
1975
1976
		// Subscribe the user
1977
		$sql = "INSERT INTO $tbl_blogs_rel_user (c_id, blog_id, user_id )
1978
		        VALUES ($course_id, '".(int)$blog_id."', '".(int)$user_id."');";
1979
		Database::query($sql);
1980
1981
		// Give this user basic rights
1982
		$sql = "INSERT INTO $tbl_user_permissions (c_id, user_id,tool,action)
1983
		        VALUES ($course_id, '".(int)$user_id."','BLOG_" . (int)$blog_id."','article_add')";
1984
		Database::query($sql);
1985
1986
        $id = Database::insert_id();
1987
        if ($id) {
1988
            $sql = "UPDATE $tbl_user_permissions SET id = iid WHERE iid = $id";
1989
            Database::query($sql);
1990
        }
1991
1992
		$sql = "INSERT INTO $tbl_user_permissions (c_id, user_id,tool,action)
1993
		        VALUES ($course_id, '".(int)$user_id."','BLOG_" . (int)$blog_id."','article_comments_add')";
1994
		Database::query($sql);
1995
1996
        $id = Database::insert_id();
1997
        if ($id) {
1998
            $sql = "UPDATE $tbl_user_permissions SET id = iid WHERE iid = $id";
1999
            Database::query($sql);
2000
        }
2001
2002
	}
2003
2004
	/**
2005
	 * Unsubscribe a user from a given blog
2006
	 * @author Toon Keppens
2007
	 *
2008
	 * @param Integer $blog_id
2009
	 * @param Integer $user_id
2010
	 */
2011 View Code Duplication
	public static function set_user_unsubscribed($blog_id, $user_id)
2012
    {
2013
		// Init
2014
        $tbl_blogs_rel_user = Database::get_course_table(TABLE_BLOGS_REL_USER);
2015
        $tbl_user_permissions = Database::get_course_table(TABLE_PERMISSION_USER);
2016
2017
		// Unsubscribe the user
2018
		$sql = "DELETE FROM $tbl_blogs_rel_user
2019
		        WHERE blog_id = '".(int)$blog_id."' AND user_id = '".(int)$user_id."'";
2020
		Database::query($sql);
2021
2022
		// Remove this user's permissions.
2023
		$sql = "DELETE FROM $tbl_user_permissions
2024
		        WHERE user_id = '".(int)$user_id."'";
2025
		Database::query($sql);
2026
	}
2027
2028
	/**
2029
	 * Displays the form to register users in a blog (in a course)
2030
	 * The listed users are users subcribed in the course.
2031
	 * @author Toon Keppens
2032
	 *
2033
	 * @param Integer $blog_id
2034
	 *
2035
	 * @return Html Form with sortable table with users to subcribe in a blog, in a course.
2036
	 */
2037
	public static function display_form_user_subscribe($blog_id)
2038
	{
2039
		$_course = api_get_course_info();
2040
		$is_western_name_order = api_is_western_name_order();
2041
		$session_id = api_get_session_id();
2042
		$course_id = $_course['real_id'];
2043
2044
		$currentCourse = $_course['code'];
2045
		$tbl_users 			= Database::get_main_table(TABLE_MAIN_USER);
2046
		$tbl_blogs_rel_user = Database::get_course_table(TABLE_BLOGS_REL_USER);
2047
2048
		echo '<legend>'.get_lang('SubscribeMembers').'</legend>';
2049
2050
		$properties["width"] = "100%";
2051
2052
		// Get blog members' id.
2053
		$sql = "SELECT user.user_id FROM $tbl_users user
2054
				INNER JOIN $tbl_blogs_rel_user blogs_rel_user
2055
				ON user.user_id = blogs_rel_user.user_id
2056
				WHERE blogs_rel_user.c_id = $course_id AND blogs_rel_user.blog_id = '".intval($blog_id)."'";
2057
		$result = Database::query($sql);
2058
2059
		$blog_member_ids = array();
2060
		while($user = Database::fetch_array($result)) {
2061
			$blog_member_ids[] = $user['user_id'];
2062
		}
2063
2064
		// Set table headers
2065
		$column_header[] = array ('', false, '');
2066 View Code Duplication
		if ($is_western_name_order) {
2067
			$column_header[] = array(get_lang('FirstName'), true, '');
2068
			$column_header[] = array(get_lang('LastName'), true, '');
2069
		} else {
2070
			$column_header[] = array(get_lang('LastName'), true, '');
2071
			$column_header[] = array(get_lang('FirstName'), true, '');
2072
		}
2073
		$column_header[] = array(get_lang('Email'), false, '');
2074
		$column_header[] = array(get_lang('Register'), false, '');
2075
2076
        $student_list = CourseManager:: get_student_list_from_course_code(
2077
            $currentCourse,
2078
            false,
2079
            $session_id
2080
        );
2081
		$user_data = array();
2082
2083
		// Add users that are not in this blog to the list.
2084
		foreach ($student_list as $key=>$user) {
2085
			if(isset($user['id_user'])) {
2086
				$user['user_id'] = $user['id_user'];
2087
			}
2088
			if(!in_array($user['user_id'],$blog_member_ids)) {
2089
				$a_infosUser = api_get_user_info($user['user_id']);
2090
				$row = array ();
2091
				$row[] = '<input type="checkbox" name="user[]" value="' . $a_infosUser['user_id'] . '" '.((isset($_GET['selectall']) && $_GET['selectall'] == "subscribe") ? ' checked="checked" ' : '') . '/>';
2092
				$username = api_htmlentities(sprintf(get_lang('LoginX'), $a_infosUser["username"]), ENT_QUOTES);
2093 View Code Duplication
				if ($is_western_name_order) {
2094
					$row[] = $a_infosUser["firstname"];
2095
					$row[] = Display::tag('span', $a_infosUser["lastname"], array('title'=>$username));
2096
				} else {
2097
					$row[] = Display::tag('span', $a_infosUser["lastname"], array('title'=>$username));
2098
					$row[] = $a_infosUser["firstname"];
2099
				}
2100
				$row[] = Display::icon_mailto_link($a_infosUser["email"]);
2101
2102
				//Link to register users
2103 View Code Duplication
				if ($a_infosUser["user_id"] != $_SESSION['_user']['user_id']){
2104
					$row[] = "<a class=\"btn btn-primary \" href=\"" .api_get_self()."?action=manage_members&blog_id=$blog_id&register=yes&user_id=" . $a_infosUser["user_id"]."\">" . get_lang('Register')."</a>";
2105
				} else {
2106
					$row[] = '';
2107
				}
2108
				$user_data[] = $row;
2109
			}
2110
		}
2111
2112
		// Display
2113
		$query_vars['action'] = 'manage_members';
2114
		$query_vars['blog_id'] = $blog_id;
2115
		echo '<form method="post" action="blog.php?action=manage_members&blog_id=' . $blog_id . '">';
2116
			Display::display_sortable_table($column_header, $user_data,null,null,$query_vars);
2117
			$link = '';
2118
			$link .= isset ($_GET['action']) ? 'action=' . Security::remove_XSS($_GET['action']) . '&' : '';
2119
			$link .= "blog_id=$blog_id&";
2120
2121
			echo '<a href="blog.php?' . $link . 'selectall=subscribe">' . get_lang('SelectAll') . '</a> - ';
2122
			echo '<a href="blog.php?' . $link . '">' . get_lang('UnSelectAll') . '</a> ';
2123
			echo get_lang('WithSelected') . ' : ';
2124
			echo '<select name="action">';
2125
			echo '<option value="select_subscribe">' . get_lang('Register') . '</option>';
2126
			echo '</select>';
2127
			echo '<input type="hidden" name="register" value="true" />';
2128
			echo '<button class="save" type="submit">' . get_lang('Ok') . '</button>';
2129
		echo '</form>';
2130
	}
2131
2132
	/**
2133
	 * Displays the form to register users in a blog (in a course)
2134
	 * The listed users are users subcribed in the course.
2135
	 * @author Toon Keppens
2136
	 *
2137
	 * @param Integer $blog_id
2138
	 *
2139
	 * @return Html Form with sortable table with users to unsubcribe from a blog.
2140
	 */
2141
	public static function display_form_user_unsubscribe ($blog_id)
2142
	{
2143
		$_user = api_get_user_info();
2144
		$is_western_name_order = api_is_western_name_order();
2145
2146
		// Init
2147
		$tbl_users = Database::get_main_table(TABLE_MAIN_USER);
2148
		$tbl_blogs_rel_user = Database::get_course_table(TABLE_BLOGS_REL_USER);
2149
2150
		echo '<legend>'.get_lang('UnsubscribeMembers').'</legend>';
2151
2152
		$properties["width"] = "100%";
2153
		//table column titles
2154
		$column_header[] = array ('', false, '');
2155 View Code Duplication
		if ($is_western_name_order) {
2156
			$column_header[] = array (get_lang('FirstName'), true, '');
2157
			$column_header[] = array (get_lang('LastName'), true, '');
2158
		} else {
2159
			$column_header[] = array (get_lang('LastName'), true, '');
2160
			$column_header[] = array (get_lang('FirstName'), true, '');
2161
		}
2162
		$column_header[] = array (get_lang('Email'), false, '');
2163
		$column_header[] = array (get_lang('TaskManager'), true, '');
2164
		$column_header[] = array (get_lang('UnRegister'), false, '');
2165
2166
		$course_id = api_get_course_int_id();
2167
2168
		$sql = "SELECT user.user_id, user.lastname, user.firstname, user.email, user.username
2169
                FROM $tbl_users user INNER JOIN $tbl_blogs_rel_user blogs_rel_user
2170
                ON user.user_id = blogs_rel_user.user_id
2171
                WHERE blogs_rel_user.c_id = $course_id AND  blogs_rel_user.blog_id = '".(int)$blog_id."'";
2172
2173
		if (!($sql_result = Database::query($sql))) {
2174
			return false;
2175
		}
2176
2177
		$user_data = array ();
2178
2179
		while ($myrow = Database::fetch_array($sql_result)) {
2180
			$row = array ();
2181
			$row[] = '<input type="checkbox" name="user[]" value="' . $myrow['user_id'] . '" '.((isset($_GET['selectall']) && $_GET['selectall'] == "unsubscribe") ? ' checked="checked" ' : '') . '/>';
2182
			$username = api_htmlentities(sprintf(get_lang('LoginX'), $myrow["username"]), ENT_QUOTES);
2183 View Code Duplication
			if ($is_western_name_order) {
2184
				$row[] = $myrow["firstname"];
2185
				$row[] = Display::tag('span', $myrow["lastname"], array('title'=>$username));
2186
			} else {
2187
				$row[] = Display::tag('span', $myrow["lastname"], array('title'=>$username));
2188
				$row[] = $myrow["firstname"];
2189
			}
2190
			$row[] = Display::icon_mailto_link($myrow["email"]);
2191
2192
			$sql = "SELECT bt.title task
2193
					FROM " . Database::get_course_table(TABLE_BLOGS_TASKS_REL_USER) . " btu
2194
					INNER JOIN " . Database::get_course_table(TABLE_BLOGS_TASKS) . " bt
2195
					ON btu.task_id = bt.task_id
2196
					WHERE 	btu.c_id 	= $course_id  AND
2197
							bt.c_id 	= $course_id  AND
2198
							btu.blog_id = $blog_id AND
2199
							btu.user_id = " . $myrow['user_id'];
2200
			$sql_res = Database::query($sql);
2201
2202
			$task = '';
2203
2204
			while($r = Database::fetch_array($sql_res)) {
2205
				$task .= stripslashes($r['task']) . ', ';
2206
			}
2207
			//echo $task;
2208
			$task = (api_strlen(trim($task)) != 0) ? api_substr($task, 0, api_strlen($task) - 2) : get_lang('Reader');
0 ignored issues
show
Bug introduced by
It seems like you are loosely comparing api_strlen(trim($task)) of type integer|null to 0; this is ambiguous as not only 0 == 0 is true, but null == 0 is true, too. Consider using a strict comparison ===.
Loading history...
2209
			$row[] = $task;
2210
			//Link to register users
2211
2212 View Code Duplication
			if ($myrow["user_id"] != $_user['user_id']) {
2213
				$row[] = "<a class=\"btn btn-primary\" href=\"" .api_get_self()."?action=manage_members&blog_id=$blog_id&unregister=yes&user_id=" . $myrow['user_id']."\">" . get_lang('UnRegister')."</a>";
2214
			} else {
2215
				$row[] = '';
2216
			}
2217
2218
			$user_data[] = $row;
2219
		}
2220
2221
		$query_vars['action'] = 'manage_members';
2222
		$query_vars['blog_id'] = $blog_id;
2223
		echo '<form method="post" action="blog.php?action=manage_members&blog_id=' . $blog_id . '">';
2224
		Display::display_sortable_table($column_header, $user_data,null,null,$query_vars);
2225
		$link = '';
2226
		$link .= isset ($_GET['action']) ? 'action=' . Security::remove_XSS($_GET['action']). '&' : '';
2227
		$link .= "blog_id=$blog_id&";
2228
2229
		echo '<a href="blog.php?' . $link . 'selectall=unsubscribe">' . get_lang('SelectAll') . '</a> - ';
2230
		echo '<a href="blog.php?' . $link . '">' . get_lang('UnSelectAll') . '</a> ';
2231
		echo get_lang('WithSelected') . ' : ';
2232
		echo '<select name="action">';
2233
		echo '<option value="select_unsubscribe">' . get_lang('UnRegister') . '</option>';
2234
		echo '</select>';
2235
		echo '<input type="hidden" name="unregister" value="true" />';
2236
		echo '<button class="save" type="submit">' . get_lang('Ok') . '</button>';
2237
		echo '</form>';
2238
	}
2239
2240
	/**
2241
	 * Displays a matrix with selectboxes. On the left: users, on top: possible rights.
2242
	 * The blog admin can thus select what a certain user can do in the current blog
2243
	 *
2244
	 * @param Integer $blog_id
2245
	 */
2246
	public static function display_form_user_rights ($blog_id)
2247
    {
2248
		echo '<legend>'.get_lang('RightsManager').'</legend>';
2249
		echo '<br />';
2250
2251
		// Integration of patricks permissions system.
2252
		require_once api_get_path(SYS_CODE_PATH).'permissions/blog_permissions.inc.php';
2253
	}
2254
2255
	/**
2256
	 * Displays the form to create a new post
2257
	 * @author Toon Keppens
2258
	 *
2259
	 * @param Integer $blog_id
2260
	 */
2261
	public static function display_new_comment_form($blog_id, $post_id, $title)
2262
	{
2263
		$form = new FormValidator(
2264
			'add_post',
2265
			'post',
2266
			api_get_path(WEB_CODE_PATH)."blog/blog.php?action=view_post&blog_id=" . intval($blog_id)  . "&post_id=".intval($post_id)."&".api_get_cidreq(),
2267
			null,
2268
			array('enctype' => 'multipart/form-data')
2269
		);
2270
2271
		$header = get_lang('AddNewComment');
2272
		if (isset($_GET['task_id'])) {
2273
			$header = get_lang('ExecuteThisTask');
2274
		}
2275
		$form->addHeader($header);
2276
		$form->addText('title', get_lang('Title'));
2277
2278
		$config = array();
2279
		if (!api_is_allowed_to_edit()) {
2280
			$config['ToolbarSet'] = 'ProjectComment';
2281
		} else {
2282
			$config['ToolbarSet'] = 'ProjectCommentStudent';
2283
		}
2284
		$form->addHtmlEditor('comment', get_lang('Comment'), false, false, $config);
2285
		$form->addFile('user_upload', get_lang('AddAnAttachment'));
2286
2287
		$form->addTextarea('post_file_comment', get_lang('FileComment'));
2288
2289
		$form->addHidden('action', null);
2290
		$form->addHidden('comment_parent_id', 0);
2291
2292
		if (isset($_GET['task_id'])) {
2293
			$form->addHidden('new_task_execution_submit', 'true');
2294
			$form->addHidden('task_id', intval($_GET['task_id']));
2295
		} else {
2296
			$form->addHidden('new_comment_submit', 'true');
2297
		}
2298
		$form->addButton('save', get_lang('Save'));
2299
		$form->display();
2300
	}
2301
2302
2303
	/**
2304
	 * show the calender of the given month
2305
	 * @author Patrick Cool
2306
	 * @author Toon Keppens
2307
	 *
2308
	 * @param Array $blogitems an array containing all the blog items for the given month
0 ignored issues
show
Bug introduced by
There is no parameter named $blogitems. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
2309
	 * @param Integer $month: the integer value of the month we are viewing
0 ignored issues
show
Documentation introduced by
There is no parameter named $month:. Did you maybe mean $month?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. It has, however, found a similar but not annotated parameter which might be a good fit.

Consider the following example. The parameter $ireland is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $ireland
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was changed, but the annotation was not.

Loading history...
2310
	 * @param Integer $year: the 4-digit year indication e.g. 2005
0 ignored issues
show
Bug introduced by
There is no parameter named $year:. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
2311
	 * @param String $monthName: the language variable for the mont name
0 ignored issues
show
Bug introduced by
There is no parameter named $monthName:. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
2312
	 *
2313
	 * @return html code
2314
	*/
2315
	public static function display_minimonthcalendar($month, $year, $blog_id)
2316
	{
2317
		// Init
2318
		$_user = api_get_user_info();
2319
		global $DaysShort;
2320
		global $MonthsLong;
2321
2322
		$posts = array();
2323
		$tasks = array();
2324
2325
		$tbl_users = Database::get_main_table(TABLE_MAIN_USER);
2326
		$tbl_blogs_posts = Database::get_course_table(TABLE_BLOGS_POSTS);
2327
		$tbl_blogs_tasks = Database::get_course_table(TABLE_BLOGS_TASKS);
2328
		$tbl_blogs_tasks_rel_user = Database::get_course_table(TABLE_BLOGS_TASKS_REL_USER);
2329
		$tbl_blogs = Database::get_course_table(TABLE_BLOGS);
2330
2331
		$course_id = api_get_course_int_id();
2332
2333
		//Handle leap year
2334
		$numberofdays = array (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
2335
2336 View Code Duplication
		if(($year % 400 == 0) or ($year % 4 == 0 and $year % 100 <> 0))
2337
			$numberofdays[2] = 29;
2338
2339
		//Get the first day of the month
2340
		$dayone = getdate(mktime(0, 0, 0, $month, 1, $year));
2341
		$monthName = $MonthsLong[$month-1];
2342
2343
		//Start the week on monday
2344
		$startdayofweek = $dayone['wday'] <> 0 ? ($dayone['wday'] - 1) : 6;
2345
		$blogId = isset($_GET['blog_id']) ? intval($_GET['blog_id']) : null;
2346
		$filter = isset($_GET['filter']) ? Security::remove_XSS($_GET['filter']) : null;
2347
		$backwardsURL = api_get_self()."?blog_id=" . $blogId."&filter=" . $filter."&month=". ($month == 1 ? 12 : $month -1)."&year=". ($month == 1 ? $year -1 : $year);
2348
		$forewardsURL = api_get_self()."?blog_id=" . $blogId."&filter=" . $filter."&month=". ($month == 12 ? 1 : $month +1)."&year=". ($month == 12 ? $year +1 : $year);
2349
2350
		// Get posts for this month
2351
		$sql = "SELECT post.*, DAYOFMONTH(date_creation) as post_day, user.lastname, user.firstname
2352
				FROM $tbl_blogs_posts post
2353
				INNER JOIN $tbl_users user
2354
				ON post.author_id = user.user_id
2355
				WHERE
2356
					post.c_id = $course_id AND
2357
					post.blog_id = '".(int)$blog_id."' AND
2358
					MONTH(date_creation) = '".(int)$month."' AND
2359
					YEAR(date_creation) = '".(int)$year."'
2360
				ORDER BY date_creation";
2361
		$result = Database::query($sql);
2362
2363
		// We will create an array of days on which there are posts.
2364 View Code Duplication
		if( Database::num_rows($result) > 0) {
2365
			while($blog_post = Database::fetch_array($result)) {
2366
				// If the day of this post is not yet in the array, add it.
2367
				if (!in_array($blog_post['post_day'], $posts))
2368
					$posts[] = $blog_post['post_day'];
2369
			}
2370
		}
2371
2372
		// Get tasks for this month
2373
		if ($_user['user_id']) {
2374
			$sql = " SELECT task_rel_user.*,  DAYOFMONTH(target_date) as task_day, task.title, blog.blog_name
2375
				FROM $tbl_blogs_tasks_rel_user task_rel_user
2376
				INNER JOIN $tbl_blogs_tasks task ON task_rel_user.task_id = task.task_id
2377
				INNER JOIN $tbl_blogs blog ON task_rel_user.blog_id = blog.blog_id
2378
				WHERE
2379
					task_rel_user.c_id = $course_id AND
2380
					task.c_id = $course_id AND
2381
					blog.c_id = $course_id AND
2382
					task_rel_user.user_id = '".(int)$_user['user_id']."' AND
2383
					MONTH(target_date) = '".(int)$month."' AND
2384
					YEAR(target_date) = '".(int)$year."'
2385
				ORDER BY target_date ASC";
2386
			$result = Database::query($sql);
2387
2388
			if (Database::num_rows($result) > 0) {
2389
				while ($mytask = Database::fetch_array($result)) {
2390
					$tasks[$mytask['task_day']][$mytask['task_id']]['task_id'] = $mytask['task_id'];
2391
					$tasks[$mytask['task_day']][$mytask['task_id']]['title'] = $mytask['title'];
2392
					$tasks[$mytask['task_day']][$mytask['task_id']]['blog_id'] = $mytask['blog_id'];
2393
					$tasks[$mytask['task_day']][$mytask['task_id']]['blog_name'] = $mytask['blog_name'];
2394
					$tasks[$mytask['task_day']][$mytask['task_id']]['day'] = $mytask['task_day'];
2395
				}
2396
			}
2397
		}
2398
2399
		echo 	'<table id="smallcalendar" class="table table-responsive">',
2400
				"<tr id=\"title\">",
2401
				"<th width=\"10%\"><a href=\"", $backwardsURL, "\">&laquo;</a></th>",
2402
				"<th align=\"center\" width=\"80%\" colspan=\"5\">", $monthName, " ", $year, "</th>",
2403
				"<th width=\"10%\" align=\"right\"><a href=\"", $forewardsURL, "\">&raquo;</a></th>", "</tr>";
2404
2405
		echo "<tr>";
2406
2407 View Code Duplication
		for($ii = 1; $ii < 8; $ii ++)
2408
			echo "<td class=\"weekdays\">", $DaysShort[$ii % 7], "</td>";
2409
2410
		echo "</tr>";
2411
2412
		$curday = -1;
2413
		$today = getdate();
2414
2415
		while ($curday <= $numberofdays[$month]) {
2416
			echo "<tr>";
2417
			for ($ii = 0; $ii < 7; $ii ++) {
2418
				if (($curday == -1) && ($ii == $startdayofweek))
2419
					$curday = 1;
2420
2421
			 	if (($curday > 0) && ($curday <= $numberofdays[$month])) {
2422
					$bgcolor = $ii < 5 ? $class="class=\"days_week\"" : $class="class=\"days_weekend\"";
2423
					$dayheader = "$curday";
2424
2425 View Code Duplication
					if(($curday == $today['mday']) && ($year == $today['year']) && ($month == $today['mon'])) {
2426
						$dayheader = "$curday";
2427
						$class = "class=\"days_today\"";
2428
					}
2429
2430
					echo "<td " . $class.">";
2431
2432
					// If there are posts on this day, create a filter link.
2433
					if(in_array($curday, $posts))
2434
						echo '<a href="blog.php?blog_id=' . $blog_id . '&filter=' . $year . '-' . $month . '-' . $curday . '&month=' . $month . '&year=' . $year . '" title="' . get_lang('ViewPostsOfThisDay') . '">' . $curday . '</a>';
2435
					else
2436
						echo $dayheader;
2437
2438
					if (count($tasks) > 0) {
2439
						if (isset($tasks[$curday]) && is_array($tasks[$curday])) {
2440
							// Add tasks to calendar
2441
							foreach ($tasks[$curday] as $task) {
2442
								echo '<a href="blog.php?action=execute_task&blog_id=' . $task['blog_id'] . '&task_id='.stripslashes($task['task_id']) . '" title="' . $task['title'] . ' : ' . get_lang('InBlog') . ' : ' . $task['blog_name'] . ' - ' . get_lang('ExecuteThisTask') . '">';
2443
								echo Display::return_icon('blog_task.gif', get_lang('ExecuteThisTask'));
2444
                                echo '</a>';
2445
							}
2446
						}
2447
					}
2448
2449
					echo "</td>";
2450
					$curday ++;
2451
				} else
2452
					echo "<td>&nbsp;</td>";
2453
			}
2454
			echo "</tr>";
2455
		}
2456
		echo "</table>";
2457
	}
2458
2459
	/**
2460
	 * Blog admin | Display the form to add a new blog.
2461
	 *
2462
	 */
2463
	public static function display_new_blog_form()
2464
	{
2465
        $form = new FormValidator('add_blog', 'post', 'blog_admin.php?action=add');
2466
        $form->addElement('header', get_lang('AddBlog'));
2467
        $form->addElement('text', 'blog_name', get_lang('Title'));
2468
        $form->addElement('textarea', 'blog_subtitle', get_lang('SubTitle'));
2469
2470
        $form->addElement('hidden', 'new_blog_submit', 'true');
2471
        $form->addButtonSave(get_lang('SaveProject'));
2472
2473
        $defaults = array(
2474
			'blog_name' => isset($_POST['blog_name']) ? Security::remove_XSS($_POST['blog_name']) : null,
2475
        	'blog_subtitle' => isset($_POST['blog_subtitle']) ? Security::remove_XSS($_POST['blog_subtitle']) : null
2476
		);
2477
        $form->setDefaults($defaults);
2478
        $form->display();
2479
	}
2480
2481
	/**
2482
	 * Blog admin | Display the form to edit a blog.
2483
	 *
2484
	 */
2485
	public static function display_edit_blog_form($blog_id)
2486
	{
2487
	    $course_id = api_get_course_int_id();
2488
		$blog_id= intval($blog_id);
2489
		$tbl_blogs = Database::get_course_table(TABLE_BLOGS);
2490
2491
		$sql = "SELECT blog_id, blog_name, blog_subtitle
2492
		        FROM $tbl_blogs
2493
		        WHERE c_id = $course_id AND blog_id = '".$blog_id."'";
2494
		$result = Database::query($sql);
2495
		$blog = Database::fetch_array($result);
2496
2497
		// the form contained errors but we do not want to lose the changes the user already did
2498
		if ($_POST) {
2499
			$blog['blog_name'] = Security::remove_XSS($_POST['blog_name']);
2500
			$blog['blog_subtitle'] = Security::remove_XSS($_POST['blog_subtitle']);
2501
		}
2502
2503
        $form = new FormValidator('edit_blog', 'post','blog_admin.php?action=edit&blog_id='.intval($_GET['blog_id']));
2504
        $form->addElement('header', get_lang('EditBlog'));
2505
        $form->addElement('text', 'blog_name', get_lang('Title'));
2506
        $form->addElement('textarea', 'blog_subtitle', get_lang('SubTitle'));
2507
2508
        $form->addElement('hidden', 'edit_blog_submit', 'true');
2509
        $form->addElement('hidden', 'blog_id', $blog['blog_id']);
2510
        $form->addButtonSave(get_lang('Save'));
2511
2512
        $defaults = array();
2513
        $defaults['blog_name'] = $blog['blog_name'];
2514
        $defaults['blog_subtitle'] = $blog['blog_subtitle'];
2515
        $form->setDefaults($defaults);
2516
        $form->display();
2517
	}
2518
2519
	/**
2520
	 * Blog admin | Returns table with blogs in this course
2521
	 */
2522
	public static function display_blog_list()
2523
    {
2524
		global $charset;
2525
		$_user = api_get_user_info();
2526
        $course_id = api_get_course_int_id();
2527
2528
		$tbl_blogs = Database::get_course_table(TABLE_BLOGS);
2529
2530
		//condition for the session
2531
		$session_id = api_get_session_id();
2532
2533
		$sql = "SELECT blog_name, blog_subtitle, visibility, blog_id, session_id
2534
				FROM $tbl_blogs WHERE c_id = $course_id
2535
				ORDER BY date_creation DESC";
2536
		$result = Database::query($sql);
2537
		$list_info = array();
2538
		if (Database::num_rows($result)) {
2539
			while ($row_project=Database::fetch_row($result)) {
2540
				$list_info[]=$row_project;
2541
			}
2542
		}
2543
2544
		$list_content_blog = array();
2545
		$list_body_blog = array();
2546
2547
		if (is_array($list_info)) {
2548
			foreach ($list_info as $key => $info_log) {
2549
				// Validation when belongs to a session
2550
				$session_img = api_get_session_image($info_log[4], $_user['status']);
2551
2552
				$url_start_blog = 'blog.php' ."?". "blog_id=".$info_log[3]. "&".api_get_cidreq();
2553
				$title = $info_log[0];
2554
                        $image = Display::return_icon('blog.png', $title);
2555
    			$list_name = '<div style="float: left; width: 35px; height: 22px;"><a href="'.$url_start_blog.'">' . $image . '</a></div><a href="'.$url_start_blog.'">' .$title. '</a>' . $session_img;
2556
2557
				$list_body_blog[] = $list_name;
2558
				$list_body_blog[] = $info_log[1];
2559
2560
				$visibility_icon=($info_log[2]==0) ? 'invisible' : 'visible';
2561
				$visibility_info=($info_log[2]==0) ? 'Visible' : 'Invisible';
2562
			 	$my_image = '<a href="' .api_get_self(). '?action=edit&blog_id=' . $info_log[3] . '">';
2563
                                $my_image.= Display::return_icon('edit.png', get_lang('EditBlog'));
2564
2565
				$my_image.= "</a>";
2566
				$my_image.= '<a href="' .api_get_self(). '?action=delete&blog_id=' . $info_log[3] . '" ';
2567
				$my_image.= 'onclick="javascript:if(!confirm(\''.addslashes(api_htmlentities(get_lang("ConfirmYourChoice"),ENT_QUOTES,$charset)). '\')) return false;" >';
2568
                                $my_image.= Display::return_icon('delete.png', get_lang('DeleteBlog'));
2569
2570
				$my_image.= "</a>";
2571
				$my_image.= '<a href="' .api_get_self(). '?action=visibility&blog_id=' . $info_log[3] . '">';
2572
                                $my_image.= Display::return_icon($visibility_icon . '.gif', get_lang($visibility_info));
2573
2574
				$my_image.= "</a>";
2575
				$list_body_blog[]=$my_image;
2576
				$list_content_blog[]=$list_body_blog;
2577
				$list_body_blog = array();
2578
			}
2579
2580
			$table = new SortableTableFromArrayConfig($list_content_blog, 1,20,'project');
2581
			$table->set_header(0, get_lang('Title'));
2582
			$table->set_header(1, get_lang('SubTitle'));
2583
			$table->set_header(2, get_lang('Modify'));
2584
			$table->display();
2585
		}
2586
	}
2587
}
2588
2589
/**
2590
 *
2591
 * END CLASS BLOG
2592
 *
2593
 */
2594
2595
/**
2596
 * Show a list with all the attachments according the parameter's
2597
 * @param the blog's id
2598
 * @param the post's id
2599
 * @param the comment's id
2600
 * @return array with the post info according the parameters
2601
 * @author Julio Montoya Dokeos
2602
 * @version avril 2008, dokeos 1.8.5
2603
 */
2604
function get_blog_attachment($blog_id, $post_id=null,$comment_id=null)
2605
{
2606
	$blog_table_attachment = Database::get_course_table(TABLE_BLOGS_ATTACHMENT);
2607
2608
	$blog_id = intval($blog_id);
2609
	$comment_id = intval($comment_id);
2610
	$post_id = intval($post_id);
2611
	$row=array();
2612
	$where='';
2613
	if (!empty ($post_id) && is_numeric($post_id)) {
2614
		$where.=' AND post_id ="'.$post_id.'" ';
2615
	}
2616
2617 View Code Duplication
	if (!empty ($comment_id) && is_numeric($comment_id)) {
2618
		if (!empty ($post_id)) {
2619
			$where.= ' AND ';
2620
		}
2621
		$where.=' comment_id ="'.$comment_id.'" ';
2622
	}
2623
2624
    $course_id = api_get_course_int_id();
2625
2626
	$sql = 'SELECT path, filename, comment FROM '. $blog_table_attachment.'
2627
	        WHERE c_id = '.$course_id.' AND blog_id ="'.intval($blog_id).'"  '.$where;
2628
2629
	$result=Database::query($sql);
2630
	if (Database::num_rows($result)!=0) {
2631
		$row=Database::fetch_array($result);
2632
	}
2633
	return $row;
2634
}
2635
2636
/**
2637
 * Delete the all the attachments according the parameters.
2638
 * @param the blog's id
2639
 * @param the post's id
2640
 * @param the comment's id
2641
 * @author Julio Montoya Dokeos
2642
 * @version avril 2008, dokeos 1.8.5
2643
 */
2644
2645
function delete_all_blog_attachment($blog_id,$post_id=null,$comment_id=null)
2646
{
2647
	$_course = api_get_course_info();
2648
	$blog_table_attachment = Database::get_course_table(TABLE_BLOGS_ATTACHMENT);
2649
	$blog_id = intval($blog_id);
2650
	$comment_id = intval($comment_id);
2651
	$post_id = intval($post_id);
2652
2653
    $course_id = api_get_course_int_id();
2654
	$where = null;
2655
2656
	// delete files in DB
2657
    if (!empty ($post_id) && is_numeric($post_id)) {
2658
        $where .= ' AND post_id ="'.$post_id.'" ';
2659
    }
2660
2661 View Code Duplication
    if (!empty ($comment_id) && is_numeric($comment_id)) {
2662
        if (!empty ($post_id)) {
2663
            $where .= ' AND ';
2664
        }
2665
        $where .= ' comment_id ="'.$comment_id.'" ';
2666
    }
2667
2668
	// delete all files in directory
2669
	$courseDir   = $_course['path'].'/upload/blog';
2670
	$sys_course_path = api_get_path(SYS_COURSE_PATH);
2671
	$updir = $sys_course_path.$courseDir;
2672
2673
	$sql = 'SELECT path FROM '.$blog_table_attachment.'
2674
	        WHERE c_id = '.$course_id.' AND blog_id ="'.intval($blog_id).'"  '.$where;
2675
	$result=Database::query($sql);
2676
2677
	while ($row=Database::fetch_row($result)) {
2678
		$file=$updir.'/'.$row[0];
2679
		if (Security::check_abs_path($file,$updir) )
2680
		{
2681
			@ unlink($file);
2682
		}
2683
	}
2684
	$sql = 'DELETE FROM '. $blog_table_attachment.'
2685
	        WHERE c_id = '.$course_id.' AND  blog_id ="'.intval($blog_id).'"  '.$where;
2686
	Database::query($sql);
2687
}
2688
2689
/**
2690
 * Gets all the post from a given user id
2691
 * @param string db course name
2692
 * @param int user id
2693
 */
2694
function get_blog_post_from_user($course_code, $user_id)
2695
{
2696
	$tbl_blogs 		= Database::get_course_table(TABLE_BLOGS);
2697
	$tbl_blog_post 	= Database::get_course_table(TABLE_BLOGS_POSTS);
2698
	$course_info 	= api_get_course_info($course_code);
2699
	$course_id 		= $course_info['real_id'];
2700
2701
	$sql = "SELECT DISTINCT blog.blog_id, post_id, title, full_text, post.date_creation
2702
			FROM $tbl_blogs blog
2703
			INNER JOIN  $tbl_blog_post post
2704
			ON (blog.blog_id = post.blog_id)
2705
			WHERE
2706
				blog.c_id = $course_id AND
2707
				post.c_id = $course_id AND
2708
				author_id =  $user_id AND visibility = 1
2709
			ORDER BY post.date_creation DESC ";
2710
	$result = Database::query($sql);
2711
	$return_data = '';
2712
2713
	if (Database::num_rows($result)!=0) {
2714
		while ($row=Database::fetch_array($result)) {
2715
			$return_data.=  '<div class="clear"></div><br />';
2716
			$return_data.=  '<div class="actions" style="margin-left:5px;margin-right:5px;">'.Display::return_icon('blog_article.png',get_lang('BlogPosts')).' '.$row['title'].'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<div style="float:right;margin-top:-18px"><a href="../blog/blog.php?blog_id='.$row['blog_id'].'&gidReq=&cidReq='.$my_course_id.' " >'.get_lang('SeeBlog').'</a></div></div>';
0 ignored issues
show
Bug introduced by
The variable $my_course_id does not exist. Did you mean $course_id?

This check looks for variables that are accessed but have not been defined. It raises an issue if it finds another variable that has a similar name.

The variable may have been renamed without also renaming all references.

Loading history...
2717
			$return_data.=  '<br / >';
2718
			$return_data.= $row['full_text'];
2719
			$return_data.= '<br /><br />';
2720
		}
2721
	}
2722
	return $return_data;
2723
}
2724
2725
/**
2726
 * Gets all the post comments from a given user id
2727
 * @param string db course name
2728
 * @param int user id
2729
 */
2730
function get_blog_comment_from_user($course_code, $user_id)
2731
{
2732
    $tbl_blogs = Database::get_course_table(TABLE_BLOGS);
2733
    $tbl_blog_comment = Database::get_course_table(TABLE_BLOGS_COMMENTS);
2734
    $user_id = intval($user_id);
2735
2736
    $course_info = api_get_course_info($course_code);
2737
    $course_id = $course_info['real_id'];
2738
2739
	$sql = "SELECT DISTINCT blog.blog_id, comment_id, title, comment, comment.date_creation
2740
			FROM $tbl_blogs blog INNER JOIN  $tbl_blog_comment comment
2741
			ON (blog.blog_id = comment.blog_id)
2742
			WHERE 	blog.c_id = $course_id AND
2743
					comment.c_id = $course_id AND
2744
					author_id =  $user_id AND
2745
					visibility = 1
2746
			ORDER BY blog_name";
2747
	$result = Database::query($sql);
2748
	$return_data = '';
2749
	if (Database::num_rows($result)!=0) {
2750
		while ($row=Database::fetch_array($result)) {
2751
			$return_data.=  '<div class="clear"></div><br />';
2752
			$return_data.=  '<div class="actions" style="margin-left:5px;margin-right:5px;">'.$row['title'].'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<div style="float:right;margin-top:-18px"><a href="../blog/blog.php?blog_id='.$row['blog_id'].'&gidReq=&cidReq='.Security::remove_XSS($course_code).' " >'.get_lang('SeeBlog').'</a></div></div>';
2753
			$return_data.=  '<br / >';
2754
			//$return_data.=  '<strong>'.$row['title'].'</strong>'; echo '<br>';*/
2755
			$return_data.=  $row['comment'];
2756
			$return_data.=  '<br />';
2757
		}
2758
	}
2759
	return $return_data;
2760
}
2761
2762