qa-event-updates.php 5.61 KB
Newer Older
Scott committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
<?php
/*
	Question2Answer by Gideon Greenspan and contributors
	http://www.question2answer.org/

	Description: Event module for maintaining events tables


	This program is free software; you can redistribute it and/or
	modify it under the terms of the GNU General Public License
	as published by the Free Software Foundation; either version 2
	of the License, or (at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	More about this license: http://www.question2answer.org/license.php
*/

Scott committed
22 23 24 25 26 27
class qa_event_updates
{
	public function process_event($event, $userid, $handle, $cookieid, $params)
	{
		if (@$params['silent']) // don't create updates about silent edits, and possibly other silent events in future
			return;
Scott committed
28

Scott committed
29 30
		require_once QA_INCLUDE_DIR . 'db/events.php';
		require_once QA_INCLUDE_DIR . 'app/events.php';
Scott committed
31

Scott committed
32 33 34 35
		switch ($event) {
			case 'q_post':
				if (isset($params['parent'])) // question is following an answer
					qa_create_event_for_q_user($params['parent']['parentid'], $params['postid'], QA_UPDATE_FOLLOWS, $userid, $params['parent']['userid']);
Scott committed
36

Scott committed
37 38 39 40
				qa_create_event_for_q_user($params['postid'], $params['postid'], null, $userid);
				qa_create_event_for_tags($params['tags'], $params['postid'], null, $userid);
				qa_create_event_for_category($params['categoryid'], $params['postid'], null, $userid);
				break;
Scott committed
41 42


Scott committed
43 44 45
			case 'a_post':
				qa_create_event_for_q_user($params['parentid'], $params['postid'], null, $userid, $params['parent']['userid']);
				break;
Scott committed
46 47


Scott committed
48
			case 'c_post':
Scott committed
49
				$keyuserids = array();
Scott committed
50

Scott committed
51
				foreach ($params['thread'] as $comment) // previous comments in thread (but not author of parent again)
Scott committed
52
				{
Scott committed
53
					if (isset($comment['userid']))
Scott committed
54 55
						$keyuserids[$comment['userid']] = true;
				}
Scott committed
56

Scott committed
57
				foreach ($keyuserids as $keyuserid => $dummy) {
Scott committed
58 59
					if ($keyuserid != $userid)
						qa_db_event_create_not_entity($keyuserid, $params['questionid'], $params['postid'], QA_UPDATE_FOLLOWS, $userid);
Scott committed
60
				}
Scott committed
61

Scott committed
62
				switch ($params['parent']['basetype']) {
Scott committed
63
					case 'Q':
Scott committed
64
						$updatetype = QA_UPDATE_C_FOR_Q;
Scott committed
65
						break;
Scott committed
66

Scott committed
67
					case 'A':
Scott committed
68
						$updatetype = QA_UPDATE_C_FOR_A;
Scott committed
69
						break;
Scott committed
70

Scott committed
71
					default:
Scott committed
72
						$updatetype = null;
Scott committed
73 74
						break;
				}
Scott committed
75

Scott committed
76
				// give precedence to 'your comment followed' rather than 'your Q/A commented' if both are true
Scott committed
77 78 79
				qa_create_event_for_q_user($params['questionid'], $params['postid'], $updatetype, $userid,
					@$keyuserids[$params['parent']['userid']] ? null : $params['parent']['userid']);
				break;
Scott committed
80 81


Scott committed
82 83
			case 'q_edit':
				if ($params['titlechanged'] || $params['contentchanged'])
Scott committed
84
					$updatetype = QA_UPDATE_CONTENT;
Scott committed
85
				elseif ($params['tagschanged'])
Scott committed
86
					$updatetype = QA_UPDATE_TAGS;
Scott committed
87
				else
Scott committed
88
					$updatetype = null;
Scott committed
89

Scott committed
90 91
				if (isset($updatetype)) {
					qa_create_event_for_q_user($params['postid'], $params['postid'], $updatetype, $userid, $params['oldquestion']['userid']);
Scott committed
92

Scott committed
93 94 95 96
					if ($params['tagschanged'])
						qa_create_event_for_tags($params['tags'], $params['postid'], QA_UPDATE_TAGS, $userid);
				}
				break;
Scott committed
97 98


Scott committed
99 100 101
			case 'a_select':
				qa_create_event_for_q_user($params['parentid'], $params['postid'], QA_UPDATE_SELECTED, $userid, $params['answer']['userid']);
				break;
Scott committed
102 103


Scott committed
104 105 106 107
			case 'q_reopen':
			case 'q_close':
				qa_create_event_for_q_user($params['postid'], $params['postid'], QA_UPDATE_CLOSED, $userid, $params['oldquestion']['userid']);
				break;
Scott committed
108 109


Scott committed
110 111 112 113
			case 'q_hide':
				if (isset($params['oldquestion']['userid']))
					qa_db_event_create_not_entity($params['oldquestion']['userid'], $params['postid'], $params['postid'], QA_UPDATE_VISIBLE, $userid);
				break;
Scott committed
114 115


Scott committed
116 117 118
			case 'q_reshow':
				qa_create_event_for_q_user($params['postid'], $params['postid'], QA_UPDATE_VISIBLE, $userid, $params['oldquestion']['userid']);
				break;
Scott committed
119 120


Scott committed
121 122 123 124
			case 'q_move':
				qa_create_event_for_q_user($params['postid'], $params['postid'], QA_UPDATE_CATEGORY, $userid, $params['oldquestion']['userid']);
				qa_create_event_for_category($params['categoryid'], $params['postid'], QA_UPDATE_CATEGORY, $userid);
				break;
Scott committed
125 126


Scott committed
127 128 129 130
			case 'a_edit':
				if ($params['contentchanged'])
					qa_create_event_for_q_user($params['parentid'], $params['postid'], QA_UPDATE_CONTENT, $userid, $params['oldanswer']['userid']);
				break;
Scott committed
131 132


Scott committed
133 134 135 136
			case 'a_hide':
				if (isset($params['oldanswer']['userid']))
					qa_db_event_create_not_entity($params['oldanswer']['userid'], $params['parentid'], $params['postid'], QA_UPDATE_VISIBLE, $userid);
				break;
Scott committed
137 138


Scott committed
139 140 141
			case 'a_reshow':
				qa_create_event_for_q_user($params['parentid'], $params['postid'], QA_UPDATE_VISIBLE, $userid, $params['oldanswer']['userid']);
				break;
Scott committed
142 143


Scott committed
144 145 146 147
			case 'c_edit':
				if ($params['contentchanged'])
					qa_create_event_for_q_user($params['questionid'], $params['postid'], QA_UPDATE_CONTENT, $userid, $params['oldcomment']['userid']);
				break;
Scott committed
148 149


Scott committed
150 151 152 153 154 155
			case 'a_to_c':
				if ($params['contentchanged'])
					qa_create_event_for_q_user($params['questionid'], $params['postid'], QA_UPDATE_CONTENT, $userid, $params['oldanswer']['userid']);
				else
					qa_create_event_for_q_user($params['questionid'], $params['postid'], QA_UPDATE_TYPE, $userid, $params['oldanswer']['userid']);
				break;
Scott committed
156 157


Scott committed
158 159 160 161
			case 'c_hide':
				if (isset($params['oldcomment']['userid']))
					qa_db_event_create_not_entity($params['oldcomment']['userid'], $params['questionid'], $params['postid'], QA_UPDATE_VISIBLE, $userid);
				break;
Scott committed
162 163


Scott committed
164 165 166
			case 'c_reshow':
				qa_create_event_for_q_user($params['questionid'], $params['postid'], QA_UPDATE_VISIBLE, $userid, $params['oldcomment']['userid']);
				break;
Scott committed
167 168
		}
	}
Scott committed
169
}