%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/learning/admin/ |
| Current File : /home/bitrix/www/bitrix/modules/learning/admin/learn_export.php |
<?
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
if (!CModule::IncludeModule('learning'))
{
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_after.php'); // second system's prolog
if (IsModuleInstalled('learning') && defined('LEARNING_FAILED_TO_LOAD_REASON'))
echo LEARNING_FAILED_TO_LOAD_REASON;
else
CAdminMessage::ShowMessage(GetMessage('LEARNING_MODULE_NOT_FOUND'));
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_admin.php'); // system's epilog
exit();
}
require_once($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/learning/prolog.php");
IncludeModuleLangFile(__FILE__);
ClearVars();
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/tar_gz.php");
set_time_limit(0);
$STEP = IntVal($STEP);
if ($STEP <= 0)
$STEP = 1;
if ($REQUEST_METHOD == "POST" && strlen($backButton) > 0)
$STEP = $STEP - 2;
if ($REQUEST_METHOD == "POST" && strlen($backButton2) > 0)
$STEP = 1;
$COURSE_ID = intval($COURSE_ID);
$strError = "";
if ($_SERVER["REQUEST_METHOD"] == "POST" && $STEP > 1 && check_bitrix_sessid())
{
if ($STEP > 1)
{
// was: $res = CCourse::GetList(Array("sort" => "asc"),Array("ID" => $COURSE_ID,"MIN_PERMISSION" => "W"));
// TODO: think about better way of rights check (for every exported lesson, I think).
$res = CCourse::GetList(Array("sort" => "asc"),Array("ID" => $COURSE_ID,'ACCESS_OPERATIONS' => CLearnAccess::OP_LESSON_READ | CLearnAccess::OP_LESSON_WRITE));
if (!$arCourse = $res->GetNext())
$strError .= GetMessage("LEARNING_BAD_COURSE")."<br>";
if (strlen($strError) > 0)
$STEP = 1;
}
if ($STEP > 2)
{
// Check filename
$pattern = '#^[0-9a-zA-Z_.-/]+$#';
$antiPattern = '#[^0-9a-zA-Z_.-/]#';
if (preg_match($pattern, $DATA_FILE_NAME) !== 1)
{
$DATA_FILE_NAME = preg_replace($antiPattern, '', $DATA_FILE_NAME);
$strError .= GetMessage('LEARNING_BAD_FILENAME');
$STEP = 2;
}
}
if ($STEP > 2)
{
$tmp_dir = BX_PERSONAL_ROOT."/tmp/learning/".uniqid(rand());
CheckDirPath($_SERVER["DOCUMENT_ROOT"].$tmp_dir);
$exportFolder = '/upload/learning_export/';
if ( ! file_exists($_SERVER["DOCUMENT_ROOT"] . $exportFolder) )
mkdir ($_SERVER["DOCUMENT_ROOT"] . $exportFolder);
$DATA_FILE_NAME = $exportFolder . BX_basename($DATA_FILE_NAME);
if (strlen($DATA_FILE_NAME) <= 0)
{
$strError .= GetMessage("LEARNING_NO_DATA_FILE")."<br>";
}
else
{
$bUseCompression = true;
if(!extension_loaded('zlib') || !function_exists("gzcompress"))
$bUseCompression = false;
if (substr($DATA_FILE_NAME, -6) != "tar.gz")
$DATA_FILE_NAME .= ".tar.gz";
if (is_file($_SERVER["DOCUMENT_ROOT"].$DATA_FILE_NAME))
@unlink($_SERVER["DOCUMENT_ROOT"].$DATA_FILE_NAME);
if ($arCourse["SCORM"] == "Y")
{
$dir = "/".(COption::GetOptionString("main", "upload_dir", "upload"))."/learning/scorm/".$COURSE_ID."/";
$arc = new CArchiver($_SERVER["DOCUMENT_ROOT"].$DATA_FILE_NAME, $bUseCompression);
$res = $arc->Add("\"".$_SERVER["DOCUMENT_ROOT"].$dir."\"", false, $_SERVER["DOCUMENT_ROOT"].$dir);
if (!$res)
{
$arErrors = &$arc->GetErrors();
foreach ($arErrors as $value)
$strError .= "[".$value[0]."] ".$value[1]."<br>";
}
}
else
{
$package = new CCoursePackage($COURSE_ID);
if (strlen($package->LAST_ERROR) <= 0)
{
$success = $package->CreatePackage($tmp_dir);
if ($success)
{
$arc = new CArchiver($_SERVER["DOCUMENT_ROOT"].$DATA_FILE_NAME, $bUseCompression);
$res = $arc->Add("\"".$_SERVER['DOCUMENT_ROOT'].$tmp_dir."\"", false, $_SERVER['DOCUMENT_ROOT'].$tmp_dir);
if (!$res)
{
$arErrors = &$arc->GetErrors();
foreach ($arErrors as $value)
$strError .= "[".$value[0]."] ".$value[1]."<br>";
}
DeleteDirFilesEx($tmp_dir);
}
else
{
$strError .= $package->LAST_ERROR;
}
}
else
{
$strError .= $package->LAST_ERROR;
}
}
}
if (strlen($strError) > 0)
$STEP = 2;
}
}
$APPLICATION->SetTitle(GetMessage("LEARNING_PAGE_TITLE")." ".$STEP);
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php");
if (defined("LEARNING_ADMIN_ACCESS_DENIED"))
$APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"), false);
CAdminMessage::ShowMessage($strError);
?>
<form method="POST" action="<?echo $APPLICATION->GetCurPage()?>?lang=<?echo LANG ?>" ENCTYPE="multipart/form-data">
<input type="hidden" name="STEP" value="<?echo $STEP + 1;?>">
<?=bitrix_sessid_post()?>
<?
if ($STEP > 1)
{
?><input type="hidden" name="COURSE_ID" value="<?echo $COURSE_ID ?>"><?
}
?>
<?
$aTabs = array(
array("DIV" => "edit1", "TAB" => GetMessage("LEARNING_ADMIN_TAB1"), "TITLE" => GetMessage("LEARNING_ADMIN_TAB1_EX")),
array("DIV" => "edit2", "TAB" => GetMessage("LEARNING_ADMIN_TAB2"), "TITLE" => GetMessage("LEARNING_ADMIN_TAB2_EX")),
array("DIV" => "edit3", "TAB" => GetMessage("LEARNING_ADMIN_TAB3"), "TITLE" => GetMessage("LEARNING_ADMIN_TAB3_EX"))
);
$tabControl = new CAdminTabControl("tabControl", $aTabs, false, true);
$tabControl->Begin();
?>
<?
$tabControl->BeginNextTab();
if ($STEP < 2)
{
?>
<tr>
<td><?echo GetMessage("LEARNING_COURSES") ?>:</td>
<td>
<select name="COURSE_ID" style="width:300px;">
<?
// was: $course = CCourse::GetList(array("SORT" => "ASC"), array("MIN_PERMISSION" => "W"));
// TODO: think about better way of rights check (for every exported lesson, I think).
$course = CCourse::GetList(array("SORT" => "ASC"), array('ACCESS_OPERATIONS' => CLearnAccess::OP_LESSON_READ | CLearnAccess::OP_LESSON_WRITE));
while ($course->ExtractFields("f_"))
{
?><option value="<?echo $f_ID ?>" <?if (IntVal($f_ID)==$COURSE_ID) echo "selected";?>><?echo $f_NAME ?></option><?
}
?>
</select>
</td>
</tr>
<?
}
$tabControl->EndTab();
?>
<?
$tabControl->BeginNextTab();
if ($STEP == 2)
{
?>
<tr class="heading">
<td colspan="2"><?echo GetMessage("LEARNING_DATA_FILE_NAME") ?></td>
</tr>
<tr>
<td><?echo GetMessage("LEARNING_DATA_FILE_NAME1") ?>:<br> </td>
<td valign="top">
<input type="text" name="DATA_FILE_NAME" size="40" value="<?echo (strlen($DATA_FILE_NAME)>0)?htmlspecialcharsbx($DATA_FILE_NAME):"package".$COURSE_ID.".tar.gz"?>"><br>
<small><?echo GetMessage("LEARNING_DATA_FILE_NAME1_DESC") ?></small>
</td>
</tr>
<?
}
$tabControl->EndTab();
?>
<?
$tabControl->BeginNextTab();
if ($STEP > 2)
{
?>
<tr>
<td colspan="2"><b><?echo GetMessage("LEARNING_SUCCESS") ?></b></td>
</tr>
<tr>
<td colspan="2">
<?php
$tmp = '/' . $DATA_FILE_NAME;
$arAllowedPrefixes = array('http://', 'ftp://', 'https://', '/');
foreach ($arAllowedPrefixes as $prefix)
{
if (substr($DATA_FILE_NAME, 0, strlen($prefix)) === $prefix)
{
$tmp = $DATA_FILE_NAME;
break;
}
}
echo str_replace("%DATA_URL%", "<a href=\"".htmlspecialcharsbx($tmp)."\" target=\"_blank\">".htmlspecialcharsbx($DATA_FILE_NAME)."</a>", GetMessage("LEARNING_SU_ALL1"));
?>
</td>
</tr>
<?
}
$tabControl->EndTab();
?>
<?
$tabControl->Buttons();
?>
<?if ($STEP < 3):?>
<?if ($STEP > 1):?>
<input type="submit" name="backButton" value="<< <?echo GetMessage("LEARNING_BACK") ?>">
<?endif?>
<input type="submit" class="adm-btn-green" value="<?echo ($STEP==2)?GetMessage("LEARNING_NEXT_STEP_F"):GetMessage("LEARNING_NEXT_STEP") ?> >>" name="submit_btn">
<?else:?>
<input type="submit" name="backButton2" value="<< <?echo GetMessage("LEARNING_2_1_STEP") ?>">
<?endif;?>
<?
$tabControl->End();
?>
</form>
<script language="JavaScript">
<!--
<?if ($STEP < 2):?>
tabControl.SelectTab("edit1");
tabControl.DisableTab("edit2");
tabControl.DisableTab("edit3");
<?elseif ($STEP == 2):?>
tabControl.SelectTab("edit2");
tabControl.DisableTab("edit1");
tabControl.DisableTab("edit3");
<?elseif ($STEP > 2):?>
tabControl.SelectTab("edit3");
tabControl.DisableTab("edit1");
tabControl.DisableTab("edit2");
<?endif;?>
//-->
</script>
<?require($DOCUMENT_ROOT."/bitrix/modules/main/include/epilog_admin.php");?>