added Code::xhr_import() to support ajax based file/directory adding in the code folder view
This commit is contained in:
parent
e1d111f026
commit
f508388640
@ -364,6 +364,77 @@ class Code extends Controller
|
|||||||
return $this->_edit ($projectid, $path, $rev, 'blame');
|
return $this->_edit ($projectid, $path, $rev, 'blame');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function xhr_import ($projectid = '', $path = '')
|
||||||
|
{
|
||||||
|
$this->load->model ('ProjectModel', 'projects');
|
||||||
|
$this->load->model ('SubversionModel', 'subversion');
|
||||||
|
$this->load->library ('upload');
|
||||||
|
|
||||||
|
$login = $this->login->getUser ();
|
||||||
|
$revision_saved = -1;
|
||||||
|
|
||||||
|
if ($login['id'] == '')
|
||||||
|
{
|
||||||
|
$status = 'signin';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$path = $this->converter->HexToAscii ($path);
|
||||||
|
if ($path == '.') $path = ''; /* treat a period specially */
|
||||||
|
$path = $this->_normalize_path ($path);
|
||||||
|
|
||||||
|
$project = $this->projects->get ($projectid);
|
||||||
|
if ($project === FALSE)
|
||||||
|
{
|
||||||
|
$status = "dberr - failed to get the project {$projectid}";
|
||||||
|
}
|
||||||
|
else if ($project === NULL)
|
||||||
|
{
|
||||||
|
$status = "noent - no such project {$projectid}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$post_new_message = $this->input->post('code_folder_new_message');
|
||||||
|
$post_max_item_no = $this->input->post('code_folder_new_item_count');
|
||||||
|
$post_unzip = $this->input->post('code_folder_new_item_unzip');
|
||||||
|
if ($post_new_message !== FALSE && $post_max_item_no !== FALSE)
|
||||||
|
{
|
||||||
|
$import_files = array ();
|
||||||
|
for ($i = 0; $i < $post_max_item_no; $i++)
|
||||||
|
{
|
||||||
|
$d = $this->input->post("code_folder_new_item_dir_$i");
|
||||||
|
|
||||||
|
if (strlen($d) > 0)
|
||||||
|
{
|
||||||
|
array_push ($import_files, array ('type' => 'dir', 'name' => $d));
|
||||||
|
}
|
||||||
|
|
||||||
|
$fid = "code_folder_new_item_file_$i";
|
||||||
|
if (array_key_exists($fid, $_FILES) && $_FILES[$fid]['name'] != '')
|
||||||
|
{
|
||||||
|
array_push ($import_files, array ('type' => 'file', 'name' => $_FILES[$fid]['name'], 'fid' => $fid, 'unzip' => $post_unzip));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count($import_files) > 0 && $this->subversion->importFiles ($projectid, $path, $login['id'], $post_new_message, $import_files, $this->upload) === FALSE)
|
||||||
|
{
|
||||||
|
$status = 'repoerr - ' . $this->subversion->import_files_errmsg;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$status = 'ok';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$status = 'posterr - invalid post data';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
print $status;
|
||||||
|
}
|
||||||
|
|
||||||
function enjson_save ($projectid = '', $path = '')
|
function enjson_save ($projectid = '', $path = '')
|
||||||
{
|
{
|
||||||
$this->load->model ('ProjectModel', 'projects');
|
$this->load->model ('ProjectModel', 'projects');
|
||||||
|
@ -49,9 +49,27 @@
|
|||||||
$revreq = "/{$revision}";
|
$revreq = "/{$revision}";
|
||||||
$revreqroot = '/' . $this->converter->AsciiToHex('.') . $revreq;
|
$revreqroot = '/' . $this->converter->AsciiToHex('.') . $revreq;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$hex_headpath = $this->converter->AsciiToHex($headpath);
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
|
|
||||||
|
function show_alert (outputMsg, titleMsg)
|
||||||
|
{
|
||||||
|
$("#code_folder_mainarea_alert").html(outputMsg).dialog({
|
||||||
|
title: titleMsg,
|
||||||
|
resizable: true,
|
||||||
|
modal: true,
|
||||||
|
width: 500,
|
||||||
|
buttons: {
|
||||||
|
"OK": function () {
|
||||||
|
$(this).dialog("close");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function show_tooltip(id, x, y, contents) {
|
function show_tooltip(id, x, y, contents) {
|
||||||
$('<div id="' + id + '">' + contents + '</div>').css( {
|
$('<div id="' + id + '">' + contents + '</div>').css( {
|
||||||
position: 'absolute',
|
position: 'absolute',
|
||||||
@ -72,7 +90,7 @@ function show_loc_by_lang_graph (response)
|
|||||||
var loc = $.parseJSON(response);
|
var loc = $.parseJSON(response);
|
||||||
if (loc == null)
|
if (loc == null)
|
||||||
{
|
{
|
||||||
alert ('Invalid data received');
|
show_alert ('Invalid data received', "<?php print $this->lang->line('Error')?>");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -151,7 +169,7 @@ function show_loc_by_file_graph (response)
|
|||||||
var loc = $.parseJSON(response);
|
var loc = $.parseJSON(response);
|
||||||
if (loc == null)
|
if (loc == null)
|
||||||
{
|
{
|
||||||
alert ('Invalid data received');
|
show_alert ('Invalid data received', "<?php print $this->lang->line('Error')?>");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -179,12 +197,12 @@ function render_readme()
|
|||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
var new_item_no = 0;
|
var new_item_no = 0;
|
||||||
|
var import_in_progress = 0;
|
||||||
|
|
||||||
function get_new_item_html(no, type, name)
|
function get_new_item_html(no, type, name)
|
||||||
{
|
{
|
||||||
return codepot_sprintf ('<li><input type="%s" name="code_folder_new_item_%s_%d" /></li>', type, name, no);
|
return codepot_sprintf ('<li><input type="%s" id="code_folder_mainarea_new_item_%s_%d" name="code_folder_new_item_%s_%d" /></li>', type, name, no, name, no);
|
||||||
}
|
}
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
@ -197,25 +215,83 @@ $(function () {
|
|||||||
|
|
||||||
$("#code_folder_mainarea_new_form_tabs").tabs ();
|
$("#code_folder_mainarea_new_form_tabs").tabs ();
|
||||||
|
|
||||||
$("#code_folder_mainarea_new_form_div").dialog (
|
$('#code_folder_mainarea_new_form_div').dialog (
|
||||||
{
|
{
|
||||||
title: '<?php print $this->lang->line('New');?>',
|
title: '<?php print $this->lang->line('New');?>',
|
||||||
resizable: true,
|
resizable: true,
|
||||||
autoOpen: false,
|
autoOpen: false,
|
||||||
|
width: 500,
|
||||||
modal: true,
|
modal: true,
|
||||||
buttons: {
|
buttons: {
|
||||||
'More': function () {
|
'More': function () {
|
||||||
|
if (import_in_progress > 0) return;
|
||||||
|
|
||||||
++new_item_no;
|
++new_item_no;
|
||||||
$('#code_folder_mainarea_new_file_form_item_list').append (get_new_item_html(new_item_no, 'file', 'file'));
|
$('#code_folder_mainarea_new_file_form_item_list').append (get_new_item_html(new_item_no, 'file', 'file'));
|
||||||
$('#code_folder_mainarea_new_dir_form_item_list').append (get_new_item_html(new_item_no, 'text', 'dir'));
|
$('#code_folder_mainarea_new_dir_form_item_list').append (get_new_item_html(new_item_no, 'text', 'dir'));
|
||||||
},
|
},
|
||||||
'<?php print $this->lang->line('OK')?>': function () {
|
'<?php print $this->lang->line('OK')?>': function () {
|
||||||
|
if (import_in_progress > 0) return;
|
||||||
|
|
||||||
$('#code_folder_mainarea_new_item_count').val (new_item_no + 1);
|
$('#code_folder_mainarea_new_item_count').val (new_item_no + 1);
|
||||||
|
|
||||||
|
if (!!window.FormData)
|
||||||
|
{
|
||||||
|
// FormData is supported
|
||||||
|
import_in_progress = 1;
|
||||||
|
|
||||||
|
var form_data = new FormData();
|
||||||
|
|
||||||
|
form_data.append ('code_folder_new_message', $('#code_folder_mainarea_new_message').val());
|
||||||
|
form_data.append ('code_folder_new_item_count', $('#code_folder_mainarea_new_item_count').val());
|
||||||
|
form_data.append ('code_folder_new_item_unzip', $('#code_folder_mainarea_new_item_unzip').val());
|
||||||
|
for (var i = 0; i <= new_item_no; i++)
|
||||||
|
{
|
||||||
|
var f = $('#code_folder_mainarea_new_item_file_' + i).get(0).files[0];
|
||||||
|
if (f != null) form_data.append ('code_folder_new_item_file_' + i, f);
|
||||||
|
|
||||||
|
var d = $('#code_folder_mainarea_new_item_dir_' + i).val();
|
||||||
|
if (d != null && d != '') form_data.append ('code_folder_new_item_dir_' + i, d);
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#code_folder_mainarea_new_form_div').dialog('disable');
|
||||||
|
$.ajax({
|
||||||
|
url: codepot_merge_path('<?php print site_url() ?>', '<?php print "/code/xhr_import/{$project->id}/{$hex_headpath}"; ?>'),
|
||||||
|
type: 'POST',
|
||||||
|
data: form_data,
|
||||||
|
mimeType: 'multipart/form-data',
|
||||||
|
contentType: false,
|
||||||
|
processData: false,
|
||||||
|
cache: false,
|
||||||
|
|
||||||
|
success: function (data, textStatus, jqXHR) {
|
||||||
|
import_in_progress = 0;
|
||||||
|
$('#code_folder_mainarea_new_form_div').dialog('enable');
|
||||||
|
$('#code_folder_mainarea_new_form_div').dialog('close');
|
||||||
|
if (data == 'ok')
|
||||||
|
$(location).attr ('href', codepot_merge_path('<?php print site_url(); ?>', '<?php print "/code/file/{$project->id}/{$hex_headpath}"; ?>'));
|
||||||
|
else
|
||||||
|
show_alert ('<pre>' + codepot_htmlspecialchars(data) + '</pre>', '');
|
||||||
|
},
|
||||||
|
|
||||||
|
error: function (jqXHR, textStatus, errorThrown) {
|
||||||
|
import_in_progress = 0;
|
||||||
|
$('#code_folder_mainarea_new_form_div').dialog('enable');
|
||||||
|
$('#code_folder_mainarea_new_form_div').dialog('close');
|
||||||
|
show_alert ('Failed - ' + errorThrown, "<?php print $this->lang->line('Error')?>");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$('#code_folder_mainarea_new_form_div').dialog('close');
|
||||||
$('#code_folder_mainarea_new_form').submit();
|
$('#code_folder_mainarea_new_form').submit();
|
||||||
$(this).dialog('close');
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
'<?php print $this->lang->line('Cancel')?>': function () {
|
'<?php print $this->lang->line('Cancel')?>': function () {
|
||||||
$(this).dialog('close');
|
if (import_in_progress > 0) return;
|
||||||
|
$('#code_folder_mainarea_new_form_div').dialog('close');
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
@ -223,8 +299,8 @@ $(function () {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
$("#code_folder_mainarea_new_button").button().click (function() {
|
$('#code_folder_mainarea_new_button').button().click (function() {
|
||||||
$("#code_folder_mainarea_new_form_div").dialog('open');
|
$('#code_folder_mainarea_new_form_div').dialog('open');
|
||||||
});
|
});
|
||||||
|
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
@ -495,8 +571,7 @@ $this->load->view (
|
|||||||
print ' | ';
|
print ' | ';
|
||||||
}
|
}
|
||||||
|
|
||||||
$xpar = $this->converter->AsciiTohex ($headpath);
|
print anchor ("code/file/{$project->id}/${hex_headpath}/{$prev_revision}", '<i class="fa fa-arrow-circle-left"></i>');
|
||||||
print anchor ("code/file/{$project->id}/${xpar}/{$prev_revision}", '<i class="fa fa-arrow-circle-left"></i>');
|
|
||||||
print ' ';
|
print ' ';
|
||||||
|
|
||||||
// anchor to the revision history at the root directory
|
// anchor to the revision history at the root directory
|
||||||
@ -512,7 +587,7 @@ $this->load->view (
|
|||||||
}
|
}
|
||||||
|
|
||||||
print ' ';
|
print ' ';
|
||||||
print anchor ("code/file/{$project->id}/${xpar}/{$next_revision}", '<i class="fa fa-arrow-circle-right"></i>');
|
print anchor ("code/file/{$project->id}/${hex_headpath}/{$next_revision}", '<i class="fa fa-arrow-circle-right"></i>');
|
||||||
|
|
||||||
|
|
||||||
if ((isset($login['id']) && $login['id'] != '') || $file_count > 0)
|
if ((isset($login['id']) && $login['id'] != '') || $file_count > 0)
|
||||||
@ -557,11 +632,10 @@ $this->load->view (
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
print '<div class="menu" id="code_folder_mainarea_menu">';
|
print '<div class="menu" id="code_folder_mainarea_menu">';
|
||||||
$xpar = $this->converter->AsciiTohex ($headpath);
|
|
||||||
if ($revision > 0 && $revision < $next_revision)
|
if ($revision > 0 && $revision < $next_revision)
|
||||||
{
|
{
|
||||||
$head_revision_text = '<i class="fa fa-exclamation-triangle" style="color:#CC2222"></i> ' . $this->lang->line('Head revision');
|
$head_revision_text = '<i class="fa fa-exclamation-triangle" style="color:#CC2222"></i> ' . $this->lang->line('Head revision');
|
||||||
print anchor ("code/file/{$project->id}/{$xpar}", $head_revision_text);
|
print anchor ("code/file/{$project->id}/{$hex_headpath}", $head_revision_text);
|
||||||
print ' | ';
|
print ' | ';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -573,17 +647,17 @@ $this->load->view (
|
|||||||
|
|
||||||
if ($revision > 0)
|
if ($revision > 0)
|
||||||
{
|
{
|
||||||
if ($xpar == '') $revtrailer = $revreqroot;
|
if ($hex_headpath == '') $revtrailer = $revreqroot;
|
||||||
else $revtrailer = "/{$xpar}{$revreq}";
|
else $revtrailer = "/{$hex_headpath}{$revreq}";
|
||||||
print anchor ("code/history/{$project->id}{$revtrailer}", $history_anchor_text);
|
print anchor ("code/history/{$project->id}{$revtrailer}", $history_anchor_text);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print anchor ("code/history/{$project->id}/{$xpar}", $history_anchor_text);
|
print anchor ("code/history/{$project->id}/{$hex_headpath}", $history_anchor_text);
|
||||||
}
|
}
|
||||||
|
|
||||||
print ' | ';
|
print ' | ';
|
||||||
print anchor ("code/fetch/{$project->id}/${xpar}{$revreq}", $download_anchor_text);
|
print anchor ("code/fetch/{$project->id}/${hex_headpath}{$revreq}", $download_anchor_text);
|
||||||
|
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
@ -763,7 +837,7 @@ $this->load->view (
|
|||||||
<input type='hidden' name='code_folder_new_item_count' id='code_folder_mainarea_new_item_count' />
|
<input type='hidden' name='code_folder_new_item_count' id='code_folder_mainarea_new_item_count' />
|
||||||
|
|
||||||
<div><?php print $this->lang->line('Message'); ?>:</div>
|
<div><?php print $this->lang->line('Message'); ?>:</div>
|
||||||
<div><textarea type='textarea' name='code_folder_new_message' style='width:100%;'></textarea></div>
|
<div><textarea type='textarea' id='code_folder_mainarea_new_message' name='code_folder_new_message' style='width:100%;'></textarea></div>
|
||||||
|
|
||||||
<div id="code_folder_mainarea_new_form_tabs" style="width:100%;">
|
<div id="code_folder_mainarea_new_form_tabs" style="width:100%;">
|
||||||
<ul>
|
<ul>
|
||||||
@ -771,7 +845,7 @@ $this->load->view (
|
|||||||
<li><a href="#code_folder_mainarea_new_dir_div">Directory</a></li>
|
<li><a href="#code_folder_mainarea_new_dir_div">Directory</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<div id="code_folder_mainarea_new_file_div">
|
<div id="code_folder_mainarea_new_file_div">
|
||||||
<div><input type='checkbox' name='code_folder_new_item_unzip' value='yes'/><?php print $this->lang->line('Unzip a zip file'); ?></div>
|
<div><input type='checkbox' id='code_folder_mainarea_new_item_unzip' name='code_folder_new_item_unzip' value='yes'/><?php print $this->lang->line('Unzip a zip file'); ?></div>
|
||||||
<div><ul id='code_folder_mainarea_new_file_form_item_list'></ul></div>
|
<div><ul id='code_folder_mainarea_new_file_form_item_list'></ul></div>
|
||||||
</div>
|
</div>
|
||||||
<div id="code_folder_mainarea_new_dir_div">
|
<div id="code_folder_mainarea_new_dir_div">
|
||||||
@ -784,6 +858,8 @@ $this->load->view (
|
|||||||
|
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
|
<div id='code_folder_mainarea_alert'></div>
|
||||||
|
|
||||||
</div> <!-- code_folder_mainarea -->
|
</div> <!-- code_folder_mainarea -->
|
||||||
|
|
||||||
<div class='footer-pusher'></div> <!-- for sticky footer -->
|
<div class='footer-pusher'></div> <!-- for sticky footer -->
|
||||||
|
Loading…
x
Reference in New Issue
Block a user