Merge branch 'seeddms-5.1.x' into seeddms-6.0.x

This commit is contained in:
Uwe Steinmann 2020-10-16 16:01:54 +02:00
commit 831dff03db
12 changed files with 55 additions and 32 deletions

View File

@ -184,6 +184,8 @@
- do offer to export users of group if there are no users - do offer to export users of group if there are no users
- config file can be set in env var SEEDDMS_CONFIG_FILE - config file can be set in env var SEEDDMS_CONFIG_FILE
- fix error when search for a boolean attribute value - fix error when search for a boolean attribute value
- extension may contain a conf varіable to select a workflow
- do not set max_execution_time for scripts run by php-cli
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
Changes in version 5.1.20 Changes in version 5.1.20

View File

@ -35,8 +35,11 @@ if(isset($settings->_extraPath))
/* composer is installed in pear directory */ /* composer is installed in pear directory */
require_once 'vendor/autoload.php'; require_once 'vendor/autoload.php';
if(isset($settings->_maxExecutionTime)) if(isset($settings->_maxExecutionTime)) {
ini_set('max_execution_time', $settings->_maxExecutionTime); if (php_sapi_name() !== "cli") {
ini_set('max_execution_time', $settings->_maxExecutionTime);
}
}
if (get_magic_quotes_gpc()) { if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST); $process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);

View File

@ -174,10 +174,10 @@ function import_folder($dirname, $folder, $setfiledate, $setfolderdate, $metadat
echo $mimetype." - ".$filetype." - ".$path."<br />\n"; echo $mimetype." - ".$filetype." - ".$path."<br />\n";
if($res = $folder->addDocument($docname, $comment, $expires, $owner, $keywords, if($res = $folder->addDocument($docname, $comment, $expires, $owner, $keywords,
$metadata[$path]['category'], $filetmp, $name, !empty($metadata[$path]['category']) ? $metadata[$path]['category'] : array(), $filetmp, $name,
$filetype, $mimetype, $sequence, $reviewers, $filetype, $mimetype, $sequence, $reviewers,
$approvers, $reqversion, $version_comment, $approvers, $reqversion, $version_comment,
$metadata[$path]['attributes'])) { !empty($metadata[$path]['attributes']) ? $metadata[$path]['attributes'] : array())) {
$doccount++; $doccount++;
if($setfiledate) { if($setfiledate) {
$newdoc = $res[0]; $newdoc = $res[0];

View File

@ -9,13 +9,13 @@
"author": "Uwe Steinmann", "author": "Uwe Steinmann",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@coreui/coreui": "^3.2.2", "@coreui/coreui": "^3.3.0",
"@coreui/icons": "^1.0.1", "@coreui/icons": "^1.0.1",
"@popperjs/core": "^2.4.4", "@popperjs/core": "^2.5.3",
"bootstrap": "^4.5.2", "bootstrap": "^4.5.2",
"bootstrap-datepicker": "^1.9.0", "bootstrap-datepicker": "^1.9.0",
"chartjs": "^0.3.24", "chartjs": "^0.3.24",
"cytoscape": "^3.15.2", "cytoscape": "^3.16.2",
"cytoscape-grid-guide": "^2.3.2", "cytoscape-grid-guide": "^2.3.2",
"fine-uploader": "^5.16.2", "fine-uploader": "^5.16.2",
"flag-icon-css": "^3.5.0", "flag-icon-css": "^3.5.0",
@ -25,10 +25,10 @@
"grunt": "^1.3.0", "grunt": "^1.3.0",
"grunt-contrib-clean": "^2.0.0", "grunt-contrib-clean": "^2.0.0",
"grunt-contrib-copy": "^1.0.0", "grunt-contrib-copy": "^1.0.0",
"jqtree": "^1.4.12", "jqtree": "^1.5.1",
"jquery": "^1.12.4", "jquery": "^1.12.4",
"jquery-validation": "^1.19.2", "jquery-validation": "^1.19.2",
"moment": "^2.17.1", "moment": "^2.29.1",
"noty": "^2.4.1", "noty": "^2.4.1",
"pace-progressbar": "^1.0.9", "pace-progressbar": "^1.0.9",
"perfect-scrollbar": "^1.5.0", "perfect-scrollbar": "^1.5.0",

View File

@ -285,6 +285,7 @@ ul.jqtree-tree li.jqtree_common > .jqtree-element:hover {
i.success {color: #00b000;} i.success {color: #00b000;}
i.error {color: #b00000;} i.error {color: #b00000;}
i.warning {color: #ff9900;}
i.initstate {color: #ff9900;} i.initstate {color: #ff9900;}
i.released {color: #00b000;} i.released {color: #00b000;}
i.rejected {color: #b00000;} i.rejected {color: #b00000;}

View File

@ -1303,7 +1303,7 @@ $(document).ready(function() {
<div id="'.$id.'-upload-file" class="upload-file"> <div id="'.$id.'-upload-file" class="upload-file">
<div class="input-append"> <div class="input-append">
<input type="text" class="form-control" readonly> <input type="text" class="form-control" readonly>
<span class="btn btn-default btn-file"> <span class="btn btn-secondary btn-file">
'.getMLText("browse").'&hellip; <input id="'.$id.'" type="file" name="'.$varname.'"'.($multiple ? " multiple" : "").($accept ? ' accept="'.$accept.'"' : "").'> '.getMLText("browse").'&hellip; <input id="'.$id.'" type="file" name="'.$varname.'"'.($multiple ? " multiple" : "").($accept ? ' accept="'.$accept.'"' : "").'>
</span> </span>
</div> </div>
@ -2128,7 +2128,7 @@ $(function() {
onCreateLi: function(node, $li) { onCreateLi: function(node, $li) {
// Add 'icon' span before title // Add 'icon' span before title
if(node.is_folder) if(node.is_folder)
$li.find('.jqtree-title').before('<i class="fa fa-folder-o table-row-folder droptarget" data-droptarget="folder_' + node.id + '" rel="folder_' + node.id + '"></i> ').attr('rel', 'folder_' + node.id).attr('formtoken', '<?php echo createFormKey(''); ?>').attr('data-uploadformtoken', '<?php echo createFormKey(''); ?>'); $li.find('.jqtree-title').before('<i class="fa fa-folder-o table-row-folder droptarget" data-droptarget="folder_' + node.id + '" rel="folder_' + node.id + '"></i> ').attr('data-name', node.name).attr('rel', 'folder_' + node.id).attr('formtoken', '<?php echo createFormKey(''); ?>').attr('data-uploadformtoken', '<?php echo createFormKey(''); ?>').attr('data-droptarget', 'folder_' + node.id).addClass('droptarget');
else else
$li.find('.jqtree-title').before('<i class="fa fa-file"></i> '); $li.find('.jqtree-title').before('<i class="fa fa-file"></i> ');
} }

View File

@ -112,7 +112,7 @@ class SeedDMS_View_Calendar extends SeedDMS_Bootstrap_Style {
<?php echo createHiddenFieldWithKey('removeevent'); ?> <?php echo createHiddenFieldWithKey('removeevent'); ?>
<input type="hidden" name="eventid" value="<?php echo intval($event["id"]); ?>"> <input type="hidden" name="eventid" value="<?php echo intval($event["id"]); ?>">
<p><?php printMLText("confirm_rm_event", array ("name" => htmlspecialchars($event["name"])));?></p> <p><?php printMLText("confirm_rm_event", array ("name" => htmlspecialchars($event["name"])));?></p>
<button class="btn" type="submit"><i class="fa fa-remove"></i> <?php printMLText("delete");?></button> <button class="btn btn-danger" type="submit"><i class="fa fa-remove"></i> <?php printMLText("delete");?></button>
</form> </form>
<?php <?php
$this->contentContainerEnd(); $this->contentContainerEnd();

View File

@ -720,7 +720,7 @@ foreach($facets as $facetname=>$values) {
$extracontent = array(); $extracontent = array();
$extracontent['below_title'] = $belowtitle; $extracontent['below_title'] = $belowtitle;
if($attrstr) if($attrstr)
$extracontent['bottom_title'] = '<br />'.$this->printPopupBox('<span class="btn btn-mini btn-default">'.getMLText('attributes').'</span>', $attrstr, true); $extracontent['bottom_title'] = '<br />'.$this->printPopupBox('<span class="btn btn-mini btn-secondary">'.getMLText('attributes').'</span>', $attrstr, true);
print $this->documentListRow($document, $previewer, false, 0, $extracontent); print $this->documentListRow($document, $previewer, false, 0, $extracontent);
} }
} elseif($entry->isType('folder')) { } elseif($entry->isType('folder')) {
@ -745,7 +745,7 @@ foreach($facets as $facetname=>$values) {
} }
$extracontent = array(); $extracontent = array();
if($attrstr) if($attrstr)
$extracontent['bottom_title'] = '<br />'.$this->printPopupBox('<span class="btn btn-mini btn-default">'.getMLText('attributes').'</span>', $attrstr, true); $extracontent['bottom_title'] = '<br />'.$this->printPopupBox('<span class="btn btn-mini btn-secondary">'.getMLText('attributes').'</span>', $attrstr, true);
print $this->folderListRow($folder, false, $extracontent); print $this->folderListRow($folder, false, $extracontent);
} }
} }

View File

@ -620,6 +620,23 @@ if(($kkk = $this->callHook('getFullSearchEngine')) && is_array($kkk))
printMLText('no_attribute_definitions'); printMLText('no_attribute_definitions');
} }
break; break;
case "workflows":
$recs = $dms->getAllWorkflows();
if($recs) {
echo "<select class=\"chzn-select\"".($allowempty ? " data-allow-clear=\"true\"" : "")."\" name=\"extensions[".$extname."][".$confkey."][]\"".(!empty($conf['multiple']) ? " multiple" : "").(!empty($conf['size']) ? " size=\"".$conf['size']."\"" : "")." data-placeholder=\"".getMLText("select_attribute_value")."\">";
if($allowempty)
echo "<option value=\"\"></option>";
foreach($recs as $rec) {
echo "<option value=\"".$rec->getID()."\"";
if(in_array($rec->getID(), $selections))
echo " selected";
echo ">".htmlspecialchars($rec->getName())."</option>";
}
echo "</select>";
} else {
printMLText('no_workflows');
}
break;
case "folders": case "folders":
$this->formField(null, $this->getFolderChooserHtml("form".$extname.$confkey, M_READ, -1, $selections ? $dms->getFolder($selections[0]) : 0, 'extensions['.$extname."][".$confkey."]")); $this->formField(null, $this->getFolderChooserHtml("form".$extname.$confkey, M_READ, -1, $selections ? $dms->getFolder($selections[0]) : 0, 'extensions['.$extname."][".$confkey."]"));
break; break;

View File

@ -906,7 +906,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style {
if($r['file']) { if($r['file']) {
echo "<br />"; echo "<br />";
if($accessobject->check_controller_access('Download', array('action'=>'run'))) { if($accessobject->check_controller_access('Download', array('action'=>'run'))) {
echo "<a href=\"../op/op.Download.php?documentid=".$latestContent->getDocument()->getId()."&reviewlogid=".$r['reviewLogID']."\" class=\"btn btn-mini\"><i class=\"fa fa-download\"></i> ".getMLText('download')."</a>"; echo "<a href=\"../op/op.Download.php?documentid=".$latestContent->getDocument()->getId()."&reviewlogid=".$r['reviewLogID']."\" class=\"btn btn-secondary btn-mini\"><i class=\"fa fa-download\"></i> ".getMLText('download')."</a>";
} }
} }
print "</td>\n"; print "</td>\n";
@ -1010,7 +1010,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style {
if($a['file']) { if($a['file']) {
echo "<br />"; echo "<br />";
if($accessobject->check_controller_access('Download', array('action'=>'run'))) { if($accessobject->check_controller_access('Download', array('action'=>'run'))) {
echo "<a href=\"../op/op.Download.php?documentid=".$latestContent->getDocument()->getId()."&approvelogid=".$a['approveLogID']."\" class=\"btn btn-mini\"><i class=\"fa fa-download\"></i> ".getMLText('download')."</a>"; echo "<a href=\"../op/op.Download.php?documentid=".$latestContent->getDocument()->getId()."&approvelogid=".$a['approveLogID']."\" class=\"btn btn-secondary btn-mini\"><i class=\"fa fa-download\"></i> ".getMLText('download')."</a>";
} }
} }
echo "</td>\n"; echo "</td>\n";
@ -1085,9 +1085,9 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style {
$this->contentContainerStart(); $this->contentContainerStart();
if($user->isAdmin()) { if($user->isAdmin()) {
if(SeedDMS_Core_DMS::checkIfEqual($workflow->getInitState(), $latestContent->getWorkflowState())) { if(SeedDMS_Core_DMS::checkIfEqual($workflow->getInitState(), $latestContent->getWorkflowState())) {
print "<form action=\"../out/out.RemoveWorkflowFromDocument.php\" method=\"get\"><input type=\"hidden\" name=\"documentid\" value=\"".$latestContent->getDocument()->getId()."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" /><button type=\"submit\" class=\"btn\"><i class=\"fa fa-remove\"></i> ".getMLText('rm_workflow')."</button></form>"; print "<form action=\"../out/out.RemoveWorkflowFromDocument.php\" method=\"get\"><input type=\"hidden\" name=\"documentid\" value=\"".$latestContent->getDocument()->getId()."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" /><button type=\"submit\" class=\"btn btn-danger\"><i class=\"fa fa-remove\"></i> ".getMLText('rm_workflow')."</button></form>";
} else { } else {
print "<form action=\"../out/out.RewindWorkflow.php\" method=\"get\"><input type=\"hidden\" name=\"documentid\" value=\"".$latestContent->getDocument()->getId()."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" /><button type=\"submit\" class=\"btn\"><i class=\"fa fa-refresh\"></i> ".getMLText('rewind_workflow')."</button></form>"; print "<form action=\"../out/out.RewindWorkflow.php\" method=\"get\"><input type=\"hidden\" name=\"documentid\" value=\"".$latestContent->getDocument()->getId()."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" /><button type=\"submit\" class=\"btn btn-danger\"><i class=\"fa fa-refresh\"></i> ".getMLText('rewind_workflow')."</button></form>";
} }
} }
@ -1187,7 +1187,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style {
echo "<td>"; echo "<td>";
if($latestContent->triggerWorkflowTransitionIsAllowed($user, $transition)) { if($latestContent->triggerWorkflowTransitionIsAllowed($user, $transition)) {
$action = $transition->getAction(); $action = $transition->getAction();
print "<form action=\"../out/out.TriggerWorkflow.php\" method=\"get\"><input type=\"hidden\" name=\"documentid\" value=\"".$latestContent->getDocument()->getId()."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" /><input type=\"hidden\" name=\"transition\" value=\"".$transition->getID()."\" /><input type=\"submit\" class=\"btn\" value=\"".getMLText('action_'.strtolower($action->getName()), array(), htmlspecialchars($action->getName()))."\" /></form>"; print "<form action=\"../out/out.TriggerWorkflow.php\" method=\"get\"><input type=\"hidden\" name=\"documentid\" value=\"".$latestContent->getDocument()->getId()."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" /><input type=\"hidden\" name=\"transition\" value=\"".$transition->getID()."\" /><input type=\"submit\" class=\"btn btn-primary\" value=\"".getMLText('action_'.strtolower($action->getName()), array(), htmlspecialchars($action->getName()))."\" /></form>";
$allowedtransitions[] = $transition; $allowedtransitions[] = $transition;
} }
echo "</td>"; echo "</td>";
@ -1213,7 +1213,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style {
} }
echo "</select>"; echo "</select>";
echo "<label class=\"inline\">"; echo "<label class=\"inline\">";
echo "<input type=\"submit\" class=\"btn\" value=\"".getMLText('run_subworkflow')."\" />"; echo "<input type=\"submit\" class=\"btn btn-primary\" value=\"".getMLText('run_subworkflow')."\" />";
echo "</lable>"; echo "</lable>";
echo "</form>"; echo "</form>";
} }
@ -1239,7 +1239,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style {
if($workflow->getInitState()->getID() == $latestContent->getWorkflowState()->getID()) { if($workflow->getInitState()->getID() == $latestContent->getWorkflowState()->getID()) {
echo "Initial state of sub workflow has not been left. Return to parent workflow is possible<br />"; echo "Initial state of sub workflow has not been left. Return to parent workflow is possible<br />";
echo "<form action=\"../out/out.ReturnFromSubWorkflow.php\" method=\"get\"><input type=\"hidden\" name=\"documentid\" value=\"".$latestContent->getDocument()->getId()."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" />"; echo "<form action=\"../out/out.ReturnFromSubWorkflow.php\" method=\"get\"><input type=\"hidden\" name=\"documentid\" value=\"".$latestContent->getDocument()->getId()."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" />";
echo "<input type=\"submit\" class=\"btn\" value=\"".getMLText('return_from_subworkflow')."\" />"; echo "<input type=\"submit\" class=\"btn btn-primary\" value=\"".getMLText('return_from_subworkflow')."\" />";
echo "</form>"; echo "</form>";
} else { } else {
/* Get a transition from the last state in the parent workflow /* Get a transition from the last state in the parent workflow
@ -1254,7 +1254,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style {
if($latestContent->triggerWorkflowTransitionIsAllowed($user, $transition)) { if($latestContent->triggerWorkflowTransitionIsAllowed($user, $transition)) {
echo "Triggering transition is allowed<br />"; echo "Triggering transition is allowed<br />";
echo "<form action=\"../out/out.ReturnFromSubWorkflow.php\" method=\"get\"><input type=\"hidden\" name=\"documentid\" value=\"".$latestContent->getDocument()->getId()."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" /><input type=\"hidden\" name=\"transition\" value=\"".$transition->getID()."\" />"; echo "<form action=\"../out/out.ReturnFromSubWorkflow.php\" method=\"get\"><input type=\"hidden\" name=\"documentid\" value=\"".$latestContent->getDocument()->getId()."\" /><input type=\"hidden\" name=\"version\" value=\"".$latestContent->getVersion()."\" /><input type=\"hidden\" name=\"transition\" value=\"".$transition->getID()."\" />";
echo "<input type=\"submit\" class=\"btn\" value=\"".getMLText('return_from_subworkflow')."\" />"; echo "<input type=\"submit\" class=\"btn btn-primary\" value=\"".getMLText('return_from_subworkflow')."\" />";
echo "</form>"; echo "</form>";
} }
@ -1780,7 +1780,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style {
if (($user->getID() == $responsibleUser->getID()) || ($document->getAccessMode($user) == M_ALL )) if (($user->getID() == $responsibleUser->getID()) || ($document->getAccessMode($user) == M_ALL ))
print "<br />".getMLText("document_link_public").": ".(($link->isPublic()) ? getMLText("yes") : getMLText("no")); print "<br />".getMLText("document_link_public").": ".(($link->isPublic()) ? getMLText("yes") : getMLText("no"));
if (($user->getID() == $responsibleUser->getID()) || ($document->getAccessMode($user) == M_ALL )) if (($user->getID() == $responsibleUser->getID()) || ($document->getAccessMode($user) == M_ALL ))
print "<form action=\"../op/op.RemoveDocumentLink.php\" method=\"post\">".createHiddenFieldWithKey('removedocumentlink')."<input type=\"hidden\" name=\"documentid\" value=\"".$documentid."\" /><input type=\"hidden\" name=\"linkid\" value=\"".$link->getID()."\" /><button type=\"submit\" class=\"btn btn-mini\"><i class=\"fa fa-remove\"></i> ".getMLText("delete")."</button></form>"; print "<form action=\"../op/op.RemoveDocumentLink.php\" method=\"post\">".createHiddenFieldWithKey('removedocumentlink')."<input type=\"hidden\" name=\"documentid\" value=\"".$documentid."\" /><input type=\"hidden\" name=\"linkid\" value=\"".$link->getID()."\" /><button type=\"submit\" class=\"btn btn-danger btn-mini\"><i class=\"fa fa-remove\"></i> ".getMLText("delete")."</button></form>";
print "</span></td>"; print "</span></td>";
echo $this->documentListRowEnd($targetDoc); echo $this->documentListRowEnd($targetDoc);
} }
@ -1845,7 +1845,7 @@ class SeedDMS_View_ViewDocument extends SeedDMS_Bootstrap_Style {
print getMLText("document_link_by")." ".htmlspecialchars($responsibleUser->getFullName()); print getMLText("document_link_by")." ".htmlspecialchars($responsibleUser->getFullName());
if (($user->getID() == $responsibleUser->getID()) || ($document->getAccessMode($user) == M_ALL )) if (($user->getID() == $responsibleUser->getID()) || ($document->getAccessMode($user) == M_ALL ))
print "<br />".getMLText("document_link_public").": ".(($link->isPublic()) ? getMLText("yes") : getMLText("no")); print "<br />".getMLText("document_link_public").": ".(($link->isPublic()) ? getMLText("yes") : getMLText("no"));
print "<form action=\"../op/op.RemoveDocumentLink.php\" method=\"post\">".createHiddenFieldWithKey('removedocumentlink')."<input type=\"hidden\" name=\"documentid\" value=\"".$sourceDoc->getId()."\" /><input type=\"hidden\" name=\"linkid\" value=\"".$link->getID()."\" /><button type=\"submit\" class=\"btn btn-mini\"><i class=\"fa fa-remove\"></i> ".getMLText("delete")."</button></form>"; print "<form action=\"../op/op.RemoveDocumentLink.php\" method=\"post\">".createHiddenFieldWithKey('removedocumentlink')."<input type=\"hidden\" name=\"documentid\" value=\"".$sourceDoc->getId()."\" /><input type=\"hidden\" name=\"linkid\" value=\"".$link->getID()."\" /><button type=\"submit\" class=\"btn btn-danger btn-mini\"><i class=\"fa fa-remove\"></i> ".getMLText("delete")."</button></form>";
print "</span></td>"; print "</span></td>";
echo $this->documentListRowEnd($sourceDoc); echo $this->documentListRowEnd($sourceDoc);
} }

View File

@ -356,7 +356,7 @@ $('body').on('click', '.order-btn', function(ev) {
else { else {
print "<table id=\"viewfolder-table\" class=\"table table-condensed table-hover\">"; print "<table id=\"viewfolder-table\" class=\"table table-condensed table-hover\">";
print "<thead>\n<tr>\n"; print "<thead>\n<tr>\n";
print "<th>".($parent ? '<button class="btn btn-mini btn-default" id="goto-parent" data-parentid="'.$parent->getID().'"><i class="fa fa-arrow-up"></i></button>' : '')."</th>\n"; print "<th>".($parent ? '<button class="btn btn-mini btn-secondary" id="goto-parent" data-parentid="'.$parent->getID().'"><i class="fa fa-arrow-up"></i></button>' : '')."</th>\n";
print "<th>".getMLText("name"); print "<th>".getMLText("name");
print " <a class=\"order-btn\" href=\"../out/out.ViewFolder.php?folderid=". $folderid .($orderby=="n"||$orderby=="na"?"&orderby=nd":"&orderby=n")."\" data-orderby=\"".($orderby=="n"||$orderby=="na"?"nd":"n")."\"title=\"".getMLText("sort_by_name")."\">".($orderby=="n"||$orderby=="na"?' <i class="fa fa-sort-alpha-asc selected"></i>':($orderby=="nd"?' <i class="fa fa-sort-alpha-desc selected"></i>':' <i class="fa fa-sort-alpha-asc"></i>'))."</a>"; print " <a class=\"order-btn\" href=\"../out/out.ViewFolder.php?folderid=". $folderid .($orderby=="n"||$orderby=="na"?"&orderby=nd":"&orderby=n")."\" data-orderby=\"".($orderby=="n"||$orderby=="na"?"nd":"n")."\"title=\"".getMLText("sort_by_name")."\">".($orderby=="n"||$orderby=="na"?' <i class="fa fa-sort-alpha-asc selected"></i>':($orderby=="nd"?' <i class="fa fa-sort-alpha-desc selected"></i>':' <i class="fa fa-sort-alpha-asc"></i>'))."</a>";
print " <a class=\"order-btn\" href=\"../out/out.ViewFolder.php?folderid=". $folderid .($orderby=="s"||$orderby=="sa"?"&orderby=sd":"&orderby=s")."\" data-orderby=\"".($orderby=="s"||$orderby=="sa"?"sd":"s")."\" title=\"".getMLText("sort_by_sequence")."\">".($orderby=="s"||$orderby=="sa"?' <i class="fa fa-sort-numeric-asc selected"></i>':($orderby=="sd"?' <i class="fa fa-sort-numeric-desc selected"></i>':' <i class="fa fa-sort-numeric-asc"></i>'))."</a>"; print " <a class=\"order-btn\" href=\"../out/out.ViewFolder.php?folderid=". $folderid .($orderby=="s"||$orderby=="sa"?"&orderby=sd":"&orderby=s")."\" data-orderby=\"".($orderby=="s"||$orderby=="sa"?"sd":"s")."\" title=\"".getMLText("sort_by_sequence")."\">".($orderby=="s"||$orderby=="sa"?' <i class="fa fa-sort-numeric-asc selected"></i>':($orderby=="sd"?' <i class="fa fa-sort-numeric-desc selected"></i>':' <i class="fa fa-sort-numeric-asc"></i>'))."</a>";
@ -409,7 +409,7 @@ $('body').on('click', '.order-btn', function(ev) {
echo "</tbody>\n</table>\n"; echo "</tbody>\n</table>\n";
if($maxItemsPerPage && $i > $maxItemsPerPage) if($maxItemsPerPage && $i > $maxItemsPerPage)
echo "<button id=\"loadmore\" style=\"width: 100%; margin-bottom: 20px;\" class=\"btn btn-default\" data-folder=\"".$folder->getId()."\"data-offset=\"".$maxItemsPerPage."\" data-limit=\"".$incItemsPerPage."\" data-all=\"".($i-$maxItemsPerPage)."\">".getMLText('x_more_objects', array('number'=>($i-$maxItemsPerPage)))."</button>"; echo "<button id=\"loadmore\" style=\"width: 100%; margin-bottom: 20px;\" class=\"btn btn-secondary\" data-folder=\"".$folder->getId()."\"data-offset=\"".$maxItemsPerPage."\" data-limit=\"".$incItemsPerPage."\" data-all=\"".($i-$maxItemsPerPage)."\">".getMLText('x_more_objects', array('number'=>($i-$maxItemsPerPage)))."</button>";
} }
else printMLText("empty_folder_list"); else printMLText("empty_folder_list");

View File

@ -186,7 +186,7 @@ cy.on('free', 'node', function(evt) {
cy.on('tap', 'node', function(evt) { cy.on('tap', 'node', function(evt) {
var node = evt.target; var node = evt.target;
var scratch = node.scratch('_app'); var scratch = node.scratch('app');
if(typeof scratch !== 'undefined') { if(typeof scratch !== 'undefined') {
noty({ noty({
text: (scratch.users ? '<p><?= '<i class="fa fa-user"></i> ' ?> ' + scratch.users + '</p>' : '') + (scratch.groups ? '<?= '<i class="fa fa-group"></i> ' ?> ' + scratch.groups + '</p>' : ''), text: (scratch.users ? '<p><?= '<i class="fa fa-user"></i> ' ?> ' + scratch.users + '</p>' : '') + (scratch.groups ? '<?= '<i class="fa fa-group"></i> ' ?> ' + scratch.groups + '</p>' : ''),
@ -256,12 +256,12 @@ $(document).ready(function() {
$transusers = $transition->getUsers(); $transusers = $transition->getUsers();
$unames = array(); $unames = array();
foreach($transusers as $transuser) { foreach($transusers as $transuser) {
$unames[] = $transuser->getUser()->getLogin().' - '.$transuser->getUser()->getFullName(); $unames[] = htmlspecialchars($transuser->getUser()->getLogin().' - '.$transuser->getUser()->getFullName());
} }
$transgroups = $transition->getGroups(); $transgroups = $transition->getGroups();
$gnames = array(); $gnames = array();
foreach($transgroups as $transgroup) { foreach($transgroups as $transgroup) {
$gnames[] = $transgroup->getGroup()->getName(); $gnames[] = htmlspecialchars($transgroup->getGroup()->getName());
} }
$nodeid = "A".$transition->getID()."-".$action->getID(); $nodeid = "A".$transition->getID()."-".$action->getID();
echo "cy.add({ echo "cy.add({
@ -272,7 +272,7 @@ $(document).ready(function() {
position: {x: ".$positions[$nodeid]->x.", y: ".$positions[$nodeid]->y."}," : "")." position: {x: ".$positions[$nodeid]->x.", y: ".$positions[$nodeid]->y."}," : "")."
classes: 'action".($iscurtransition ? " current" : ($this->curtransitions ? " light" : ""))."'".(!$this->curtransitions || $iscurtransition && $this->curtransitions ? ", classes: 'action".($iscurtransition ? " current" : ($this->curtransitions ? " light" : ""))."'".(!$this->curtransitions || $iscurtransition && $this->curtransitions ? ",
scratch: { scratch: {
_app: {groups: \"".str_replace('"', "\\\"", implode(", ", $gnames))."\", users: \"".str_replace('"', "\\\"", implode(", ", $unames))."\"} app: {groups: \"".str_replace('"', "\\\"", implode(", ", $gnames))."\", users: \"".str_replace('"', "\\\"", implode(", ", $unames))."\"}
}" : "")." }" : "")."
});\n"; });\n";
} }
@ -387,8 +387,8 @@ div.buttons #zoom {margin: 3px; _float: right;}
<i class="fa fa-sign-blank workflow-action"></i> <?php echo printMLText('global_workflow_actions'); ?> <i class="fa fa-sign-blank workflow-action"></i> <?php echo printMLText('global_workflow_actions'); ?>
</div> </div>
<div class="buttons"> <div class="buttons">
<div id="zoom"><button class="btn btn-mini btn-default">Zoom</button></div> <div id="zoom"><button class="btn btn-mini btn-secondary">Zoom</button></div>
<button class="btn btn-mini" id="savelayout"><?php printMLText('workflow_save_layout'); ?></button> <button class="btn btn-mini btn-secondary" id="savelayout"><?php printMLText('workflow_save_layout'); ?></button>
<button class="btn btn-mini" id="setlayout" data-layout="cose"><?php printMLText('redraw'); ?></button> <button class="btn btn-mini" id="setlayout" data-layout="cose"><?php printMLText('redraw'); ?></button>
</div> </div>
</div> </div>