added file addition and file editing feature in the file show view

enhanced the file home view to show a file entry without actual upload files.
updated the wiki show view not to use the colum-count css element when the count is 1
This commit is contained in:
hyung-hwan 2015-09-12 05:45:24 +00:00
parent 798ff45888
commit 65b0e818cc
7 changed files with 749 additions and 67 deletions

View File

@ -404,7 +404,7 @@ class File extends Controller
if (strpos($_FILES[$fid]['name'], ':') !== FALSE ||
strpos($_FILES[$fid]['name'], '/') !== FALSE)
{
/* for wiki */
// prevents these letters for wiki creole
$status = "error - colon or slash not allowed - {$_FILES[$fid]['name']}";
break;
}
@ -435,6 +435,172 @@ class File extends Controller
print $status;
}
function xhr_add_file ($projectid = '', $name = '')
{
$this->load->model ('ProjectModel', 'projects');
$this->load->model ('FileModel', 'files');
$this->load->library ('upload');
$login = $this->login->getUser ();
$revision_saved = -1;
if ($login['id'] == '')
{
$status = 'error - anonymous user';
}
else
{
$name = $this->converter->HexToAscii ($name);
$project = $this->projects->get ($projectid);
if ($project === FALSE)
{
$status = "error - failed to get the project {$projectid}";
}
else if ($project === NULL)
{
$status = "error - no such project {$projectid}";
}
else if (!$login['sysadmin?'] &&
$this->projects->projectHasMember($projectid, $login['id']) === FALSE)
{
$status = "error - not a member {$login['id']}";
}
else
{
$post_add_file_count = $this->input->post('file_add_file_count');
if ($post_add_file_count === FALSE || $post_add_file_count <= 0) $post_add_file_count = 0;
$status = '';
$add_files = array ();
for ($i = 0; $i < $post_add_file_count; $i++)
{
$fid = "file_add_file_{$i}";
if (array_key_exists($fid, $_FILES) && $_FILES[$fid]['name'] != '')
{
$d = $this->input->post("file_add_file_desc_{$i}");
if ($d === FALSE || ($d = trim($d)) == '')
{
$status = "error - no short description for {$_FILES[$fid]['name']}";
break;
}
if (strpos($_FILES[$fid]['name'], ':') !== FALSE ||
strpos($_FILES[$fid]['name'], '/') !== FALSE)
{
// prevents these letters for wiki creole
$status = "error - colon or slash not allowed - {$_FILES[$fid]['name']}";
break;
}
array_push ($add_files, array ('fid' => $fid, 'name' => $_FILES[$fid]['name'], 'desc' => $d));
}
}
if ($status == '')
{
if (count($add_files) <= 0)
{
$status = 'error - no files uploaded';
}
else if ($this->files->addFiles ($login['id'], $projectid, $name, $add_files, $this->upload) === FALSE)
{
$status = 'error - ' . $this->files->getErrorMessage();
}
else
{
$status = 'ok';
}
}
}
}
print $status;
}
function xhr_edit_file ($projectid = '', $name = '')
{
$this->load->model ('ProjectModel', 'projects');
$this->load->model ('FileModel', 'files');
$login = $this->login->getUser ();
$revision_saved = -1;
if ($login['id'] == '')
{
$status = 'error - anonymous user';
}
else
{
$name = $this->converter->HexToAscii ($name);
$project = $this->projects->get ($projectid);
if ($project === FALSE)
{
$status = "error - failed to get the project {$projectid}";
}
else if ($project === NULL)
{
$status = "error - no such project {$projectid}";
}
else if (!$login['sysadmin?'] &&
$this->projects->projectHasMember($projectid, $login['id']) === FALSE)
{
$status = "error - not a member {$login['id']}";
}
else
{
$post_edit_file_count = $this->input->post('file_edit_file_count');
if ($post_edit_file_count === FALSE || $post_edit_file_count <= 0) $post_edit_file_count = 0;
$status = '';
$edit_files = array ();
for ($i = 0; $i < $post_edit_file_count; $i++)
{
$n = $this->input->post("file_edit_file_name_{$i}");
$k = $this->input->post("file_edit_file_kill_{$i}");
$d = $this->input->post("file_edit_file_desc_{$i}");
if ($n != '')
{
if ($k == 'yes')
{
array_push ($edit_files, array ('name' => $n, 'kill' => $k));
}
else if ($d !== FALSE)
{
if (($d = trim($d)) == '')
{
$status = "error - no short description for {$n}";
break;
}
array_push ($edit_files, array ('name' => $n, 'desc' => $d));
}
}
}
if ($status == '')
{
if (count($edit_files) <= 0)
{
//$status = 'error - no input avaialble';
$status = 'ok';
}
else if ($this->files->editFiles ($login['id'], $projectid, $name, $edit_files) === FALSE)
{
$status = 'error - ' . $this->files->getErrorMessage();
}
else
{
$status = 'ok';
}
}
}
}
print $status;
}
function xhr_delete ($projectid = '', $name = '')
{

View File

@ -139,7 +139,6 @@ class FileModel extends Model
{
$this->db->trans_start ();
/*
$this->db->where ('projectid', $projectid);
$this->db->where ('name', $name);
$this->db->set ('name', $file->name);
@ -149,7 +148,9 @@ class FileModel extends Model
$this->db->set ('updatedby', $userid);
$this->db->update ('file');
// file_list gets updated for the schema itself (reference/trigger)
*/
/*
// this way of updating is bad in that it won't update info
// if there is no file items in file_list for the target file.
$this->db->where ('f.projectid', $projectid);
$this->db->where ('f.name', $name);
$this->db->where ('f.projectid = fl.projectid');
@ -161,6 +162,7 @@ class FileModel extends Model
$this->db->set ('f.updatedby', $userid);
$this->db->set ('fl.name', $file->name);
$this->db->update ('file as f, file_list as fl');
*/
$this->db->set ('createdon', date('Y-m-d H:i:s'));
$this->db->set ('type', 'file');
@ -366,6 +368,178 @@ class FileModel extends Model
restore_error_handler ();
return $x;
}
private function _add_files ($userid, $projectid, $name, $import_files, $uploader)
{
$this->db->trans_begin (); // manual transaction. not using trans_start().
$config['allowed_types'] = '*';
$config['upload_path'] = CODEPOT_FILE_DIR;
$config['max_size'] = CODEPOT_MAX_UPLOAD_SIZE;
$config['encrypt_name'] = TRUE;
$config['overwrite'] = FALSE;
$config['remove_spaces'] = FALSE;
$uploader->initialize ($config);
$ok_files = array();
$file_count = count($import_files);
for ($i = 0; $i < $file_count; $i++)
{
$f = $import_files[$i];
if (!$uploader->do_upload($f['fid']))
{
$this->errmsg = "Failed to upload {$f['name']}";
$this->db->trans_rollback ();
$this->delete_all_files ($ok_files);
return FALSE;
}
$ud = $uploader->data();
array_push ($ok_files, $ud['full_path']);
$md5sum = @md5_file ($ud['full_path']);
if ($md5sum === FALSE)
{
$this->db->trans_rollback ();
$this->delete_all_files ($ok_files);
return FALSE;
}
$this->db->set ('projectid', $projectid);
$this->db->set ('name', $name);
$this->db->set ('filename', $f['name']);
$this->db->set ('encname', $ud['file_name']);
$this->db->set ('md5sum', $md5sum);
$this->db->set ('description', $f['desc']);
$this->db->insert ('file_list');
if ($this->db->trans_status() === FALSE)
{
$this->errmsg = $this->db->_error_message();
$this->db->trans_rollback ();
$this->delete_all_files ($ok_files);
return FALSE;
}
}
$this->db->set ('createdon', date('Y-m-d H:i:s'));
$this->db->set ('type', 'file');
$this->db->set ('action', 'update');
$this->db->set ('projectid', $projectid);
$this->db->set ('userid', $userid);
$this->db->set ('message', $name);
$this->db->insert ('log');
if ($this->db->trans_status() === FALSE)
{
$this->errmsg = $this->db->_error_message();
$this->db->trans_rollback ();
$this->delete_all_files ($ok_files);
return FALSE;
}
$this->db->trans_commit ();
return TRUE;
}
function addFiles ($userid, $projectid, $name, $import_files, $uploader)
{
set_error_handler (array ($this, 'capture_error'));
$errmsg = '';
$x = $this->_add_files ($userid, $projectid, $name, $import_files, $uploader);
restore_error_handler ();
return $x;
}
private function _edit_files ($userid, $projectid, $name, $edit_files)
{
$this->db->trans_begin (); // manual transaction. not using trans_start().
$kill_files = array();
$file_count = count($edit_files);
for ($i = 0; $i < $file_count; $i++)
{
$f = $edit_files[$i];
if (array_key_exists('kill', $f))
{
$this->db->where ('projectid', $projectid);
$this->db->where ('name', $name);
$this->db->where ('filename', $f['name']);
$this->db->select ('encname');
$query = $this->db->get('file_list');
if ($this->db->trans_status() === FALSE)
{
$this->errmsg = $this->db->_error_message();
$this->db->trans_rollback ();
return FALSE;
}
$result = $query->result ();
if (empty($result))
{
$this->errmsg = "no such file - {$f['name']}";
$this->db->trans_rollback ();
return FALSE;
}
array_push ($kill_files, CODEPOT_FILE_DIR . '/' . $result[0]->encname);
$this->db->where ('projectid', $projectid);
$this->db->where ('name', $name);
$this->db->where ('filename', $f['name']);
$query = $this->db->delete('file_list');
if ($this->db->trans_status() === FALSE)
{
$this->errmsg = $this->db->_error_message();
$this->db->trans_rollback ();
return FALSE;
}
}
else if (array_key_exists('desc', $f))
{
$this->db->where ('projectid', $projectid);
$this->db->where ('name', $name);
$this->db->where ('filename', $f['name']);
$this->db->set ('description', $f['desc']);
$this->db->update ('file_list');
if ($this->db->trans_status() === FALSE)
{
$this->errmsg = $this->db->_error_message();
$this->db->trans_rollback ();
return FALSE;
}
}
}
$this->db->set ('createdon', date('Y-m-d H:i:s'));
$this->db->set ('type', 'file');
$this->db->set ('action', 'update');
$this->db->set ('projectid', $projectid);
$this->db->set ('userid', $userid);
$this->db->set ('message', $name);
$this->db->insert ('log');
if ($this->db->trans_status() === FALSE)
{
$this->errmsg = $this->db->_error_message();
$this->db->trans_rollback ();
return FALSE;
}
$this->delete_all_files ($kill_files);
$this->db->trans_commit ();
return TRUE;
}
function editFiles ($userid, $projectid, $name, $edit_files)
{
set_error_handler (array ($this, 'capture_error'));
$errmsg = '';
$x = $this->_edit_files ($userid, $projectid, $name, $edit_files);
restore_error_handler ();
return $x;
}
}
?>

View File

@ -53,7 +53,6 @@ function render_wiki(input_text)
prettyPrint ();
}
var new_item_no = 0;
var import_in_progress = false;
var populated_file_obj = [];
var populated_file_max = 0;
@ -108,8 +107,6 @@ $(function () {
<?php if (isset($login['id']) && $login['id'] != ''): ?>
new_item_no = 0;
$('#file_home_mainarea_new_files').change (function () {
populate_selected_files ();
});
@ -344,15 +341,12 @@ else
$file_list_count = count($file->file_list);
for ($i = 0; $i < $file_list_count; $i++)
if ($file_list_count <= 0)
{
print "<tr class='{$rowclass}'>";
$f = $file->file_list[$i];
$xname = $this->converter->AsciiToHex ($f->filename);
print '<td>';
if ($i == 0 && $file->tag != $oldtag)
if ($file->tag != $oldtag)
{
print htmlspecialchars($file->tag);
$oldtag = $file->tag;
@ -360,23 +354,51 @@ else
print '</td>';
print '<td>';
if ($i == 0) print anchor ("file/show/{$project->id}/{$hexname}", htmlspecialchars($file->name));
print anchor ("file/show/{$project->id}/{$hexname}", htmlspecialchars($file->name));
print '</td>';
print '<td>';
print anchor ("file/get/{$project->id}/{$xname}", $f->filename);
print '</td>';
print '<td>';
print htmlspecialchars($f->description);
print '</td>';
print '<td><tt>';
print $f->md5sum;
print '</tt></td>';
print '<td></td>';
print '<td></td>';
print '<td></td>';
print '</tr>';
}
else
{
for ($i = 0; $i < $file_list_count; $i++)
{
print "<tr class='{$rowclass}'>";
$f = $file->file_list[$i];
$xname = $this->converter->AsciiToHex ($f->filename);
print '<td>';
if ($i == 0 && $file->tag != $oldtag)
{
print htmlspecialchars($file->tag);
$oldtag = $file->tag;
}
print '</td>';
print '<td>';
if ($i == 0) print anchor ("file/show/{$project->id}/{$hexname}", htmlspecialchars($file->name));
print '</td>';
print '<td>';
print anchor ("file/get/{$project->id}/{$xname}", htmlspecialchars($f->filename));
print '</td>';
print '<td>';
print htmlspecialchars($f->description);
print '</td>';
print '<td><tt>';
print $f->md5sum;
print '</tt></td>';
print '</tr>';
}
}
}
print '</table>';
}
@ -406,9 +428,7 @@ else
</div>
<div id='file_home_mainarea_new_description_preview' class='form_input_preview'>
</div>
</div>
</div>
<?php endif; ?>

View File

@ -1,4 +1,6 @@
<html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@ -23,6 +25,7 @@
<?php
$hexname = $this->converter->AsciiToHex ($file->name);
$file_count = count ($file->file_list);
?>
<script type="text/javascript">
@ -54,7 +57,100 @@ function render_wiki()
prettyPrint ();
}
var populated_file_obj_for_adding = [];
var populated_file_max_for_adding = 0;
function populate_selected_files_for_adding ()
{
var file_desc = {};
for (var n = 0; n < populated_file_max_for_adding; n++)
{
var f = populated_file_obj_for_adding[n];
if (f != null)
{
var d = $('#file_show_mainarea_add_file_desc_' + n);
if (d != null) file_desc[f.name] = d.val();
}
}
$('#file_show_mainarea_add_file_table').empty();
populated_file_obj_for_adding = [];
var f = $('#file_show_mainarea_add_files').get(0);
var f_no = 0;
for (var n = 0; n < f.files.length; n++)
{
if (f.files[n] != null)
{
var desc = file_desc[f.files[n].name];
if (desc == null) desc = '';
$('#file_show_mainarea_add_file_table').append (
codepot_sprintf (
'<tr id="file_show_mainarea_add_file_row_%d"><td><a href="#" id="file_show_mainarea_add_file_cancel_%d" onClick="cancel_out_add_file(%d); return false;"><i class="fa fa-trash"></i></a></td><td>%s</td><td><input type="text" id="file_show_mainarea_add_file_desc_%d" size="40" value="%s" /></td></tr>',
f_no, f_no, f_no, codepot_htmlspecialchars(f.files[n].name), f_no, codepot_addslashes(desc)
)
);
populated_file_obj_for_adding[f_no] = f.files[n];
f_no++;
}
}
populated_file_max_for_adding = f_no;
}
function cancel_out_add_file (no)
{
$('#file_show_mainarea_add_file_row_' + no).remove ();
populated_file_obj_for_adding[no] = null;
}
function kill_edit_file (no)
{
var n = $('#file_show_mainarea_edit_file_name_' + no);
var d = $('#file_show_mainarea_edit_file_desc_' + no);
if (n && d)
{
if (d.prop('disabled'))
{
n.css ('text-decoration', '');
d.prop ('disabled', false);
}
else
{
n.css ('text-decoration', 'line-through');
d.prop ('disabled', true);
}
}
}
var delete_in_progress = false;
var add_file_in_progress = false;
var edit_file_in_progress = false;
var original_file_name = [<?php
for ($i = 0; $i < $file_count; $i++)
{
$f = $file->file_list[$i];
printf ("%s\t'%s'", (($i == 0)? '': ",\n"), addslashes($f->filename));
}
print "\n";
?>
];
var original_file_desc = [
<?php
for ($i = 0; $i < $file_count; $i++)
{
$f = $file->file_list[$i];
printf ("%s\t'%s'", (($i == 0)? '': ",\n"), addslashes($f->description));
}
print "\n";
?>
];
$(function () {
if ($("#file_show_mainarea_result_info").is(":visible"))
@ -79,6 +175,11 @@ $(function () {
}
});
$('#file_show_mainarea_files').accordion({
collapsible: true
});
<?php if (isset($login['id']) && $login['id'] != ''): ?>
$('#file_show_mainarea_delete_form_div').dialog (
@ -155,13 +256,205 @@ $(function () {
}
);
$('#file_show_mainarea_add_files').change (function () {
populate_selected_files_for_adding ();
});
$('#file_show_mainarea_add_file_form_div').dialog (
{
title: '<?php print $this->lang->line('Add');?>',
resizable: true,
autoOpen: false,
width: 'auto',
height: 'auto',
modal: true,
buttons: {
'<?php print $this->lang->line('OK')?>': function () {
if (add_file_in_progress) return;
if (!!window.FormData)
{
// FormData is supported
add_file_in_progress = true;
var form_data = new FormData();
var f_no = 0;
for (var i = 0; i <= populated_file_max_for_adding; i++)
{
var f = populated_file_obj_for_adding[i];
if (f != null)
{
form_data.append ('file_add_file_' + f_no, f);
var d = $('#file_show_mainarea_add_file_desc_' + i);
if (d != null) form_data.append('file_add_file_desc_' + f_no, d.val());
f_no++;
}
}
form_data.append ('file_add_file_count', f_no);
$('#file_show_mainarea_add_file_form_div').dialog('disable');
$.ajax({
url: codepot_merge_path('<?php print site_url() ?>', '<?php print "/file/xhr_add_file/{$project->id}/{$hexname}"; ?>'),
type: 'POST',
data: form_data,
mimeType: 'multipart/form-data',
contentType: false,
processData: false,
cache: false,
success: function (data, textStatus, jqXHR) {
add_file_in_progress = false;
$('#file_show_mainarea_add_file_form_div').dialog('enable');
$('#file_show_mainarea_add_file_form_div').dialog('close');
if (data == 'ok')
{
// refresh the page to the head revision
$(location).attr ('href', codepot_merge_path('<?php print site_url(); ?>', '<?php print "/file/show/{$project->id}/{$hexname}"; ?>'));
}
else
{
show_alert ('<pre>' + codepot_htmlspecialchars(data) + '</pre>', "<?php print $this->lang->line('Error')?>");
}
},
error: function (jqXHR, textStatus, errorThrown) {
add_file_in_progress = false;
$('#file_show_mainarea_add_file_form_div').dialog('enable');
$('#file_show_mainarea_add_file_form_div').dialog('close');
show_alert ('Failed - ' + errorThrown, "<?php print $this->lang->line('Error')?>");
}
});
}
else
{
show_alert ('<pre>NOT SUPPORTED</pre>', "<?php print $this->lang->line('Error')?>");
}
},
'<?php print $this->lang->line('Cancel')?>': function () {
if (add_file_in_progress) return;
$('#file_show_mainarea_add_file_form_div').dialog('close');
}
},
beforeClose: function() {
// if importing is in progress, prevent dialog closing
return !add_file_in_progress;
}
}
);
$('#file_show_mainarea_edit_file_form_div').dialog (
{
title: '<?php print $this->lang->line('Edit');?>',
resizable: true,
autoOpen: false,
width: 'auto',
height: 'auto',
modal: true,
buttons: {
'<?php print $this->lang->line('OK')?>': function () {
if (edit_file_in_progress) return;
if (!!window.FormData)
{
// FormData is supported
edit_file_in_progress = true;
var form_data = new FormData();
var f_no = 0;
for (var i = 0; i <= <?php print $file_count; ?>; i++)
{
var n = $('#file_show_mainarea_edit_file_name_' + i);
var d = $('#file_show_mainarea_edit_file_desc_' + i);
if (n && d)
{
if (d.prop('disabled'))
{
form_data.append ('file_edit_file_name_' + f_no, original_file_name[i]);
form_data.append('file_edit_file_kill_' + f_no, 'yes');
f_no++;
}
else if (d.val() != original_file_desc[i])
{
form_data.append ('file_edit_file_name_' + f_no, original_file_name[i]);
form_data.append('file_edit_file_desc_' + f_no, d.val());
f_no++;
}
}
}
form_data.append ('file_edit_file_count', f_no);
$('#file_show_mainarea_edit_file_form_div').dialog('disable');
$.ajax({
url: codepot_merge_path('<?php print site_url() ?>', '<?php print "/file/xhr_edit_file/{$project->id}/{$hexname}"; ?>'),
type: 'POST',
data: form_data,
mimeType: 'multipart/form-data',
contentType: false,
processData: false,
cache: false,
success: function (data, textStatus, jqXHR) {
edit_file_in_progress = false;
$('#file_show_mainarea_edit_file_form_div').dialog('enable');
$('#file_show_mainarea_edit_file_form_div').dialog('close');
if (data == 'ok')
{
// refresh the page to the head revision
$(location).attr ('href', codepot_merge_path('<?php print site_url(); ?>', '<?php print "/file/show/{$project->id}/{$hexname}"; ?>'));
}
else
{
show_alert ('<pre>' + codepot_htmlspecialchars(data) + '</pre>', "<?php print $this->lang->line('Error')?>");
}
},
error: function (jqXHR, textStatus, errorThrown) {
edit_file_in_progress = false;
$('#file_show_mainarea_edit_file_form_div').dialog('enable');
$('#file_show_mainarea_edit_file_form_div').dialog('close');
show_alert ('Failed - ' + errorThrown, "<?php print $this->lang->line('Error')?>");
}
});
}
else
{
show_alert ('<pre>NOT SUPPORTED</pre>', "<?php print $this->lang->line('Error')?>");
}
},
'<?php print $this->lang->line('Cancel')?>': function () {
if (edit_file_in_progress) return;
$('#file_show_mainarea_edit_file_form_div').dialog('close');
}
},
beforeClose: function() {
// if importing is in progress, prevent dialog closing
return !edit_file_in_progress;
}
}
);
$('#file_show_mainarea_delete_button').button().click (function() {
$('#file_show_mainarea_delete_form_div').dialog('open');
return false;
});
$('#file_show_mainarea_add_file_button').button ();
$('#file_show_mainarea_delete_file_button').button ();
$('#file_show_mainarea_add_file_button').button().click (function() {
$('#file_show_mainarea_add_file_form_div').dialog('open');
return false;
});
$('#file_show_mainarea_edit_file_button').button().click (function() {
$('#file_show_mainarea_edit_file_form_div').dialog('open');
return false;
});
<?php endif; ?>
render_wiki ();
@ -216,6 +509,36 @@ $this->load->view (
<div id="file_show_mainarea_result">
<div id='file_show_mainarea_files' class='collapsible-box'>
<div id='file_show_mainarea_files_header' class='collapsible-box-header'><?php print $this->lang->line('Files')?></div>
<div id='file_show_mainarea_files_body'>
<?php if (isset($login['id']) && $login['id'] != ''): ?>
<div>
<a id="file_show_mainarea_add_file_button" href='#'><?php print $this->lang->line('Add')?></a>
<a id="file_show_mainarea_edit_file_button" href='#'><?php print $this->lang->line('Edit')?></a>
</div>
<?php endif; ?>
<table>
<?php
for ($i = 0; $i < $file_count; $i++)
{
$f = $file->file_list[$i];
$xname = $this->converter->AsciiToHex($f->filename);
print '<tr><td>';
print anchor ("file/get/{$project->id}/{$xname}", htmlspecialchars($f->filename));
print '</td><td>';
print htmlspecialchars($f->description);
print '</td><td>';
print " <tt>{$f->md5sum}</tt>";
print '</td></tr>';
}
?>
</table>
</div>
</div>
<div class="result" id="file_show_mainarea_wiki">
<pre id="file_show_mainarea_wiki_text" style="visibility: hidden">
@ -223,38 +546,13 @@ $this->load->view (
</pre>
</div> <!-- file_show_mainarea_wiki -->
<div id="file_show_mainarea_result_info" class="infobox">
<ul>
<li><?php print $this->lang->line('Created on')?> <?php print $file->createdon ?></li>
<li><?php print $this->lang->line('Created by')?> <?php print $file->createdby ?></li>
<li><?php print $this->lang->line('Last updated on')?> <?php print $file->updatedon ?></li>
<li><?php print $this->lang->line('Last updated by')?> <?php print $file->updatedby ?></li>
</ul>
<div class="title"><?php print $this->lang->line('Files')?></div>
<?php if (isset($login['id']) && $login['id'] != ''): ?>
<!--
<div>
<a id="file_show_mainarea_add_file_button" href='#'><?php print $this->lang->line('Add')?></a>
<a id="file_show_mainarea_delete_file_button" href='#'><?php print $this->lang->line('Delete')?></a>
</div>
-->
<?php endif; ?>
<ul>
<?php
foreach ($file->file_list as $f)
{
$xname = $this->converter->AsciiToHex($f->filename);
print '<li>';
print anchor ("file/get/{$project->id}/{$xname}", $f->filename);
print " <tt>{$f->md5sum}</tt>";
print '</li>';
}
?>
</ul>
</div> <!-- file_show_mainarea_result_info -->
</div> <!-- file_show_mainarea_result -->
@ -267,6 +565,31 @@ $this->load->view (
<?php print $this->lang->line('MSG_SURE_TO_DELETE_THIS') . ' - ' . htmlspecialchars($file->name); ?>
</div>
<div id='file_show_mainarea_add_file_form_div'>
<div id='file_show_mainarea_add_file_input'>
<input type='file' id='file_show_mainarea_add_files' name='file_show_add_files' multiple='' autocomplete='off' style='color: transparent;' />
<table id='file_show_mainarea_add_file_table'></table>
</div>
</div>
<div id='file_show_mainarea_edit_file_form_div'>
<table>
<?php
for ($i = 0; $i < $file_count; $i++)
{
$f = $file->file_list[$i];
print '<tr><td>';
printf ('<a href="#" onClick="kill_edit_file(%d); return false;"><i class="fa fa-trash"></i></a>', $i);
print '</td><td>';
printf ('<span id="file_show_mainarea_edit_file_name_%d">%s</span>', $i, htmlspecialchars($f->filename));
print '</td><td>';
printf ('<input type="text" id="file_show_mainarea_edit_file_desc_%d" value="%s" size="40" autocomplete="off" />', $i, addslashes($f->description));
print '</td></tr>';
}
?>
</table>
</div>
<?php endif; ?>
<div id='file_show_mainarea_alert'></div>

View File

@ -196,7 +196,7 @@ $this->load->view (
if ($log['type'] == 'code')
{
print '<td class="object">';
print anchor (
print anchor (
"code/revision/{$log['projectid']}/{$xdot}/{$code['rev']}",
"r{$code['rev']}");
print '</td>';
@ -261,7 +261,7 @@ $this->load->view (
$trimmed = $this->lang->line('Issue') . " {$log['message']}";
}
if ($uri != '')
if ($uri != '' && $trimmed != '')
{
print anchor (
$uri,
@ -276,10 +276,7 @@ $this->load->view (
$fmt = $this->lang->line (
'MSG_LOG_'.strtoupper($log['action']).'_BY');
//print htmlspecialchars (sprintf($fmt, $log['userid']));
printf (
htmlspecialchars ($fmt),
anchor ("/site/userlog/{$log['userid']}", htmlspecialchars ($log['userid'])));
printf ($fmt, anchor ("/site/userlog/{$log['userid']}", htmlspecialchars($log['userid'])));
print '</span>';
}

View File

@ -245,7 +245,7 @@ foreach ($latest_projects as $project)
$trimmed = $this->lang->line('Issue') . " {$log['message']}";
}
if ($uri != '')
if ($uri != '' && $trimmed != '')
print anchor ($uri, htmlspecialchars($trimmed));
else
print htmlspecialchars($trimmed);

View File

@ -38,13 +38,15 @@ function render_wiki()
if (isNaN(x_column_count) || x_column_count < 1) x_column_count = 1;
else if (x_column_count > 9) x_column_count = 9; // sync this max value with wiki_edit. TODO: put this into codepot.ini
column_count = x_column_count.toString();
$("#wiki_show_mainarea_wiki").css ({
"-moz-column-count": column_count,
"-webkit-column-count": column_count,
"column-count": column_count
});
if (x_column_count > 1)
{
column_count = x_column_count.toString();
$("#wiki_show_mainarea_wiki").css ({
"-moz-column-count": column_count,
"-webkit-column-count": column_count,
"column-count": column_count
});
}
creole_render_wiki (
"wiki_show_mainarea_wiki_text",