Exemplo n.º 1
0
 /**
  * Forum-specific export format
  * @todo Project file size / export time and possibly break into multiple files
  * @param ExportModel $Ex
  * 
  */
 protected function ForumExport($Ex)
 {
     // Get the characterset for the comments.
     $CharacterSet = $Ex->GetCharacterSet('Comment');
     if ($CharacterSet) {
         $Ex->CharacterSet = $CharacterSet;
     }
     // Begin
     $Ex->BeginExport('', 'Vanilla 1.*');
     // Users
     $User_Map = array('UserID' => 'UserID', 'Name' => 'Name', 'Password' => 'Password', 'Email' => 'Email', 'Icon' => 'Photo', 'CountComments' => 'CountComments', 'Discovery' => 'DiscoveryText');
     $Ex->ExportTable('User', "SELECT * FROM :_User", $User_Map);
     // ":_" will be replaced by database prefix
     // Roles
     // Since the zero role is a valid role in Vanilla 1 then we'll have to reassign it.
     $R = $Ex->Query('select max(RoleID) as RoleID from :_Role');
     $ZeroRoleID = 0;
     if (is_resource($R)) {
         while (($Row = @mysql_fetch_assoc($R)) !== false) {
             $ZeroRoleID = $Row['RoleID'];
         }
     }
     $ZeroRoleID++;
     /*
        'RoleID' => 'int', 
        'Name' => 'varchar(100)', 
        'Description' => 'varchar(200)'
     */
     $Role_Map = array('RoleID' => 'RoleID', 'Name' => 'Name', 'Description' => 'Description');
     $Ex->ExportTable('Role', "select RoleID, Name, Description from :_Role union all select {$ZeroRoleID}, 'Applicant', 'Created by the Vanilla Porter'", $Role_Map);
     // UserRoles
     /*
        'UserID' => 'int', 
        'RoleID' => 'int'
     */
     $UserRole_Map = array('UserID' => 'UserID', 'RoleID' => 'RoleID');
     $Ex->ExportTable('UserRole', "select UserID, case RoleID when 0 then {$ZeroRoleID} else RoleID end as RoleID from :_User", $UserRole_Map);
     // Categories
     /*
               'CategoryID' => 'int', 
               'Name' => 'varchar(30)', 
               'Description' => 'varchar(250)', 
               'ParentCategoryID' => 'int', 
               'DateInserted' => 'datetime', 
               'InsertUserID' => 'int', 
               'DateUpdated' => 'datetime', 
               'UpdateUserID' => 'int'
     */
     $Category_Map = array('CategoryID' => 'CategoryID', 'Name' => 'Name', 'Description' => 'Description');
     $Ex->ExportTable('Category', "select CategoryID, Name, Description from :_Category", $Category_Map);
     // Discussions
     /*
        'DiscussionID' => 'int', 
        'Name' => 'varchar(100)', 
        'CategoryID' => 'int', 
        'Body' => 'text', 
        'Format' => 'varchar(20)', 
        'DateInserted' => 'datetime', 
        'InsertUserID' => 'int', 
        'DateUpdated' => 'datetime', 
        'UpdateUserID' => 'int', 
        'Score' => 'float', 
        'Announce' => 'tinyint', 
        'Closed' => 'tinyint'
     */
     $Discussion_Map = array('DiscussionID' => 'DiscussionID', 'Name' => 'Name', 'CategoryID' => 'CategoryID', 'DateCreated' => 'DateInserted', 'DateCreated2' => 'DateUpdated', 'AuthUserID' => 'InsertUserID', 'DateLastActive' => 'DateLastComment', 'AuthUserID2' => 'UpdateUserID', 'Closed' => 'Closed', 'Sticky' => 'Announce', 'CountComments' => 'CountComments', 'Sink' => 'Sink', 'LastUserID' => 'LastCommentUserID');
     $Ex->ExportTable('Discussion', "SELECT d.*,\n            d.LastUserID as LastCommentUserID,\n            d.DateCreated as DateCreated2, d.AuthUserID as AuthUserID2\n         FROM :_Discussion d\n         WHERE coalesce(d.WhisperUserID, 0) = 0 and d.Active = 1", $Discussion_Map);
     // Comments
     /*
        'CommentID' => 'int', 
        'DiscussionID' => 'int', 
        'DateInserted' => 'datetime', 
        'InsertUserID' => 'int', 
        'DateUpdated' => 'datetime', 
        'UpdateUserID' => 'int', 
        'Format' => 'varchar(20)', 
        'Body' => 'text', 
        'Score' => 'float'
     */
     $Comment_Map = array('CommentID' => 'CommentID', 'DiscussionID' => 'DiscussionID', 'AuthUserID' => 'InsertUserID', 'DateCreated' => 'DateInserted', 'EditUserID' => 'UpdateUserID', 'DateEdited' => 'DateUpdated', 'Body' => 'Body', 'FormatType' => 'Format');
     $Ex->ExportTable('Comment', "\n         SELECT \n            c.*\n         FROM :_Comment c\n         JOIN :_Discussion d\n            ON c.DiscussionID = d.DiscussionID\n         WHERE coalesce(d.WhisperUserID, 0) = 0\n            AND coalesce(c.WhisperUserID, 0) = 0", $Comment_Map);
     $Ex->ExportTable('UserDiscussion', "\n         SELECT\n            w.UserID,\n            w.DiscussionID,\n            w.CountComments,\n            w.LastViewed as DateLastViewed,\n            case when b.UserID is not null then 1 else 0 end AS Bookmarked\n         FROM :_UserDiscussionWatch w\n         LEFT JOIN :_UserBookmark b\n            ON w.DiscussionID = b.DiscussionID AND w.UserID = b.UserID");
     // Conversations
     // Create a mapping table for conversations.
     // This cannot be a temporary table because of some of the union selects it is used in below.
     $Ex->Query("create table :_V1Conversation (ConversationID int auto_increment primary key, DiscussionID int, UserID1 int, UserID2 int, DateCreated datetime, EditUserID int, DateEdited datetime)");
     $Ex->Query("insert :_V1Conversation (DiscussionID, UserID1, UserID2, DateCreated, EditUserID, DateEdited)\n         select\n           DiscussionID,\n           AuthUserID as UserID1,\n           WhisperUserID as UserID2,\n           min(DateCreated),\n           max(EditUserID),\n           max(DateEdited)\n         from :_Comment\n         where coalesce(WhisperUserID, 0) <> 0\n         group by DiscussionID, AuthUserID, WhisperUserID\n\n         union\n\n         select\n           DiscussionID,\n           AuthUserID as UserID1,\n           WhisperUserID as UserID2,\n           DateCreated,\n           WhisperFromLastUserID,\n           DateLastWhisper\n         from :_Discussion\n         where coalesce(WhisperUserID, 0) <> 0");
     // Delete redundant conversations.
     $Ex->Query("create index ix_V1UserID1 on :_V1Conversation (DiscussionID, UserID1)");
     // for speed
     $Ex->Query("delete t.*\n         from :_V1Conversation t\n         inner join :_Comment c\n           on c.DiscussionID = t.DiscussionID\n             and c.AuthUserID = t.UserID2\n             and c.WhisperUserID = t.UserID1\n             and c.AuthUserID < c.WhisperUserID");
     $Conversation_Map = array('UserID1' => 'InsertUserID', 'DateCreated' => 'DateInserted', 'EditUserID' => 'UpdateUserID', 'DateEdited' => 'DateUpdated');
     $Ex->ExportTable('Conversation', "select * from :_V1Conversation", $Conversation_Map);
     // ConversationMessage
     /*
        'MessageID' => 'int', 
        'ConversationID' => 'int', 
        'Body' => 'text', 
        'InsertUserID' => 'int', 
        'DateInserted' => 'datetime'
     */
     $ConversationMessage_Map = array('CommentID' => 'MessageID', 'DiscussionID' => 'ConversationID', 'Body' => 'Body', 'AuthUserID' => 'InsertUserID', 'DateCreated' => 'DateInserted');
     $Ex->ExportTable('ConversationMessage', "\n         select c.CommentID, t.ConversationID, c.AuthUserID, c.DateCreated, c.Body\n         from :_Comment c\n         join :_V1Conversation t\n           on t.DiscussionID = c.DiscussionID\n             and c.WhisperUserID in (t.UserID1, t.UserID2)\n             and c.AuthUserID in (t.UserID1, t.UserID2)\n         where c.WhisperUserID > 0\n\n         union\n\n         select c.CommentID, t.ConversationID, c.AuthUserID, c.DateCreated, c.Body\n         from :_Comment c\n         join :_Discussion d\n          on c.DiscussionID = d.DiscussionID\n         join :_V1Conversation t\n           on t.DiscussionID = d.DiscussionID\n             and d.WhisperUserID in (t.UserID1, t.UserID2)\n             and d.AuthUserID in (t.UserID1, t.UserID2)\n         where d.WhisperUserID > 0", $ConversationMessage_Map);
     // UserConversation
     /*
        'UserID' => 'int', 
        'ConversationID' => 'int', 
        'LastMessageID' => 'int'
     */
     $UserConversation_Map = array('UserID' => 'UserID', 'ConversationID' => 'ConversationID');
     $Ex->ExportTable('UserConversation', "select UserID1 as UserID, ConversationID\n         from :_V1Conversation\n\n         union\n\n         select UserID2 as UserID, ConversationID\n         from :_V1Conversation", $UserConversation_Map);
     $Ex->Query("drop table :_V1Conversation");
     // Media
     if ($Ex->Exists('Attachment')) {
         $Media_Map = array('AttachmentID' => 'MediaID', 'Name' => 'Name', 'MimeType' => 'Type', 'Size' => 'Size', 'Path' => array('Column' => 'Path', 'Filter' => array($this, 'StripMediaPath')), 'UserID' => 'InsertUserID', 'DateCreated' => 'DateInserted', 'CommentID' => 'ForeignID');
         $Ex->ExportTable('Media', "select a.*, 'local' as StorageMethod, 'comment' as ForeignTable from :_Attachment a", $Media_Map);
     }
     // End
     $Ex->EndExport();
 }
Exemplo n.º 2
0
 /**
  *
  * @param ExportModel $Ex
  */
 public function ForumExport($Ex)
 {
     $CharacterSet = $Ex->GetCharacterSet('yaf_Topic');
     if ($CharacterSet) {
         $Ex->CharacterSet = $CharacterSet;
     }
     $Ex->BeginExport('', 'YAF.NET (Yet Another Forum)');
     $Ex->SourcePrefix = 'yaf_';
     // User.
     $User_Map = array('UserID' => 'UserID', 'Name' => 'Name', 'Email' => 'Email', 'Joined' => 'DateInserted', 'LastVisit' => array('Column' => 'DateLastVisit', 'Type' => 'datetime'), 'IP' => 'InsertIPAddress', 'Avatar' => 'Photo', 'RankID' => array('Column' => 'RankID', 'Type' => 'int'), 'Points' => array('Column' => 'Points', 'Type' => 'int'), 'LastActivity' => 'DateLastActive', 'Password2' => array('Column' => 'Password', 'Filter' => array($this, 'ConvertPassword')), 'HashMethod' => 'HashMethod');
     $Ex->ExportTable('User', "\n         select\n            u.*,\n            m.Password as Password2,\n            m.PasswordSalt,\n            m.PasswordFormat,\n            m.LastActivity,\n            'yaf' as HashMethod\n         from yaf_User u\n         left join yaf_prov_Membership m\n            on u.ProviderUserKey = m.UserID;", $User_Map);
     // Role.
     $Role_Map = array('GroupID' => 'RoleID', 'Name' => 'Name');
     $Ex->ExportTable('Role', "\n         select *\n         from yaf_Group;", $Role_Map);
     // UserRole.
     $UserRole_Map = array('UserID' => 'UserID', 'GroupID' => 'RoleID');
     $Ex->ExportTable('UserRole', 'select * from yaf_UserGroup', $UserRole_Map);
     // Rank.
     $Rank_Map = array('RankID' => 'RankID', 'Level' => 'Level', 'Name' => 'Name', 'Label' => 'Label');
     $Ex->ExportTable('Rank', "\n         select\n            r.*,\n            RankID as Level,\n            Name as Label\n         from yaf_Rank r;", $Rank_Map);
     // Signatures.
     $Ex->ExportTable('UserMeta', "\n         select\n            UserID,\n            'Plugin.Signatures.Sig' as `Name`,\n            Signature as `Value`\n         from yaf_User\n         where Signature <> ''\n\n         union all\n\n         select\n            UserID,\n            'Plugin.Signatures.Format' as `Name`,\n            'BBCode' as `Value`\n         from yaf_User\n         where Signature <> '';");
     // Category.
     $Category_Map = array('ForumID' => 'CategoryID', 'ParentID' => 'ParentCategoryID', 'Name' => 'Name', 'Description' => 'Description', 'SortOrder' => 'Sort');
     $Ex->ExportTable('Category', "\n         select\n            f.ForumID,\n            case when f.ParentID = 0 then f.CategoryID * 1000 else f.ParentID end as ParentID,\n            f.Name,\n            f.Description,\n            f.SortOrder\n         from yaf_Forum f\n\n         union all\n\n         select\n            c.CategoryID * 1000,\n            null,\n            c.Name,\n            null,\n            c.SortOrder\n         from yaf_Category c;", $Category_Map);
     // Discussion.
     $Discussion_Map = array('TopicID' => 'DiscussionID', 'ForumID' => 'CategoryID', 'UserID' => 'InsertUserID', 'Posted' => 'DateInserted', 'Topic' => 'Name', 'Views' => 'CountViews', 'Announce' => 'Announce');
     $Ex->ExportTable('Discussion', "\n         select\n            case when t.Priority > 0 then 1 else 0 end as Announce,\n            t.Flags & 1 as Closed,\n            t.*\n         from yaf_Topic t\n         where t.IsDeleted = 0;", $Discussion_Map);
     // Comment.
     $Comment_Map = array('MessageID' => 'CommentID', 'TopicID' => 'DiscussionID', 'ReplyTo' => array('Column' => 'ReplyToCommentID', 'Type' => 'int'), 'UserID' => 'InsertUserID', 'Posted' => 'DateInserted', 'Message' => 'Body', 'Format' => 'Format', 'IP' => 'InsertIPAddress', 'Edited' => array('Column' => 'DateUpdated', 'Filter' => array($this, 'CleanDate')), 'EditedBy' => 'UpdateUserID');
     $Ex->ExportTable('Comment', "\n         select\n            case when m.Flags & 1 = 1 then 'Html' else 'BBCode' end as Format,\n            m.*\n         from yaf_Message m\n         where IsDeleted = 0;", $Comment_Map);
     // Conversation.
     $this->_ExportConversationTemps();
     $Conversation_Map = array('PMessageID' => 'ConversationID', 'FromUserID' => 'InsertUserID', 'Created' => 'DateInserted', 'Title' => array('Column' => 'Subject', 'Type' => 'varchar(512)'));
     $Ex->ExportTable('Conversation', "\n         select\n            pm.*,\n            g.Title\n         from z_pmgroup g\n         join yaf_PMessage pm\n            on g.Group_ID = pm.PMessageID;", $Conversation_Map);
     // UserConversation.
     $UserConversation_Map = array('PM_ID' => 'ConversationID', 'User_ID' => 'UserID', 'Deleted' => 'Deleted');
     $Ex->ExportTable('UserConversation', "\n         select pto.*\n         from z_pmto pto\n         join z_pmgroup g\n            on pto.PM_ID = g.Group_ID;", $UserConversation_Map);
     // ConversationMessage.
     $ConversationMessage_Map = array('PMessageID' => 'MessageID', 'Group_ID' => 'ConversationID', 'FromUserID' => 'InsertUserID', 'Created' => 'DateInserted', 'Body' => 'Body', 'Format' => 'Format');
     $Ex->ExportTable('ConversationMessage', "\n         select\n            pm.*,\n            case when pm.Flags & 1 = 1 then 'Html' else 'BBCode' end as Format,\n            t.Group_ID\n         from yaf_PMessage pm\n         join z_pmtext t\n            on t.PM_ID = pm.PMessageID;", $ConversationMessage_Map);
     $Ex->EndExport();
 }