/** * 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; } }
/** * 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 } } } } }