<?php
/**
  * Ahead WebSoft Technologies Pvt Ltd.
  * @copyright  Copyright 2006-2026 Ahead WebSoft Technologies Pvt Ltd.
  * @license    https://www.socialengine.com/policies
*/
abstract class Install_Import_Phpfox_AbstractFeeds extends Install_Import_Phpfox_Abstract
{

  protected $_toTableTruncate = true;
  protected $_fromResourceType;
  protected $_toResourceType;

  /* Moved to CleanupPre
    static protected $_toTableTruncated = false;
   */
  public function __sleep()
  {
    return array_merge(parent::__sleep(), array(
      '_fromResourceType', '_toResourceType' //, '_toTableTruncated', // That last one might not work
    ));
  }

  protected function _initPre()
  {
    $this->_fromTable = $this->getFromPrefix() . 'feed';
    $this->_toTable = 'engine4_activity_actions';
    $this->_truncateTable($this->getToDb(), 'engine4_activity_stream');
    $this->_truncateTable($this->getToDb(), 'engine4_activity_attachments');
  }

  protected function _translateRow(array $data, $key = null)
  {

    //GET FROM RESOURCE TYPE
    $objectType = $this->_fromResourceType;

    //GET TO RESOURCE TYPE
    $toType = $this->_toResourceType;
    $attachmentType = '';
    //INTIALISE VARIABLES
    $newData = array();
    $body = '';
    $type_id = '';
    $link = '';
    $tempLink = '';
    $tempData = $data['item_id'];
    $mode = 1;
    $isAttachment = true;
    $isPostedAsPage = false;
    $userId = $this->getFromDb()->query("SELECT  " . $this->getfromPrefix() . "pages.user_id FROM " . $this->getfromPrefix() . "user left join  " . $this->getfromPrefix() . "pages on page_id=profile_page_id where profile_page_id<>0 and  " . $this->getfromPrefix() . "user.user_id=" . $data['user_id'])
      ->fetchColumn(0);
    if( $userId ) {
      $data['user_id'] = $userId;
      $isPostedAsPage = true;
    }

    $totalFeeds = 0;
    $totalFeeds += (int) $this->getFromDb()->select()
      ->from($this->getFromPrefix() . 'event_feed', 'COUNT(*)')
      ->query()
      ->fetchColumn(0);

    $totalFeeds += (int) $this->getFromDb()->select()
      ->from($this->getFromPrefix() . 'pages_feed', 'COUNT(*)')
      ->query()
      ->fetchColumn(0);

    $actionId = $data['feed_id'] + $totalFeeds;

    //CHECK FOR GROUP [WE ARE SKIPPING THE COMMENTS FOR GROUP FOR BLOG, VIDEO]
    //FIND ATTACHMENT TYPE,OBJECT TYPE AND ITEM ID ON DIFFERENT CONDITION
    if( $toType == 'Poke' ) {
      return false;
    } else if( $objectType == 'blog' ) {
      //FIND PAGE INFO
      $pageInfo = $this->getFromDb()->select()
        ->from($this->getfromPrefix() . 'blog', null)
        ->join($this->getfromPrefix() . 'pages', $this->getfromPrefix() . 'pages.page_id=' . $this->getfromPrefix() . 'blog.item_id', array('type_id', $this->getfromPrefix() . 'pages.page_id'))
        ->where($this->getfromPrefix() . 'blog.blog_id = ?', $data['item_id'])
        ->where($this->getfromPrefix() . 'blog.module_id = ?', 'pages')
        ->query()
        ->fetch();
      if( $pageInfo ) {
        return false;
      }
    } else if( $objectType == 'video' ) {

      //FIND PAGE INFO
      $pageInfo = $this->getFromDb()->select()
        ->from($this->getfromPrefix() . 'video', null)
        ->join($this->getfromPrefix() . 'pages', $this->getfromPrefix() . 'pages.page_id=' . $this->getfromPrefix() . 'video.item_id', array('type_id', $this->getfromPrefix() . 'pages.page_id'))
        ->where($this->getfromPrefix() . 'video.video_id = ?', $data['item_id'])
        ->where($this->getfromPrefix() . 'video.module_id = ?', 'pages')
        ->query()
        ->fetch();
      if( !empty($pageInfo) ) {
        return false;
      }
    } else if( $objectType == 'music_playlist' ) {
      $pageInfo = $this->getFromDb()->select()
        ->from($this->getfromPrefix() . 'music_album', null)
        ->join($this->getfromPrefix() . 'pages', $this->getfromPrefix() . 'pages.page_id=' . $this->getfromPrefix() . 'music_album.item_id', array('type_id', $this->getfromPrefix() . 'pages.page_id'))
        ->where($this->getfromPrefix() . 'music_album.album_id = ?', $data['item_id'])
        ->where($this->getfromPrefix() . 'music_album.module_id = ?', 'pages')
        ->query()
        ->fetch();
      if( !empty($pageInfo) ) {
        return false;
      }
    } else if( $objectType == 'music_playlist_song' ) {
      $type_id = $this->getFromDb()->select()
        ->from($this->getfromPrefix() . 'music_song', null)
        ->join($this->getfromPrefix() . 'pages', $this->getfromPrefix() . 'pages.page_id=' . $this->getfromPrefix() . 'music_song.item_id', 'type_id')
        ->where($this->getfromPrefix() . 'music_song.song_id = ?', $data['item_id'])
        ->query()
        ->fetchColumn();

      if( $type_id == 3 ) {
        return false;
      } else {
        if( $data['item_id'] != 0 ) {
          $toType = 'music_playlist_new';
        }
      }
    }
    //CHECK FOR STATUS
    if( $toType == 'status' ) {

      //CHECK PARENT FEED MODULE AND ID
      if( $data['parent_module_id'] && $data['parent_feed_id'] ) {

        //CHANGE THE TYPE TO SHARE
        $toType = 'share';
        $tempData = $data['parent_feed_id'];
      }

      //GET BODY
      $body = $this->getFromDb()->select()
        ->from($this->getfromPrefix() . 'user_status', 'content')
        ->where('status_id = ?', $data['item_id'])
        ->where('user_id = ?', $data['user_id'])
        ->query()
        ->fetchColumn();
      $objectType = 'user';
      $data['item_id'] = $data['user_id'];
    } else if( $toType == 'post_self' && $objectType == 'user' ) {

      //FIND PHOTO DETAIL
      $photoDtl = $this->getFromDb()->select()
        ->from($this->getfromPrefix() . 'photo', array('group_id', 'time_stamp'))
        ->join($this->getfromPrefix() . 'pages', $this->getfromPrefix() . 'pages.page_id=' . $this->getfromPrefix() . 'photo.group_id', $this->getfromPrefix() . 'pages.type_id')
        ->where('photo_id= ?', $data['item_id'])
        ->where('module_id= ?', 'pages')
        ->query()
        ->fetch();

      if( $photoDtl ) {
        return false;
      } else {
        $type_id = $this->getFromDb()->select()
          ->from($this->getfromPrefix() . 'photo', 'type_id')
          ->where('type_id = ?', 1)
          ->where('photo_id = ?', $data['item_id'])
          ->query()
          ->fetchColumn();

        if( !$type_id )
          return false;
        $data['item_id'] = $data['user_id'];
      }
      $description = $this->getFromDb()->select()
        ->from($this->getfromPrefix() . 'photo_info', 'description')
        ->where('photo_id = ?', $tempData)
        ->query()
        ->fetchColumn();

      if( $description ) {
        //UPDATE ALBUM DESC
        $this->getToDb()->update('engine4_album_photos', array(
          'description' => $description,
          'title' => '',
          ), array(
          'photo_id = ?' => $tempData,
        ));
      }
    } else if( $toType == 'post_self' && $objectType == 'core_link' ) {

      $linkDtl = $this->getFromDb()->select()
        ->from($this->getfromPrefix() . 'link', array('status_info', 'item_id'))
        ->join($this->getfromPrefix() . 'pages', $this->getfromPrefix() . 'pages.page_id=' . $this->getfromPrefix() . 'link.item_id', $this->getfromPrefix() . 'pages.type_id')
        ->where('link_id= ?', $tempData)
        ->where('module_id= ?', 'pages')
        ->query()
        ->fetch();
      if( $linkDtl ) {
        return false;
      } else {
        $data['item_id'] = $data['user_id'];
        $tempLink = $objectType;
        $objectType = 'user';
        $link = true;
        $body = $this->getFromDb()->select()
          ->from($this->getfromPrefix() . 'link', 'status_info')
          ->where('link_id=?', $tempData)
          ->query()
          ->fetchColumn();
      }
    } elseif( $toType == 'music_playlist_new' ) {
      $album = $this->getFromDb()->select()
        ->from($this->getFromPrefix() . 'music_song')
        ->where('song_id=?', $data['item_id'])
        ->query()
        ->fetch();

      if( !$album ) {
        return false;
      }

      if( empty($album['album_id']) ) {
        $playlistData = array();
        $playlistData['title'] = $album['title'];
        $playlistData['description'] = '';
        $playlistData['owner_type'] = 'user';
        $playlistData['search'] = 1;
        $playlistData['owner_id'] = $data['user_id'];
        $playlistData['creation_date'] = $this->_translateTime(time());
        $playlistData['modified_date'] = $this->_translateTime(time());

        $this->getToDb()->insert('engine4_music_playlists', $playlistData);

        $album['album_id'] = $this->getToDb()->lastInsertId();

        $songsData = array();
        $songsData['song_id'] = $album['song_id'];
        $songsData['playlist_id'] = $album['album_id'];
        $songsData['title'] = $album['title'];
        $songsData['play_count'] = $album['total_play'];
        $songsData['order'] = $album['ordering'];

        if( $album['song_path'] ) {
          $des = explode('%s', $this->getFromPath() . DIRECTORY_SEPARATOR . 'file/music' . DIRECTORY_SEPARATOR . $album['song_path']);
          $file = $des[0];
          if( isset($des[1]) ) {
            $file = $des[0] . $des[1];
          }

          if( $file ) {
            try {
              $fileId = $this->_translateFile($file, array(
                'parent_type' => 'music_playlist_song',
                'parent_id' => $album['album_id']
              ), true);
            } catch( Exception $e ) {
              $fileId = null;
              $this->_warning($e->getMessage(), 1);
            }

            $songsData['file_id'] = $fileId;
          }
        }

        $this->getToDb()->insert('engine4_music_playlist_songs', $songsData);
        $this->_insertSearch('music_playlist_song', $album['song_id'], $songsData['title']);
      }

      $data['item_id'] = $album['album_id'];
      $tempData = $album['album_id'];
    } else if( $toType == 'post_self' && $objectType == 'music_playlist_song' ) {
      $data['item_id'] = $data['user_id'];
      $tempLink = $objectType;
      $objectType = 'user';
      $link = true;
      $body = $this->getFromDb()->select()
        ->from($this->getfromPrefix() . 'music_song', 'description')
        ->where('song_id=?', $tempData)
        ->query()
        ->fetchColumn();
    } else if( $objectType == 'forum_topic' && $toType == 'forum_topic_reply' ) {
      $tempData = $data['item_id'];
      $data['item_id'] = $this->getFromDb()->select()
        ->from($this->getfromPrefix() . 'forum_post', 'thread_id')
        ->where('post_id=?', $data['item_id'])
        ->query()
        ->fetchColumn();
    } else if( $objectType == 'user' && $toType == 'profile_photo_update' ) {
      $type_id = true;
      $tempData = $data['item_id'];
      $data['item_id'] = $data['user_id'];
    } elseif( $toType == 'album_photo_new' && $objectType == 'album' ) {
      $album_id = $this->getFromDb()->select()
        ->from($this->getfromPrefix() . 'photo', 'album_id')
        ->where('type_id = ?', 0)
        ->where('module_id is NULL')
        ->where('photo_id = ?', $data['item_id'])
        ->query()
        ->fetchColumn();

      if( !$album_id )
        return false;
      $data['item_id'] = $album_id;

      $count = $this->getFromDb()->select()
        ->from($this->getfromPrefix() . 'photo_feed', array('count' => 'COUNT(*)'))
        ->where('feed_id = ?', $data['feed_id'])
        ->query()
        ->fetchColumn();

      $newData['params'] = '{"count":"' . (int) ($count + 1) . '"}';
      $description = $this->getFromDb()->select()
        ->from($this->getfromPrefix() . 'photo_info', 'description')
        ->where('photo_id = ?', $tempData)
        ->query()
        ->fetchColumn();

      if( $description ) {
        $this->getToDb()->update('engine4_album_photos', array(
          'description' => $description,
          'title' => '',
          ), array(
          'photo_id = ?' => $tempData,
        ));
      }
    } else if( $objectType == 'user' && $toType == 'tagged' ) {
      $newData = array_merge($newData, array(
        'params' => '{"label":"photo"}',
      ));
      if( $data['parent_user_id'] == $data['user_id'] )
        return false;
      $type_id = true;
      $tempData = $this->getFromDb()->select()
        ->from($this->getfromPrefix() . 'photo_tag', 'photo_id')
        ->where('tag_id = ?', $data['item_id'])
        ->query()
        ->fetchColumn();

      $data['item_id'] = $data['parent_user_id'];
    } elseif( $toType == 'post_self' && $objectType == 'PHPfox_Videos' ) {
      $objectType = 'user';
      $isAttachment = true;
      $attachmentType = 'video';
      $data['item_id'] = $data['user_id'];
      $tempData = $this->getToDb()->select()
        ->from('engine4_video_videos', 'video_id')
        ->where('parent_id = ?', $data['feed_id'])
        ->query()
        ->fetchColumn();

      // $this->_log('videos: ' . print_r($tempData, true));
    }

    //MAKING NEW DATA ARRAY FOT INSERTION
    $newData = array_merge($newData, array(
      'action_id' => $actionId,
      'type' => $toType,
      'subject_type' => 'user',
      'subject_id' => $data['user_id'],
      'object_type' => $objectType,
      'object_id' => $data['item_id'],
      'body' => $body,
      'date' => $this->_translateTime($data['time_stamp']),
      'attachment_count' => 1,
      'modified_date' => date('Y-m-d H:i:s'),
    ));

    $privacy_field = $this->getToDb()->query("SHOW COLUMNS FROM engine4_activity_actions LIKE 'privacy'")->fetch();
    $privacy = 'everyone';
    if( !empty($privacy_field) ) {
      switch( $data['privacy'] ) {
        case '1':
        case '2':
          $privacy = 'friends';
          break;
        case '3':
          $privacy = 'onlyme';
          break;
        default: $privacy = 'everyone';
      }
      $newData = array_merge($newData, array('privacy' => $privacy));
    }

    //INTIALISING THE TARGET TYPES
    $targetTypes = array();
    if( $objectType != 'user' ) {
      //GET PRIVACY
      try {
        if( empty($objectType) || empty($data['item_id']) )
          return false;
        $privacyTypes = $this->getToDb()->select()
          ->from('engine4_authorization_allow', 'role')
          ->where('resource_type = ?', $objectType)
          ->where('resource_id = ?', $data['item_id'])
          ->where('action = ?', 'view')
          ->query()
          ->fetchAll(Zend_Db::FETCH_COLUMN);
      } catch( Exception $ex ) {
        
      }
      if( empty($privacyTypes) ) {
        $targetTypes['everyone'] = 0;
        $targetTypes['owner'] = $data['user_id'];
        if( $toType == 'forum_topic_create' || $toType == 'forum_topic_reply' ) {
          $forum_id = $this->getFromDb()->select()
            ->from($this->getfromPrefix() . 'forum_thread', 'forum_id')
            ->where('thread_id=?', $data['item_id'])
            ->query()
            ->fetchColumn();
          $targetTypes['forum'] = $forum_id;
        } else {
          $targetTypes['registered'] = 0;
          $targetTypes['parent'] = $data['user_id'];
          $targetTypes['members'] = $data['user_id'];
        }
      } else {
        if( in_array('everyone', $privacyTypes) && in_array('owner_member', $privacyTypes) && in_array('owner_member_member', $privacyTypes) && in_array('owner_network', $privacyTypes) ) {
          $targetTypes['everyone'] = 0;
          $targetTypes['registered'] = 0;
          $targetTypes['owner'] = $data['user_id'];
          $targetTypes['parent'] = $data['user_id'];
          $targetTypes['members'] = $data['user_id'];
        } else if( in_array('owner_member', $privacyTypes) && in_array('owner_member_member', $privacyTypes) && in_array('owner_network', $privacyTypes) ) {
          $targetTypes['owner'] = $data['user_id'];
          $targetTypes['parent'] = $data['user_id'];
          $targetTypes['members'] = $data['user_id'];
        } else if( in_array('owner_member', $privacyTypes) && in_array('owner_member_member', $privacyTypes) ) {
          $targetTypes['owner'] = $data['user_id'];
          $targetTypes['parent'] = $data['user_id'];
          $targetTypes['members'] = $data['user_id'];
        } else if( in_array('owner_member', $privacyTypes) ) {
          $targetTypes['owner'] = $data['user_id'];
          $targetTypes['parent'] = $data['user_id'];
        }
      }
    } else {
      switch( $privacy ) {
        case 'friends':
          $targetTypes['owner'] = $data['user_id'];
          $targetTypes['parent'] = $data['user_id'];
          $targetTypes['members'] = $data['user_id'];
          break;
        case 'onlyme':
          $targetTypes['owner'] = $data['user_id'];
          $targetTypes['parent'] = $data['user_id'];
          break;
        case 'everyone':
          $targetTypes['everyone'] = 0;
          $targetTypes['registered'] = 0;
          $targetTypes['owner'] = $data['user_id'];
          $targetTypes['parent'] = $data['user_id'];
          $targetTypes['members'] = $data['user_id'];
          break;
      }

      if( $objectType == 'user' && $toType == 'tagged' ) {
        $targetTypes['parent'] = $data['parent_user_id'];
        $targetTypes['members'] = $data['parent_user_id'];
      }
    }

    //INSERT INTO STREAM TABLE
    foreach( $targetTypes as $targetType => $targetIdentity ) {
      $insert = array(
        'target_type' => $targetType,
        'target_id' => $targetIdentity,
        'subject_type' => 'user',
        'subject_id' => $data['user_id'],
        'object_type' => $objectType,
        'object_id' => $data['item_id'],
        'type' => $toType,
        'action_id' => $actionId,
      );
      try {
        $this->getToDb()->insert('engine4_activity_stream', $insert);
      } catch( Exception $e ) {
        $this->_error("Problem adding activity privacy: " . $e->getMessage() . "\nQuery: " . print_r($insert, true));
      }
    }

    //CHANGE OBJECT TYPE IN CASE OF ALBUM
    $objectType = $type_id ? 'album_photo' : $objectType;

    //CHANGE OBJECT TYPE IN CASE OF LINK 
    if( $link ) {
      $objectType = $tempLink;
    }

    //CHANGE OBJECT TYPE IN CASE OF FORUM
    if( $objectType == 'forum_topic' && $toType == 'forum_topic_reply' ) {
      $objectType = 'forum_post';
    }

    //CHECK THE RESOURCE TYPE IF THIS IS SHARE THEN WE ARE SETTING THE PARAMS
    if( $toType == 'share' ) {
      $newData = array_merge($newData, array(
        'params' => '{"type":"item"}',
      ));
      if( $data['parent_module_id'] && $data['parent_feed_id'] ) {
        if( $data['parent_module_id'] == 'music_song' ) {
          $objectType = 'music_playlist_song';
        } elseif( $data['parent_module_id'] == 'marketplace' ) {
          $objectType = 'classified';
        } else {
          $objectType = $data['parent_module_id'];
        }
      }
    }

    //RESOURCE TYPE FOR ALBUM AND INSERTING THE ATTACHMENTS
    if( !$isAttachment ) {
      // Escaping attachment
    } else if( $toType == 'album_photo_new' && $objectType == 'album' ) {
      //PREPARING AN ARRAY TO INSERT ATTACHMENT
      $newAttachmentData = array(
        'action_id' => $actionId,
        'type' => 'album_photo',
        'id' => $tempData,
        'mode' => 1
      );
      //INSERT ATTACHMENT
      $this->getToDb()->insert('engine4_activity_attachments', $newAttachmentData);
      $photoIds = $this->getFromDb()->select()
        ->from($this->getfromPrefix() . 'photo_feed', 'photo_id')
        ->where('feed_id = ?', $data['feed_id'])
        ->query()
        ->fetchAll(Zend_Db::FETCH_COLUMN);
      $newAttachmentData = array();
      //INSERT ATTACHMENT
      foreach( $photoIds as $photoId ) {
        $newAttachmentData = array(
          'action_id' => $data['feed_id'],
          'type' => 'album_photo',
          'id' => $photoId,
          'mode' => 1
        );
        $this->getToDb()->insert('engine4_activity_attachments', $newAttachmentData);
      }
    } else if( $toType != 'status' ) {
      if( $attachmentType == '' )
        $attachmentType = $objectType;
      //PREPARING AN ARRAY TO INSERT ATTACHMENT
      $newAttachmentData = array(
        'action_id' => $actionId,
        'type' => $attachmentType,
        'id' => $tempData,
        'mode' => $mode
      );
      //INSERT ATTACHMENT
      $this->getToDb()->insert('engine4_activity_attachments', $newAttachmentData);
    }

    return $newData;
  }

}

/*
 * 
CREATE TABLE IF NOT EXISTS `phpfox_feed` (
  `feed_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `app_id` int(10) unsigned NOT NULL DEFAULT '0',
  `privacy` tinyint(1) NOT NULL DEFAULT '0',
  `privacy_comment` tinyint(1) NOT NULL DEFAULT '0',
  `type_id` varchar(75) NOT NULL,
  `user_id` int(10) unsigned NOT NULL,
  `parent_user_id` int(10) unsigned NOT NULL DEFAULT '0',
  `item_id` int(10) unsigned NOT NULL,
  `time_stamp` int(10) unsigned NOT NULL,
  `feed_reference` int(10) NOT NULL DEFAULT '0',
  `parent_feed_id` int(10) unsigned NOT NULL DEFAULT '0',
  `parent_module_id` varchar(75) DEFAULT NULL,
  `time_update` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`feed_id`),
  KEY `privacy_2` (`privacy`,`time_stamp`,`feed_reference`),
  KEY `privacy_3` (`privacy`,`user_id`,`feed_reference`),
  KEY `privacy_4` (`privacy`,`parent_user_id`,`feed_reference`),
  KEY `type_id` (`type_id`,`item_id`,`feed_reference`),
  KEY `privacy` (`privacy`,`user_id`,`time_stamp`,`feed_reference`),
  KEY `time_stamp` (`time_stamp`,`feed_reference`),
  KEY `time_update` (`time_update`),
  KEY `privacy_5` (`privacy`,`parent_user_id`),
  KEY `user_id` (`user_id`,`feed_reference`,`time_stamp`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 */

 
/*
 * CREATE TABLE IF NOT EXISTS `phpfox_user_status` (
  `status_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL,
  `privacy` tinyint(3) NOT NULL DEFAULT '0',
  `privacy_comment` tinyint(3) NOT NULL DEFAULT '0',
  `content` mediumtext,
  `time_stamp` int(10) unsigned NOT NULL,
  `total_comment` int(10) unsigned NOT NULL DEFAULT '0',
  `total_like` int(10) unsigned NOT NULL DEFAULT '0',
  `location_latlng` varchar(100) DEFAULT NULL,
  `location_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`status_id`),
  KEY `user_id` (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 */

/*
 * CREATE TABLE IF NOT EXISTS `phpfox_photo` (
  `photo_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `album_id` int(10) unsigned NOT NULL DEFAULT '0',
  `view_id` tinyint(1) NOT NULL DEFAULT '0',
  `module_id` varchar(75) DEFAULT NULL,
  `group_id` int(10) unsigned NOT NULL DEFAULT '0',
  `type_id` tinyint(3) NOT NULL DEFAULT '0',
  `privacy` tinyint(1) NOT NULL DEFAULT '0',
  `privacy_comment` tinyint(1) NOT NULL DEFAULT '0',
  `title` varchar(255) NOT NULL,
  `user_id` int(10) unsigned NOT NULL,
  `parent_user_id` int(10) unsigned NOT NULL DEFAULT '0',
  `destination` varchar(255) DEFAULT NULL,
  `server_id` tinyint(3) NOT NULL,
  `mature` tinyint(1) NOT NULL DEFAULT '0',
  `allow_comment` tinyint(1) NOT NULL DEFAULT '0',
  `allow_rate` tinyint(1) NOT NULL DEFAULT '0',
  `time_stamp` int(10) unsigned NOT NULL,
  `total_view` int(10) unsigned NOT NULL DEFAULT '0',
  `total_comment` int(10) unsigned NOT NULL DEFAULT '0',
  `total_download` int(10) unsigned NOT NULL DEFAULT '0',
  `total_rating` decimal(3,2) NOT NULL DEFAULT '0.00',
  `total_vote` int(10) unsigned NOT NULL DEFAULT '0',
  `total_battle` int(10) unsigned NOT NULL DEFAULT '0',
  `total_like` int(10) unsigned NOT NULL DEFAULT '0',
  `total_dislike` int(10) unsigned NOT NULL DEFAULT '0',
  `is_featured` tinyint(1) NOT NULL DEFAULT '0',
  `is_cover` tinyint(1) NOT NULL DEFAULT '0',
  `allow_download` tinyint(1) NOT NULL DEFAULT '0',
  `is_sponsor` tinyint(1) NOT NULL DEFAULT '0',
  `ordering` int(10) unsigned NOT NULL DEFAULT '0',
  `is_profile_photo` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`photo_id`),
  KEY `album_id` (`album_id`,`view_id`),
  KEY `photo_id` (`photo_id`,`album_id`,`view_id`,`group_id`,`privacy`),
  KEY `view_id_2` (`view_id`,`group_id`,`type_id`,`privacy`),
  KEY `photo_id_2` (`photo_id`,`album_id`,`view_id`,`group_id`,`type_id`,`privacy`),
  KEY `view_id` (`view_id`),
  KEY `privacy` (`privacy`,`allow_rate`),
  KEY `view_id_3` (`view_id`,`group_id`,`type_id`,`user_id`),
  KEY `album_id_2` (`album_id`,`view_id`,`is_cover`),
  KEY `view_id_4` (`view_id`,`privacy`,`title`),
  KEY `view_id_5` (`view_id`,`module_id`,`group_id`,`privacy`),
  KEY `is_profile_photo` (`is_profile_photo`),
  KEY `user_id` (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 */

/*
 * 
CREATE TABLE IF NOT EXISTS `phpfox_photo_info` (
  `photo_id` int(10) unsigned NOT NULL,
  `file_name` varchar(100) NOT NULL,
  `file_size` int(10) unsigned NOT NULL DEFAULT '0',
  `mime_type` varchar(150) DEFAULT NULL,
  `extension` varchar(20) NOT NULL,
  `description` mediumtext,
  `width` smallint(4) unsigned NOT NULL DEFAULT '0',
  `height` smallint(4) unsigned NOT NULL DEFAULT '0',
  UNIQUE KEY `photo_id` (`photo_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 */

/*
 * CREATE TABLE IF NOT EXISTS `phpfox_link` (
  `link_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL,
  `module_id` varchar(75) DEFAULT NULL,
  `item_id` int(10) unsigned NOT NULL DEFAULT '0',
  `parent_user_id` int(10) unsigned NOT NULL DEFAULT '0',
  `is_custom` tinyint(1) NOT NULL DEFAULT '0',
  `link` varchar(255) NOT NULL,
  `image` varchar(255) DEFAULT NULL,
  `title` varchar(255) DEFAULT NULL,
  `description` varchar(255) DEFAULT NULL,
  `status_info` mediumtext,
  `privacy` tinyint(1) NOT NULL,
  `privacy_comment` tinyint(1) NOT NULL,
  `time_stamp` int(10) unsigned NOT NULL,
  `has_embed` tinyint(1) NOT NULL DEFAULT '0',
  `total_comment` int(10) unsigned NOT NULL DEFAULT '0',
  `total_like` int(10) unsigned NOT NULL DEFAULT '0',
  `total_dislike` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`link_id`),
  KEY `parent_user_id` (`parent_user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
 */

/*
 * CREATE TABLE IF NOT EXISTS `phpfox_music_song` (
  `song_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `view_id` tinyint(1) NOT NULL DEFAULT '0',
  `privacy` tinyint(1) NOT NULL DEFAULT '0',
  `privacy_comment` tinyint(1) NOT NULL DEFAULT '0',
  `is_featured` tinyint(1) NOT NULL DEFAULT '0',
  `is_sponsor` tinyint(1) NOT NULL DEFAULT '0',
  `album_id` mediumint(8) unsigned NOT NULL,
  `genre_id` smallint(4) unsigned NOT NULL DEFAULT '0',
  `user_id` int(10) unsigned NOT NULL,
  `title` varchar(255) NOT NULL,
  `description` varchar(255) DEFAULT NULL,
  `song_path` varchar(50) DEFAULT NULL,
  `server_id` tinyint(1) NOT NULL DEFAULT '0',
  `explicit` tinyint(1) NOT NULL,
  `duration` varchar(5) DEFAULT NULL,
  `ordering` tinyint(3) NOT NULL DEFAULT '0',
  `total_play` int(10) unsigned NOT NULL DEFAULT '0',
  `total_comment` int(10) unsigned NOT NULL DEFAULT '0',
  `total_like` int(10) unsigned NOT NULL DEFAULT '0',
  `total_dislike` int(10) unsigned NOT NULL DEFAULT '0',
  `total_score` decimal(4,2) NOT NULL DEFAULT '0.00',
  `total_rating` int(10) unsigned NOT NULL DEFAULT '0',
  `time_stamp` int(10) unsigned NOT NULL,
  `module_id` varchar(75) DEFAULT NULL,
  `item_id` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`song_id`),
  KEY `user_id` (`user_id`),
  KEY `view_id_3` (`view_id`,`privacy`),
  KEY `view_id` (`view_id`,`privacy`,`genre_id`),
  KEY `view_id_2` (`view_id`,`privacy`,`is_featured`),
  KEY `view_id_4` (`view_id`,`privacy`,`user_id`),
  KEY `view_id_5` (`view_id`,`privacy`,`title`),
  KEY `view_id_6` (`view_id`,`privacy`,`module_id`,`item_id`),
  KEY `view_id_7` (`view_id`,`privacy`,`item_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 */

/*
 * CREATE TABLE IF NOT EXISTS `phpfox_forum_post` (
  `post_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `thread_id` int(10) unsigned NOT NULL,
  `view_id` tinyint(1) NOT NULL DEFAULT '0',
  `user_id` int(10) unsigned NOT NULL,
  `title` varchar(255) DEFAULT NULL,
  `total_attachment` int(11) unsigned NOT NULL DEFAULT '0',
  `time_stamp` int(10) unsigned NOT NULL,
  `update_time` int(10) unsigned NOT NULL DEFAULT '0',
  `update_user` varchar(100) DEFAULT NULL,
  `total_like` int(10) unsigned NOT NULL DEFAULT '0',
  `total_dislike` int(10) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`post_id`),
  KEY `thread_id` (`thread_id`),
  KEY `user_id` (`user_id`),
  KEY `thread_id_2` (`thread_id`,`view_id`),
  KEY `view_id` (`view_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 */

/*
 * CREATE TABLE IF NOT EXISTS `phpfox_photo_feed` (
  `feed_id` int(10) unsigned NOT NULL,
  `photo_id` int(10) unsigned NOT NULL,
  KEY `feed_id` (`feed_id`),
  KEY `photo_id` (`photo_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 */

/*
 * CREATE TABLE IF NOT EXISTS `phpfox_photo_tag` (
  `tag_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `photo_id` int(10) unsigned NOT NULL,
  `user_id` int(11) unsigned NOT NULL,
  `tag_user_id` int(11) unsigned NOT NULL DEFAULT '0',
  `content` varchar(255) DEFAULT NULL,
  `time_stamp` int(10) unsigned NOT NULL,
  `position_x` smallint(4) unsigned NOT NULL DEFAULT '0',
  `position_y` smallint(4) unsigned NOT NULL DEFAULT '0',
  `width` smallint(4) unsigned NOT NULL DEFAULT '0',
  `height` smallint(4) unsigned NOT NULL DEFAULT '0',
  PRIMARY KEY (`tag_id`),
  KEY `photo_id` (`photo_id`),
  KEY `photo_id_2` (`photo_id`,`position_x`,`position_y`,`width`,`height`),
  KEY `photo_id_3` (`photo_id`,`tag_user_id`),
  KEY `photo_id_4` (`photo_id`,`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 */

/*
 * /*
 * CREATE TABLE IF NOT EXISTS `engine4_activity_actions` (
  `action_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `subject_type` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `subject_id` int(11) unsigned NOT NULL,
  `object_type` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `object_id` int(11) unsigned NOT NULL,
  `body` text COLLATE utf8mb4_unicode_ci,
  `params` text COLLATE utf8mb4_unicode_ci,
  `date` datetime NOT NULL,
  `attachment_count` smallint(3) unsigned NOT NULL DEFAULT '0',
  `comment_count` mediumint(5) unsigned NOT NULL DEFAULT '0',
  `like_count` mediumint(5) unsigned NOT NULL DEFAULT '0',
  `privacy` varchar(500) collate utf8mb4_unicode_ci default NULL,
  `commentable` tinyint(1) NOT NULL DEFAULT '1',
  `shareable` tinyint(1) NOT NULL DEFAULT '1',
  `user_agent` text COLLATE utf8mb4_unicode_ci,
  PRIMARY KEY (`action_id`),
  KEY `SUBJECT` (`subject_type`,`subject_id`),
  KEY `OBJECT` (`object_type`,`object_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci AUTO_INCREMENT=1 ;
 */

/*
 * CREATE TABLE IF NOT EXISTS `engine4_authorization_allow` (
  `resource_type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `resource_id` int(11) unsigned NOT NULL,
  `action` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `role` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `role_id` int(11) unsigned NOT NULL DEFAULT '0',
  `value` tinyint(1) NOT NULL DEFAULT '0',
  `params` text COLLATE utf8mb4_unicode_ci,
  PRIMARY KEY (`resource_type`,`resource_id`,`action`,`role`,`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
 */

/*
 * CREATE TABLE IF NOT EXISTS `engine4_activity_attachments` (
  `attachment_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `action_id` int(11) unsigned NOT NULL,
  `type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `id` int(11) unsigned NOT NULL,
  `mode` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`attachment_id`),
  KEY `action_id` (`action_id`),
  KEY `type_id` (`type`,`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci AUTO_INCREMENT=1 ;
 */
