/** * Browser for files area. * * @param Pieform $form The form to render the element for * @param array $element The element to render * @return string The HTML for the element */ function pieform_element_filebrowser(Pieform $form, $element) { require_once 'license.php'; global $USER, $_PIEFORM_FILEBROWSERS; $smarty = smarty_core(); // See if the filebrowser has indicated it's a group element if (!empty($element['group'])) { $group = $element['group']; } else { // otherwise check if the form knows it's in a group setting $group = $form->get_property('group'); } // See if the filebrowser has indicated it's an institution element if (!empty($element['institution'])) { $institution = $element['institution']; } else { // otherwise check if the form knows it's in an institution setting $institution = $form->get_property('institution'); } $formid = $form->get_name(); $prefix = $formid . '_' . $element['name']; if (!empty($element['tabs'])) { $tabdata = pieform_element_filebrowser_configure_tabs($element['tabs'], $prefix); $smarty->assign('tabs', $tabdata); if (!$group && $tabdata['owner'] == 'group') { $group = $tabdata['ownerid']; } else { if (!$institution) { if ($tabdata['owner'] == 'institution') { $institution = $tabdata['ownerid']; } else { if ($tabdata['owner'] == 'site') { $institution = 'mahara'; } } } } } $userid = $group || $institution ? null : $USER->get('id'); // refresh quotas if ($userid) { $USER->quota_refresh(); } $folder = $element['folder']; if ($group && !pieform_element_filebrowser_view_group_folder($group, $folder)) { $folder = null; } $path = pieform_element_filebrowser_get_path($folder); $smarty->assign('folder', $folder); $smarty->assign('foldername', $path[0]->title); $smarty->assign('path', array_reverse($path)); $smarty->assign('highlight', $element['highlight'][0]); $smarty->assign('edit', !empty($element['edit']) ? $element['edit'] : -1); if (isset($element['browse'])) { $smarty->assign('browse', (int) $element['browse']); } $config = array_map('intval', $element['config']); if ($group && $config['edit']) { $smarty->assign('groupinfo', pieform_element_filebrowser_get_groupinfo($group)); } if ($config['select']) { if (function_exists($element['selectlistcallback'])) { if ($form->is_submitted() && $form->has_errors() && isset($_POST[$prefix . '_selected']) && is_array($_POST[$prefix . '_selected'])) { $value = array_keys($_POST[$prefix . '_selected']); } else { if (isset($element['defaultvalue'])) { $value = $element['defaultvalue']; } else { $value = null; } } // check to see if attached artefact items in $value array are actually allowed // to be seen by this user if (!empty($value)) { foreach ($value as $k => $v) { $file = artefact_instance_from_id($v); if (!$file instanceof ArtefactTypeFile && !$file instanceof ArtefactTypeFolder || !$USER->can_view_artefact($file)) { unset($value[$k]); } } } $selected = $element['selectlistcallback']($value); } $smarty->assign('selectedlist', $selected); $selectedliststr = json_encode($selected); } if ($config['uploadagreement']) { if (get_config_plugin('artefact', 'file', 'usecustomagreement')) { $smarty->assign('agreementtext', get_field('site_content', 'content', 'name', 'uploadcopyright')); } else { $smarty->assign('agreementtext', get_string('uploadcopyrightdefaultcontent', 'install')); } } else { if (!isset($config['simpleupload'])) { $config['simpleupload'] = 1; } } $licensing = '<div class="fileuploadlicense">' . license_form_files($prefix) . '</div>'; $smarty->assign('licenseform', $licensing); if ($config['resizeonuploaduseroption'] == 1) { $smarty->assign('resizeonuploadenable', get_config_plugin('artefact', 'file', 'resizeonuploadenable')); $smarty->assign('resizeonuploadmaxwidth', get_config_plugin('artefact', 'file', 'resizeonuploadmaxwidth')); $smarty->assign('resizeonuploadmaxheight', get_config_plugin('artefact', 'file', 'resizeonuploadmaxheight')); } if ($config['upload']) { $maxuploadsize = display_size(get_max_upload_size(!$institution && !$group)); $smarty->assign('maxuploadsize', $maxuploadsize); $smarty->assign('phpmaxfilesize', get_max_upload_size(false)); if ($group) { $smarty->assign('uploaddisabled', !pieform_element_filebrowser_edit_group_folder($group, $folder)); } } if (!empty($element['browsehelp'])) { $config['plugintype'] = $form->get_property('plugintype'); $config['pluginname'] = $form->get_property('pluginname'); $config['browsehelp'] = $element['browsehelp']; } $config['showtags'] = !empty($config['tag']) ? (int) $userid : 0; $config['editmeta'] = (int) ($userid && !$config['edit'] && !empty($config['tag'])); $smarty->assign('config', $config); $filters = isset($element['filters']) ? $element['filters'] : null; $filedata = ArtefactTypeFileBase::get_my_files_data($folder, $userid, $group, $institution, $filters); $smarty->assign('filelist', $filedata); $configstr = json_encode($config); $fileliststr = json_encode($filedata); $smarty->assign('prefix', $prefix); $accepts = isset($element['accept']) ? 'accept="' . Pieform::hsc($element['accept']) . '"' : ''; $smarty->assign('accepts', $accepts); $initjs = "{$prefix} = new FileBrowser('{$prefix}', {$folder}, {$configstr}, config);\n{$prefix}.filedata = {$fileliststr};"; if ($config['select']) { $initjs .= "{$prefix}.selecteddata = {$selectedliststr};"; } if (isset($tabdata)) { $initjs .= "{$prefix}.tabdata = " . json_encode($tabdata) . ';'; } $_PIEFORM_FILEBROWSERS[$prefix]['views_js'] = $initjs; $initjs .= "addLoadEvent({$prefix}.init);"; $initjs .= "upload_max_filesize = '" . get_real_size(ini_get('upload_max_filesize')) . "';"; $smarty->assign('initjs', $initjs); $smarty->assign('querybase', $element['page'] . (strpos($element['page'], '?') === false ? '?' : '&')); $params = 'folder=' . $folder; if ($group) { $params .= '&group=' . $group; } if ($institution) { $params .= '&institution=' . $institution; } $switchwidth = ArtefactTypeFileBase::get_switch_width(); $smarty->assign('switchwidth', $switchwidth); $smarty->assign('folderparams', $params); return $smarty->fetch('artefact:file:form/filebrowser.tpl'); }
/** * Browser for files area. * * @param Pieform $form The form to render the element for * @param array $element The element to render * @return string The HTML for the element */ function pieform_element_filebrowser(Pieform $form, $element) { global $USER, $_PIEFORM_FILEBROWSERS; $smarty = smarty_core(); $group = $form->get_property('group'); $institution = $form->get_property('institution'); if (!empty($element['tabs'])) { $tabdata = pieform_element_filebrowser_configure_tabs($element['tabs']); $smarty->assign('tabs', $tabdata); if (!$group && $tabdata['owner'] == 'group') { $group = $tabdata['ownerid']; } else { if (!$institution) { if ($tabdata['owner'] == 'institution') { $institution = $tabdata['ownerid']; } else { if ($tabdata['owner'] == 'site') { $institution = 'mahara'; } } } } } $userid = $group || $institution ? null : $USER->get('id'); // refresh quotas if ($userid) { $USER->quota_refresh(); } $folder = $element['folder']; $path = pieform_element_filebrowser_get_path($folder); $smarty->assign('folder', $folder); $smarty->assign('foldername', $path[0]->title); $smarty->assign('path', array_reverse($path)); $smarty->assign('highlight', $element['highlight'][0]); $smarty->assign('edit', !empty($element['edit']) ? $element['edit'] : -1); if (isset($element['browse'])) { $smarty->assign('browse', (int) $element['browse']); } $config = array_map('intval', $element['config']); if ($group && $config['edit']) { $smarty->assign('groupinfo', pieform_element_filebrowser_get_groupinfo($group)); } $formid = $form->get_name(); $prefix = $formid . '_' . $element['name']; if ($config['select']) { if (function_exists($element['selectlistcallback'])) { if ($form->is_submitted() && $form->has_errors() && isset($_POST[$prefix . '_selected']) && is_array($_POST[$prefix . '_selected'])) { $value = array_keys($_POST[$prefix . '_selected']); } else { if (isset($element['defaultvalue'])) { $value = $element['defaultvalue']; } else { $value = null; } } $selected = $element['selectlistcallback']($value); } $smarty->assign('selectedlist', $selected); $selectedliststr = json_encode($selected); } if ($config['uploadagreement']) { if (get_config_plugin('artefact', 'file', 'usecustomagreement')) { $smarty->assign('agreementtext', get_field('site_content', 'content', 'name', 'uploadcopyright')); } else { $smarty->assign('agreementtext', get_string('uploadcopyrightdefaultcontent', 'install')); } } if ($config['upload']) { $maxuploadsize = min(get_real_size(ini_get('post_max_size')), get_real_size(ini_get('upload_max_filesize'))); if (!$institution && !$group) { $userquotaremaining = $USER->get('quota') - $USER->get('quotaused'); $maxuploadsize = min($maxuploadsize, $userquotaremaining); } $maxuploadsize = display_size($maxuploadsize); $smarty->assign('maxuploadsize', $maxuploadsize); } if (!empty($element['browsehelp'])) { $config['plugintype'] = $form->get_property('plugintype'); $config['pluginname'] = $form->get_property('pluginname'); $config['browsehelp'] = $element['browsehelp']; } $config['showtags'] = !empty($config['tag']) ? (int) $userid : 0; $config['editmeta'] = (int) ($userid && !$config['edit'] && !empty($config['tag'])); $smarty->assign('config', $config); $filters = isset($element['filters']) ? $element['filters'] : null; $filedata = ArtefactTypeFileBase::get_my_files_data($folder, $userid, $group, $institution, $filters); $smarty->assign('filelist', $filedata); $configstr = json_encode($config); $fileliststr = json_encode($filedata); $smarty->assign('prefix', $prefix); $initjs = "{$prefix} = new FileBrowser('{$prefix}', {$folder}, {$configstr}, config);\n{$prefix}.filedata = {$fileliststr};"; if ($config['select']) { $initjs .= "{$prefix}.selecteddata = {$selectedliststr};"; } $_PIEFORM_FILEBROWSERS[$prefix]['views_js'] = $initjs; $initjs .= "addLoadEvent({$prefix}.init);"; $smarty->assign('initjs', $initjs); $smarty->assign('querybase', $element['page'] . (strpos($element['page'], '?') === false ? '?' : '&')); return $smarty->fetch('artefact:file:form/filebrowser.tpl'); }