/applications/vanilla/settings/structure.php

https://github.com/adamli/Garden · PHP · 216 lines · 164 code · 26 blank · 26 comment · 15 complexity · 5003618cddf5a87a1ce9bdeae648dfa8 MD5 · raw file

  1. <?php if (!defined('APPLICATION')) exit();
  2. if (!isset($Drop))
  3. $Drop = FALSE;
  4. if (!isset($Explicit))
  5. $Explicit = TRUE;
  6. $SQL = $Database->SQL();
  7. $Construct = $Database->Structure();
  8. $Construct->Table('Category')
  9. ->PrimaryKey('CategoryID')
  10. ->Column('ParentCategoryID', 'int', TRUE)
  11. ->Column('CountDiscussions', 'int', '0')
  12. ->Column('AllowDiscussions', array('1','0'), '1')
  13. ->Column('Name', 'varchar(30)')
  14. ->Column('UrlCode', 'varchar(30)', TRUE)
  15. ->Column('Description', 'varchar(250)', TRUE)
  16. ->Column('Sort', 'int', TRUE)
  17. ->Column('InsertUserID', 'int', FALSE, 'key')
  18. ->Column('UpdateUserID', 'int', TRUE)
  19. ->Column('DateInserted', 'datetime')
  20. ->Column('DateUpdated', 'datetime')
  21. ->Set($Explicit, $Drop);
  22. if ($Drop)
  23. $SQL->Insert('Category', array('InsertUserID' => 1, 'UpdateUserID' => 1, 'DateInserted' => Format::ToDateTime(), 'DateUpdated' => Format::ToDateTime(), 'Name' => 'General', 'Description' => 'General discussions', 'Sort' => '1'));
  24. // Construct the discussion table.
  25. $Construct->Table('Discussion')
  26. ->PrimaryKey('DiscussionID')
  27. ->Column('CategoryID', 'int', FALSE, 'key')
  28. ->Column('InsertUserID', 'int', FALSE, 'key')
  29. ->Column('UpdateUserID', 'int')
  30. ->Column('FirstCommentID', 'int', TRUE, 'key')
  31. ->Column('LastCommentID', 'int', TRUE, 'key')
  32. ->Column('Name', 'varchar(100)', FALSE, 'fulltext')
  33. ->Column('CountComments', 'int', '1')
  34. ->Column('Closed', array('1', '0'), '0')
  35. ->Column('Announce', array('1', '0'), '0')
  36. ->Column('Sink', array('1', '0'), '0')
  37. ->Column('DateInserted', 'datetime', NULL, 'key')
  38. ->Column('DateUpdated', 'datetime')
  39. ->Column('DateLastComment', 'datetime', NULL, 'index')
  40. ->Column('Attributes', 'text', TRUE)
  41. ->Set($Explicit, $Drop);
  42. // Allows the tracking of relationships between discussions and users (bookmarks, dismissed announcements, # of read comments in a discussion, etc)
  43. // Column($Name, $Type, $Length = '', $Null = FALSE, $Default = NULL, $KeyType = FALSE, $AutoIncrement = FALSE)
  44. $Construct->Table('UserDiscussion')
  45. ->Column('UserID', 'int', FALSE, 'primary')
  46. ->Column('DiscussionID', 'int', FALSE, 'primary')
  47. ->Column('CountComments', 'int', '0')
  48. ->Column('DateLastViewed', 'datetime')
  49. ->Column('Dismissed', 'varchar(1)', TRUE) // Relates to dismissed announcements
  50. ->Column('Bookmarked', 'varchar(1)', TRUE)
  51. ->Set($Explicit, $Drop);
  52. $Construct->Table('Comment')
  53. ->PrimaryKey('CommentID')
  54. ->Column('DiscussionID', 'int', FALSE, 'key')
  55. ->Column('InsertUserID', 'int', TRUE, 'key')
  56. ->Column('UpdateUserID', 'int', TRUE)
  57. ->Column('DeleteUserID', 'int', TRUE)
  58. ->Column('Body', 'text', FALSE, 'fulltext')
  59. ->Column('Format', 'varchar(20)', TRUE)
  60. ->Column('DateInserted', 'datetime', NULL, 'key')
  61. ->Column('DateDeleted', 'datetime', TRUE)
  62. ->Column('DateUpdated', 'datetime', TRUE)
  63. ->Column('Flag', 'tinyint', 0)
  64. ->Column('Attributes', 'text', TRUE)
  65. ->Set($Explicit, $Drop);
  66. // Allows the tracking of already-read comments on a per-user basis.
  67. $Construct->Table('CommentWatch')
  68. ->Column('UserID', 'int', FALSE, 'primary')
  69. ->Column('CommentID', 'int', FALSE, 'primary')
  70. ->Column('DateLastViewed', 'datetime')
  71. ->Set($Explicit, $Drop);
  72. // Add extra columns to user table for tracking discussions & comments
  73. $Construct->Table('User')
  74. ->Column('CountDiscussions', 'int', '0')
  75. ->Column('CountUnreadDiscussions', 'int', '0')
  76. ->Column('CountComments', 'int', '0')
  77. ->Column('CountDrafts', 'int', '0')
  78. ->Column('CountBookmarks', 'int', '0')
  79. ->Set();
  80. $Construct->Table('Draft')
  81. ->PrimaryKey('DraftID')
  82. ->Column('DiscussionID', 'int', TRUE, 'key')
  83. ->Column('CategoryID', 'int', TRUE, 'key')
  84. ->Column('InsertUserID', 'int', FALSE, 'key')
  85. ->Column('UpdateUserID', 'int')
  86. ->Column('Name', 'varchar(100)', TRUE)
  87. ->Column('Closed', array('1', '0'), '0')
  88. ->Column('Announce', array('1', '0'), '0')
  89. ->Column('Sink', array('1', '0'), '0')
  90. ->Column('Body', 'text')
  91. ->Column('Format', 'varchar(20)', TRUE)
  92. ->Column('DateInserted', 'datetime')
  93. ->Column('DateUpdated', 'datetime', TRUE)
  94. ->Set($Explicit, $Drop);
  95. // Insert some activity types
  96. /// %1 = ActivityName
  97. /// %2 = ActivityName Possessive
  98. /// %3 = RegardingName
  99. /// %4 = RegardingName Possessive
  100. /// %5 = Link to RegardingName's Wall
  101. /// %6 = his/her
  102. /// %7 = he/she
  103. /// %8 = RouteCode & Route
  104. // X added a discussion
  105. if ($SQL->GetWhere('ActivityType', array('Name' => 'NewDiscussion'))->NumRows() == 0)
  106. $SQL->Insert('ActivityType', array('AllowComments' => '0', 'Name' => 'NewDiscussion', 'FullHeadline' => '%1$s started a %8$s.', 'ProfileHeadline' => '%1$s started a %8$s.', 'RouteCode' => 'discussion', 'Public' => '0'));
  107. // People's comments on discussions
  108. if ($SQL->GetWhere('ActivityType', array('Name' => 'DiscussionComment'))->NumRows() == 0)
  109. $SQL->Insert('ActivityType', array('AllowComments' => '0', 'Name' => 'DiscussionComment', 'FullHeadline' => '%1$s commented on %4$s %8$s.', 'ProfileHeadline' => '%1$s commented on %4$s %8$s.', 'RouteCode' => 'discussion', 'Notify' => '1', 'Public' => '0'));
  110. // People mentioning others in discussion topics
  111. if ($SQL->GetWhere('ActivityType', array('Name' => 'DiscussionMention'))->NumRows() == 0)
  112. $SQL->Insert('ActivityType', array('AllowComments' => '0', 'Name' => 'DiscussionMention', 'FullHeadline' => '%1$s mentioned %3$s in a %8$s.', 'ProfileHeadline' => '%1$s mentioned %3$s in a %8$s.', 'RouteCode' => 'discussion', 'Notify' => '1', 'Public' => '0'));
  113. // People mentioning others in comments
  114. if ($SQL->GetWhere('ActivityType', array('Name' => 'CommentMention'))->NumRows() == 0)
  115. $SQL->Insert('ActivityType', array('AllowComments' => '0', 'Name' => 'CommentMention', 'FullHeadline' => '%1$s mentioned %3$s in a %8$s.', 'ProfileHeadline' => '%1$s mentioned %3$s in a %8$s.', 'RouteCode' => 'comment', 'Notify' => '1', 'Public' => '0'));
  116. // People commenting on user's bookmarked discussions
  117. if ($SQL->GetWhere('ActivityType', array('Name' => 'BookmarkComment'))->NumRows() == 0)
  118. $SQL->Insert('ActivityType', array('AllowComments' => '0', 'Name' => 'BookmarkComment', 'FullHeadline' => '%1$s commented on your %8$s.', 'ProfileHeadline' => '%1$s commented on your %8$s.', 'RouteCode' => 'bookmarked discussion', 'Notify' => '1', 'Public' => '0'));
  119. if ($Drop) {
  120. $PermissionModel = Gdn::PermissionModel();
  121. $PermissionModel->Database = $Database;
  122. $PermissionModel->SQL = $SQL;
  123. // Define some global vanilla permissions.
  124. $PermissionModel->Define(array(
  125. 'Vanilla.Settings.Manage',
  126. 'Vanilla.Categories.Manage',
  127. 'Vanilla.Spam.Manage'
  128. ));
  129. // Define some permissions for the Vanilla categories.
  130. $PermissionModel->Define(array(
  131. 'Vanilla.Discussions.View',
  132. 'Vanilla.Discussions.Add',
  133. 'Vanilla.Discussions.Edit',
  134. 'Vanilla.Discussions.Announce',
  135. 'Vanilla.Discussions.Sink',
  136. 'Vanilla.Discussions.Close',
  137. 'Vanilla.Discussions.Delete',
  138. 'Vanilla.Comments.Add',
  139. 'Vanilla.Comments.Edit',
  140. 'Vanilla.Comments.Delete'),
  141. 'tinyint',
  142. 'Category',
  143. 'CategoryID'
  144. );
  145. // Get the general category so we can assign permissions to it.
  146. $GeneralCategoryID = $SQL->GetWhere('Category', array('Name' => 'General'))->Value('CategoryID', 0);
  147. // Set the initial guest permissions.
  148. $PermissionModel->Save(array(
  149. 'RoleID' => 2,
  150. 'JunctionTable' => 'Category',
  151. 'JunctionColumn' => 'CategoryID',
  152. 'JunctionID' => $GeneralCategoryID,
  153. 'Vanilla.Discussions.View' => 1
  154. ));
  155. // Set the intial member permissions.
  156. $PermissionModel->Save(array(
  157. 'RoleID' => 8,
  158. 'JunctionTable' => 'Category',
  159. 'JunctionColumn' => 'CategoryID',
  160. 'JunctionID' => $GeneralCategoryID,
  161. 'Vanilla.Discussions.Add' => 1,
  162. 'Vanilla.Discussions.View' => 1,
  163. 'Vanilla.Comments.Add' => 1
  164. ));
  165. // Set the initial administrator permissions.
  166. $PermissionModel->Save(array(
  167. 'RoleID' => 16,
  168. 'Vanilla.Settings.Manage' => 1,
  169. 'Vanilla.Categories.Manage' => 1,
  170. 'Vanilla.Spam.Manage' => 1,
  171. ));
  172. $PermissionModel->Save(array(
  173. 'RoleID' => 16,
  174. 'JunctionTable' => 'Category',
  175. 'JunctionColumn' => 'CategoryID',
  176. 'JunctionID' => $GeneralCategoryID,
  177. 'Vanilla.Discussions.Add' => 1,
  178. 'Vanilla.Discussions.Edit' => 1,
  179. 'Vanilla.Discussions.Announce' => 1,
  180. 'Vanilla.Discussions.Sink' => 1,
  181. 'Vanilla.Discussions.Close' => 1,
  182. 'Vanilla.Discussions.Delete' => 1,
  183. 'Vanilla.Discussions.View' => 1,
  184. 'Vanilla.Comments.Add' => 1,
  185. 'Vanilla.Comments.Edit' => 1,
  186. 'Vanilla.Comments.Delete' => 1
  187. ));
  188. // Make sure that User.Permissions is blank so new permissions for users get applied.
  189. $SQL->Update('User', array('Permissions' => ''))->Put();
  190. }