1
+ <?php
2
+ function __compareCreated ($ a , $ b )
3
+ {
4
+ $ a = strtotime ($ a ['lastPost ' ]['created ' ]);
5
+ $ b = strtotime ($ b ['lastPost ' ]['created ' ]);
6
+
7
+ if ($ a == $ b )
8
+ return 0 ;
9
+
10
+ return ($ a > $ b ) ? 1 : -1 ;
11
+ }
12
+
13
+ function __compareNumber ($ a , $ b )
14
+ {
15
+ $ a = $ a ['number_posts ' ];
16
+ $ b = $ b ['number_posts ' ];
17
+
18
+ if ($ a == $ b )
19
+ return 0 ;
20
+
21
+ return ($ a > $ b ) ? 1 : -1 ;
22
+ }
23
+
24
+ class ForumThread extends ForumsAppModel
25
+ {
26
+ var $ name = 'ForumThread ' ;
27
+ var $ belongsTo = array ('ForumForum ' => array ('className ' => 'Forums.ForumForum ' ), 'User ' => array ('fields ' => array ("id " , "username " )));
28
+ var $ hasMany = array ('ForumPost ' => array (
29
+ 'className ' => 'Forums.ForumPost ' ,
30
+ 'dependent ' => true
31
+ ),
32
+ 'ForumUnreadPost ' => array (
33
+ 'className ' => 'Forums.ForumUnreadPost ' ,
34
+ 'dependent ' => true
35
+ ),
36
+ 'ForumSubscriber ' => array (
37
+ 'className ' => 'Forums.ForumSubscriber ' ,
38
+ 'dependent ' => true
39
+ ));
40
+ var $ actsAs = array ('Sluggable ' );
41
+
42
+ function __configureThreads ($ threads )
43
+ {
44
+ $ returnData = array ();
45
+ foreach ($ threads as $ thread )
46
+ {
47
+ $ returnThread = array ();
48
+
49
+ $ returnThread ['title ' ] = $ thread ['ForumThread ' ]['title ' ];
50
+ $ returnThread ['slug ' ] = $ thread ['ForumThread ' ]['slug ' ];
51
+ $ returnThread ['description ' ] = $ thread ['ForumThread ' ]['description ' ];
52
+ $ returnThread ['views ' ] = $ thread ['ForumThread ' ]['views ' ];
53
+ $ returnThread ['number_posts ' ] = $ this ->ForumPost ->find ('count ' , array ('contain ' => false , 'conditions ' => array ('ForumPost.forum_thread_id ' => $ thread ['ForumThread ' ]['id ' ])));
54
+ $ returnThread ['unreadPost ' ] = isset ($ thread ['ForumUnreadPost ' ][0 ]['forum_thread_id ' ]) ? 1 : 0 ;
55
+ $ returnThread ['type ' ] = $ thread ['ForumThread ' ]['thread_type ' ];
56
+ $ returnThread ['locked ' ] = $ thread ['ForumThread ' ]['locked ' ];
57
+ $ returnThread ['userPost ' ] = $ thread ['User ' ];
58
+ $ returnThread ['lastPost ' ] = $ thread ['ForumPost ' ][0 ];
59
+
60
+ $ returnData [] = $ returnThread ;
61
+ }
62
+
63
+ return $ returnData ;
64
+ }
65
+
66
+ function findThreads ($ forumId , $ userId , $ type = 'ANNOUNCEMENT ' )
67
+ {
68
+ $ returnData = array ();
69
+
70
+ $ this ->recursive = -1 ;
71
+
72
+ $ threads = $ this ->find ('all ' , array ('conditions ' => array ('ForumThread.thread_type ' => $ type , 'ForumThread.forum_forum_id ' => $ forumId ),
73
+ 'contain ' => array ('User ' ,
74
+ 'ForumPost ' => array ('User ' , 'order ' => 'ForumPost.created DESC ' , 'limit ' => 1 ),
75
+ 'ForumUnreadPost ' => array ('conditions ' => array ('ForumUnreadPost.user_id ' => $ userId )))));
76
+
77
+
78
+ $ returnData = $ this ->__configureThreads ($ threads );
79
+ usort ($ returnData , '__compareCreated ' );
80
+
81
+ return $ returnData ;
82
+ }
83
+
84
+ function paginate ($ conditions , $ fields , $ order , $ limit , $ page = 1 , $ recursive = null , $ extra = array ())
85
+ {
86
+ if (is_array ($ order ) && in_array (key ($ order ), array ('number_posts ' , 'lastPost ' )))
87
+ {
88
+ $ useOrder ['field ' ] = key ($ order );
89
+ $ useOrder ['direction ' ] = $ order [$ useOrder ['field ' ]];
90
+ $ order = array ();
91
+ }
92
+ elseif (!is_array ($ order ))
93
+ {
94
+ $ useOrder ['field ' ] = 'lastPost ' ;
95
+ $ useOrder ['direction ' ] = 'desc ' ;
96
+ $ order = array ();
97
+ }
98
+ else
99
+ {
100
+ $ useOrder = '' ;
101
+ }
102
+
103
+ $ this ->recursive = -1 ;
104
+
105
+ $ threads = $ this ->find ('all ' , compact ('conditions ' , 'fields ' , 'limit ' , 'page ' , 'group ' , 'order ' ) + $ extra );
106
+
107
+ $ returnData = $ this ->__configureThreads ($ threads );
108
+
109
+ if (isset ($ useOrder ['field ' ]) && $ useOrder ['field ' ] == 'lastPost ' )
110
+ usort ($ returnData , '__compareCreated ' );
111
+ elseif (isset ($ useOrder ['field ' ]) && $ useOrder ['field ' ] == 'number_posts ' )
112
+ usort ($ returnData , '__compareNumber ' );
113
+
114
+ if (isset ($ useOrder ['direction ' ]) && $ useOrder ['direction ' ] == 'desc ' )
115
+ $ returnData = array_reverse ($ returnData );
116
+
117
+ return $ returnData ;
118
+ }
119
+
120
+ function fetchBreadcrumbs ($ slug )
121
+ {
122
+ $ returnData = array ();
123
+
124
+ $ this ->recursive = -1 ;
125
+ $ thread = $ this ->findBySlug ($ slug );
126
+
127
+
128
+ $ returnData = array ();
129
+
130
+ $ this ->recursive = 0 ;
131
+ $ forum = $ this ->ForumForum ->findById ($ thread ['ForumThread ' ]['forum_forum_id ' ]);
132
+
133
+ $ returnData [0 ]['title ' ] = $ forum ['ForumCategory ' ]['title ' ];
134
+ $ returnData [0 ]['slug ' ] = $ forum ['ForumCategory ' ]['slug ' ];
135
+
136
+ $ parentForums = $ this ->ForumForum ->getpath ($ forum ['ForumForum ' ]['id ' ]);
137
+ $ i = 1 ;
138
+ foreach ($ parentForums as $ parentForum )
139
+ {
140
+ if ($ parentForum ['ForumForum ' ]['category ' ] != 1 )
141
+ {
142
+ $ returnData [$ i ]['title ' ] = $ parentForum ['ForumForum ' ]['title ' ];
143
+ $ returnData [$ i ++]['slug ' ] = $ parentForum ['ForumForum ' ]['slug ' ];
144
+ }
145
+ }
146
+
147
+ ksort ($ returnData );
148
+
149
+ return $ returnData ;
150
+ }
151
+ }
152
+ ?>
0 commit comments