/**
  * Creates a transport file for easily transferring Yaga configurations across
  * installs
  *
  * @param array An array containing the config areas to transfer
  * @param string Where to save the transport file
  * @return mixed False on failure, the path to the transport file on success
  */
 protected function _ExportData($Include = array(), $Path = NULL)
 {
     $StartTime = microtime(TRUE);
     $Info = new stdClass();
     $Info->Version = C('Yaga.Version', '?.?');
     $Info->StartDate = date('Y-m-d H:i:s');
     if (is_null($Path)) {
         $Path = PATH_UPLOADS . DS . 'export' . date('Y-m-d-His') . '.yaga.zip';
     }
     $FH = new ZipArchive();
     $Images = array();
     $Hashes = array();
     if ($FH->open($Path, ZipArchive::CREATE) !== TRUE) {
         $this->Form->AddError(sprintf(T('Yaga.Error.ArchiveCreate'), $FH->getStatusString()));
         return FALSE;
     }
     // Add configuration items
     $Info->Config = 'configs.yaga';
     $Configs = Gdn::Config('Yaga', array());
     unset($Configs['Version']);
     $ConfigData = serialize($Configs);
     $FH->addFromString('configs.yaga', $ConfigData);
     $Hashes[] = md5($ConfigData);
     // Add actions
     if ($Include['Action']) {
         $Info->Action = 'actions.yaga';
         $Actions = Yaga::ActionModel()->Get('Sort', 'asc');
         $this->SetData('ActionCount', count($Actions));
         $ActionData = serialize($Actions);
         $FH->addFromString('actions.yaga', $ActionData);
         $Hashes[] = md5($ActionData);
     }
     // Add ranks and associated image
     if ($Include['Rank']) {
         $Info->Rank = 'ranks.yaga';
         $Ranks = Yaga::RankModel()->Get('Level', 'asc');
         $this->SetData('RankCount', count($Ranks));
         $RankData = serialize($Ranks);
         $FH->addFromString('ranks.yaga', $RankData);
         array_push($Images, C('Yaga.Ranks.Photo'), NULL);
         $Hashes[] = md5($RankData);
     }
     // Add badges and associated images
     if ($Include['Badge']) {
         $Info->Badge = 'badges.yaga';
         $Badges = Yaga::BadgeModel()->Get();
         $this->SetData('BadgeCount', count($Badges));
         $BadgeData = serialize($Badges);
         $FH->addFromString('badges.yaga', $BadgeData);
         $Hashes[] = md5($BadgeData);
         foreach ($Badges as $Badge) {
             array_push($Images, $Badge->Photo);
         }
     }
     // Add in any images
     $FilteredImages = array_filter($Images);
     $ImageCount = count($FilteredImages);
     $this->SetData('ImageCount', $ImageCount);
     if ($ImageCount > 0) {
         $FH->addEmptyDir('images');
     }
     foreach ($FilteredImages as $Image) {
         if ($FH->addFile('.' . $Image, 'images/' . $Image) === FALSE) {
             $this->Form->AddError(sprintf(T('Yaga.Error.AddFile'), $FH->getStatusString()));
             //return FALSE;
         }
         $Hashes[] = md5_file('.' . $Image);
     }
     // Save all the hashes
     sort($Hashes);
     $Info->MD5 = md5(implode(',', $Hashes));
     $Info->EndDate = date('Y-m-d H:i:s');
     $EndTime = microtime(TRUE);
     $TotalTime = $EndTime - $StartTime;
     $m = floor($TotalTime / 60);
     $s = $TotalTime - $m * 60;
     $Info->ElapsedTime = sprintf('%02d:%02.2f', $m, $s);
     $FH->setArchiveComment(serialize($Info));
     if ($FH->close()) {
         return $Path;
     } else {
         $this->Form->AddError(sprintf(T('Yaga.Error.ArchiveSave'), $FH->getStatusString()));
         return FALSE;
     }
 }
Beispiel #2
0
 /**
  * Apply any applicable rank perks when the session first starts.
  * @param UserModel $Sender
  */
 public function UserModel_AfterGetSession_Handler($Sender)
 {
     if (!C('Yaga.Ranks.Enabled')) {
         return;
     }
     $User =& $Sender->EventArguments['User'];
     $RankID = $User->RankID;
     if (is_null($RankID)) {
         return;
     }
     $RankModel = Yaga::RankModel();
     $Perks = $RankModel->GetPerks($RankID);
     // Apply all the perks
     foreach ($Perks as $Perk => $PerkValue) {
         $PerkType = substr($Perk, 0, 4);
         $PerkKey = substr($Perk, 4);
         if ($PerkType === 'Conf') {
             $this->_ApplyCustomConfigs($PerkKey, $PerkValue);
         } else {
             if ($PerkType === 'Perm' && $PerkValue === 'grant') {
                 $this->_GrantPermission($User, $PerkKey);
             } else {
                 if ($PerkType === 'Perm' && $PerkValue === 'revoke') {
                     $this->_RevokePermission($User, $PerkKey);
                 } else {
                     // Do nothing
                     // TODO: look into firing a custom event
                 }
             }
         }
     }
 }