mirror of
https://github.com/ACSPRI/queXS
synced 2024-04-02 12:12:16 +00:00
407 lines
19 KiB
PHP
407 lines
19 KiB
PHP
<?php
|
|
/*
|
|
* LimeSurvey
|
|
* Copyright (C) 2007 The LimeSurvey Project Team / Carsten Schmitz
|
|
* All rights reserved.
|
|
* License: GNU/GPL License v2 or later, see LICENSE.php
|
|
* LimeSurvey is free software. This version may have been modified pursuant
|
|
* to the GNU General Public License, and as distributed it includes or
|
|
* is derivative of works licensed under the GNU General Public License or
|
|
* other free or open source software licenses.
|
|
* See COPYRIGHT.php for copyright notices and details.
|
|
*
|
|
* $Id: admin_functions.php 9586 2010-12-06 03:08:07Z c_schmitz $
|
|
* Files Purpose:
|
|
*/
|
|
|
|
|
|
function get2post($url)
|
|
{
|
|
$url = preg_replace('/&/i','&',$url);
|
|
list($calledscript,$query) = explode('?',$url);
|
|
$aqueryitems = explode('&',$query);
|
|
$arrayParam = Array();
|
|
$arrayVal = Array();
|
|
|
|
foreach ($aqueryitems as $queryitem)
|
|
{
|
|
list($paramname, $value) = explode ('=', $queryitem);
|
|
$arrayParam[] = "'".$paramname."'";
|
|
$arrayVal[] = substr($value, 0, 9) != "document." ? "'".$value."'" : $value;
|
|
}
|
|
// $Paramlist = "[" . implode(",",$arrayParam) . "]";
|
|
// $Valuelist = "[" . implode(",",$arrayVal) . "]";
|
|
$Paramlist = "new Array(" . implode(",",$arrayParam) . ")";
|
|
$Valuelist = "new Array(" . implode(",",$arrayVal) . ")";
|
|
$callscript = "sendPost('$calledscript','".$_SESSION['checksessionpost']."',$Paramlist,$Valuelist);";
|
|
return $callscript;
|
|
}
|
|
|
|
/**
|
|
* This function switches identity insert on/off for the MSSQL database
|
|
*
|
|
* @param string $table table name (without prefix)
|
|
* @param mixed $state Set to true to activate ID insert, or false to deactivate
|
|
*/
|
|
function db_switchIDInsert($table,$state)
|
|
{
|
|
global $databasetype, $connect;
|
|
if ($databasetype=='odbc_mssql' || $databasetype=='odbtp' || $databasetype=='mssql_n' || $databasetype=='mssqlnative')
|
|
{
|
|
if ($state==true)
|
|
{
|
|
$connect->Execute('SET IDENTITY_INSERT '.db_table_name($table).' ON');
|
|
}
|
|
else
|
|
{
|
|
$connect->Execute('SET IDENTITY_INSERT '.db_table_name($table).' OFF');
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns true if a user has permissions in the particular survey
|
|
*
|
|
* @param $iSID The survey ID
|
|
* @param $sPermission
|
|
* @param $sCRUD
|
|
* @param $iUID User ID - if not given the one of the current user is used
|
|
* @return bool
|
|
*/
|
|
function bHasSurveyPermission($iSID, $sPermission, $sCRUD, $iUID=null)
|
|
{
|
|
global $dbprefix, $connect;
|
|
if (!in_array($sCRUD,array('create','read','update','delete','import','export'))) return false;
|
|
$sCRUD=$sCRUD.'_p';
|
|
$iSID = (int)$iSID;
|
|
global $aSurveyPermissionCache;
|
|
|
|
if (is_null($iUID))
|
|
{
|
|
if (isset($_SESSION['loginID'])) $iUID = $_SESSION['loginID'];
|
|
else return false;
|
|
if ($_SESSION['USER_RIGHT_SUPERADMIN']==1) return true; //Superadmin has access to all
|
|
}
|
|
|
|
if (!isset($aSurveyPermissionCache[$iSID][$iUID][$sPermission][$sCRUD]))
|
|
{
|
|
$sSQL = "SELECT {$sCRUD} FROM " . db_table_name('survey_permissions') . "
|
|
WHERE sid={$iSID} AND uid = {$iUID}
|
|
and permission=".db_quoteall($sPermission); //Getting rights for this survey
|
|
$bPermission = $connect->GetOne($sSQL);
|
|
if ($bPermission==0 || is_null($bPermission)) $bPermission=false;
|
|
if ($bPermission==1) $bPermission=true;
|
|
$aSurveyPermissionCache[$iSID][$iUID][$sPermission][$sCRUD]=$bPermission;
|
|
}
|
|
return $aSurveyPermissionCache[$iSID][$iUID][$sPermission][$sCRUD];
|
|
}
|
|
|
|
/**
|
|
* Returns true if the given survey has a File Upload Question Type
|
|
* @param $surveyid The survey ID
|
|
* @return bool
|
|
*/
|
|
function bHasFileUploadQuestion($surveyid) {
|
|
$fieldmap = createFieldMap($surveyid);
|
|
|
|
foreach ($fieldmap as $field) {
|
|
if (isset($field['type']) && $field['type'] === '|') return true;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns true if a user has global permission for a certain action. Available permissions are
|
|
*
|
|
* USER_RIGHT_CREATE_SURVEY
|
|
* USER_RIGHT_CONFIGURATOR
|
|
* USER_RIGHT_CREATE_USER
|
|
* USER_RIGHT_DELETE_USER
|
|
* USER_RIGHT_SUPERADMIN
|
|
* USER_RIGHT_MANAGE_TEMPLATE
|
|
* USER_RIGHT_MANAGE_LABEL
|
|
*
|
|
* @param $sPermission
|
|
* @return bool
|
|
*/
|
|
function bHasGlobalPermission($sPermission)
|
|
{
|
|
global $dbprefix, $connect;
|
|
global $aSurveyGlobalPermissionCache;
|
|
|
|
if (isset($_SESSION['loginID'])) $iUID = $_SESSION['loginID'];
|
|
else return false;
|
|
if ($_SESSION['USER_RIGHT_SUPERADMIN']==1) return true; //Superadmin has access to all
|
|
if ($_SESSION[$sPermission]==1)
|
|
{
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Set the survey permissions for a user. Beware that all survey permissions for the particual survey are removed before the new ones are written.
|
|
*
|
|
* @param int $iUserID The User ID
|
|
* @param int $iSurveyID The Survey ID
|
|
* @param array $aPermissions Array with permissions in format <permissionname>=>array('create'=>0/1,'read'=>0/1,'update'=>0/1,'delete'=>0/1)
|
|
*/
|
|
function SetSurveyPermissions($iUserID, $iSurveyID, $aPermissions)
|
|
{
|
|
global $connect, $surveyid;
|
|
$iUserID=sanitize_int($iUserID);
|
|
$sQuery = "delete from ".db_table_name('survey_permissions')." WHERE sid = {$iSurveyID} AND uid = {$iUserID}";
|
|
$connect->Execute($sQuery);
|
|
$bResult=true;
|
|
|
|
foreach($aPermissions as $sPermissionname=>$aPermissions)
|
|
{
|
|
if (!isset($aPermissions['create'])) {$aPermissions['create']=0;}
|
|
if (!isset($aPermissions['read'])) {$aPermissions['read']=0;}
|
|
if (!isset($aPermissions['update'])) {$aPermissions['update']=0;}
|
|
if (!isset($aPermissions['delete'])) {$aPermissions['delete']=0;}
|
|
if (!isset($aPermissions['import'])) {$aPermissions['import']=0;}
|
|
if (!isset($aPermissions['export'])) {$aPermissions['export']=0;}
|
|
if ($aPermissions['create']==1 || $aPermissions['read']==1 ||$aPermissions['update']==1 || $aPermissions['delete']==1 || $aPermissions['import']==1 || $aPermissions['export']==1)
|
|
{
|
|
$sQuery = "INSERT INTO ".db_table_name('survey_permissions')." (sid, uid, permission, create_p, read_p, update_p, delete_p, import_p, export_p)
|
|
VALUES ({$iSurveyID},{$iUserID},'{$sPermissionname}',{$aPermissions['create']},{$aPermissions['read']},{$aPermissions['update']},{$aPermissions['delete']},{$aPermissions['import']},{$aPermissions['export']})";
|
|
$bResult=$connect->Execute($sQuery);
|
|
}
|
|
}
|
|
return $bResult;
|
|
}
|
|
|
|
/**
|
|
* Gives all available survey permissions for a certain survey to a user
|
|
*
|
|
* @param mixed $iUserID The User ID
|
|
* @param mixed $iSurveyID The Survey ID
|
|
*/
|
|
function GiveAllSurveyPermissions($iUserID, $iSurveyID)
|
|
{
|
|
$aPermissions=aGetBaseSurveyPermissions();
|
|
$aPermissionsToSet=array();
|
|
foreach ($aPermissions as $sPermissionName=>$aPermissionDetails)
|
|
{
|
|
foreach ($aPermissionDetails as $sPermissionDetailKey=>$sPermissionDetailValue)
|
|
{
|
|
if (in_array($sPermissionDetailKey,array('create','read','update','delete','import','export')) && $sPermissionDetailValue==true)
|
|
{
|
|
$aPermissionsToSet[$sPermissionName][$sPermissionDetailKey]=1;
|
|
}
|
|
|
|
}
|
|
}
|
|
SetSurveyPermissions($iUserID, $iSurveyID, $aPermissionsToSet);
|
|
}
|
|
|
|
function gettemplatelist()
|
|
{
|
|
global $usertemplaterootdir, $standardtemplates,$standardtemplaterootdir;
|
|
|
|
if (!$usertemplaterootdir) {die("gettemplatelist() no template directory");}
|
|
if ($handle = opendir($standardtemplaterootdir))
|
|
{
|
|
while (false !== ($file = readdir($handle)))
|
|
{
|
|
if (!is_file("$standardtemplaterootdir/$file") && $file != "." && $file != ".." && $file!=".svn" && isStandardTemplate($file))
|
|
{
|
|
$list_of_files[$file] = $standardtemplaterootdir.DIRECTORY_SEPARATOR.$file;
|
|
}
|
|
}
|
|
closedir($handle);
|
|
}
|
|
|
|
if ($handle = opendir($usertemplaterootdir))
|
|
{
|
|
while (false !== ($file = readdir($handle)))
|
|
{
|
|
if (!is_file("$usertemplaterootdir/$file") && $file != "." && $file != ".." && $file!=".svn")
|
|
{
|
|
$list_of_files[$file] = $usertemplaterootdir.DIRECTORY_SEPARATOR.$file;
|
|
}
|
|
}
|
|
closedir($handle);
|
|
}
|
|
ksort($list_of_files);
|
|
return $list_of_files;
|
|
}
|
|
|
|
|
|
/**
|
|
* This function set a question attribute to a certain value
|
|
*
|
|
* @param mixed $qid
|
|
* @param mixed $sAttributeName
|
|
* @param mixed $sAttributeValue
|
|
*/
|
|
function setQuestionAttribute($qid,$sAttributeName,$sAttributeValue)
|
|
{
|
|
global $dbprefix,$connect;
|
|
$tablename=$dbprefix.'question_attributes';
|
|
$aInsertArray=array('qid'=>$qid,
|
|
'attribute'=>$sAttributeName,
|
|
'value'=>$sAttributeValue);
|
|
$sQuery=$connect->GetInsertSQL($tablename,$aInsertArray);
|
|
$connect->Execute('delete from '.db_table_name('question_attributes')." where qid={$qid} and attribute=".db_quoteall($sAttributeName));
|
|
$connect->Execute($sQuery);
|
|
}
|
|
|
|
/**
|
|
* Returns the default email template texts as array
|
|
*
|
|
* @param mixed $oLanguage Required language translationb object
|
|
* @param string $mode Escape mode for the translation function
|
|
* @return array
|
|
*/
|
|
function aTemplateDefaultTexts($oLanguage, $mode='html'){
|
|
return array(
|
|
'admin_detailed_notification_subject'=>$oLanguage->gT("Response submission for survey {SURVEYNAME} with results",$mode),
|
|
'admin_detailed_notification'=>$oLanguage->gT("Hello,\n\nA new response was submitted for your survey '{SURVEYNAME}'.\n\nClick the following link to reload the survey:\n{RELOADURL}\n\nClick the following link to see the individual response:\n{VIEWRESPONSEURL}\n\nClick the following link to edit the individual response:\n{EDITRESPONSEURL}\n\nView statistics by clicking here:\n{STATISTICSURL}\n\n\nThe following answers were given by the participant:\n{ANSWERTABLE}",$mode),
|
|
'admin_detailed_notification_css'=>'<style type="text/css">
|
|
.printouttable {
|
|
margin:1em auto;
|
|
}
|
|
.printouttable th {
|
|
text-align: center;
|
|
}
|
|
.printouttable td {
|
|
border-color: #ddf #ddf #ddf #ddf;
|
|
border-style: solid;
|
|
border-width: 1px;
|
|
padding:0.1em 1em 0.1em 0.5em;
|
|
}
|
|
|
|
.printouttable td:first-child {
|
|
font-weight: 700;
|
|
text-align: right;
|
|
padding-right: 5px;
|
|
padding-left: 5px;
|
|
|
|
}
|
|
.printouttable .printanswersquestion td{
|
|
background-color:#F7F8FF;
|
|
}
|
|
|
|
.printouttable .printanswersquestionhead td{
|
|
text-align: left;
|
|
background-color:#ddf;
|
|
}
|
|
|
|
.printouttable .printanswersgroup td{
|
|
text-align: center;
|
|
font-weight:bold;
|
|
padding-top:1em;
|
|
}
|
|
</style>',
|
|
'admin_notification_subject'=>$oLanguage->gT("Response submission for survey {SURVEYNAME}",$mode),
|
|
'admin_notification'=>$oLanguage->gT("Hello,\n\nA new response was submitted for your survey '{SURVEYNAME}'.\n\nClick the following link to reload the survey:\n{RELOADURL}\n\nClick the following link to see the individual response:\n{VIEWRESPONSEURL}\n\nClick the following link to edit the individual response:\n{EDITRESPONSEURL}\n\nView statistics by clicking here:\n{STATISTICSURL}",$mode),
|
|
'confirmation_subject'=>$oLanguage->gT("Confirmation of your participation in our survey"),
|
|
'confirmation'=>$oLanguage->gT("Dear {FIRSTNAME},\n\nthis email is to confirm that you have completed the survey titled {SURVEYNAME} and your response has been saved. Thank you for participating.\n\nIf you have any further questions about this email, please contact {ADMINNAME} on {ADMINEMAIL}.\n\nSincerely,\n\n{ADMINNAME}",$mode),
|
|
'invitation_subject'=>$oLanguage->gT("Invitation to participate in a survey",$mode),
|
|
'invitation'=>$oLanguage->gT("Dear {FIRSTNAME},\n\nyou have been invited to participate in a survey.\n\nThe survey is titled:\n\"{SURVEYNAME}\"\n\n\"{SURVEYDESCRIPTION}\"\n\nTo participate, please click on the link below.\n\nSincerely,\n\n{ADMINNAME} ({ADMINEMAIL})\n\n----------------------------------------------\nClick here to do the survey:\n{SURVEYURL}",$mode)."\n\n".$oLanguage->gT("If you do not want to participate in this survey and don't want to receive any more invitations please click the following link:\n{OPTOUTURL}",$mode),
|
|
'reminder_subject'=>$oLanguage->gT("Reminder to participate in a survey",$mode),
|
|
'reminder'=>$oLanguage->gT("Dear {FIRSTNAME},\n\nRecently we invited you to participate in a survey.\n\nWe note that you have not yet completed the survey, and wish to remind you that the survey is still available should you wish to take part.\n\nThe survey is titled:\n\"{SURVEYNAME}\"\n\n\"{SURVEYDESCRIPTION}\"\n\nTo participate, please click on the link below.\n\nSincerely,\n\n{ADMINNAME} ({ADMINEMAIL})\n\n----------------------------------------------\nClick here to do the survey:\n{SURVEYURL}",$mode)."\n\n".$oLanguage->gT("If you do not want to participate in this survey and don't want to receive any more invitations please click the following link:\n{OPTOUTURL}",$mode),
|
|
'registration_subject'=>$oLanguage->gT("Survey registration confirmation",$mode),
|
|
'registration'=>$oLanguage->gT("Dear {FIRSTNAME},\n\nYou, or someone using your email address, have registered to participate in an online survey titled {SURVEYNAME}.\n\nTo complete this survey, click on the following URL:\n\n{SURVEYURL}\n\nIf you have any questions about this survey, or if you did not register to participate and believe this email is in error, please contact {ADMINNAME} at {ADMINEMAIL}.",$mode)
|
|
);
|
|
}
|
|
|
|
// Closing PHP tag intentionally left out - yes, it is okay
|
|
|
|
function doAdminHeader()
|
|
{
|
|
echo getAdminHeader();
|
|
}
|
|
|
|
function getAdminHeader($meta=false)
|
|
{
|
|
global $sitename, $admintheme, $rooturl, $defaultlang, $css_admin_includes, $homeurl;
|
|
if (!isset($_SESSION['adminlang']) || $_SESSION['adminlang']=='') {$_SESSION['adminlang']=$defaultlang;}
|
|
$strAdminHeader="<?xml version=\"1.0\"?><!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"
|
|
."<html ";
|
|
|
|
if (getLanguageRTL($_SESSION['adminlang']))
|
|
{
|
|
$strAdminHeader.=" dir=\"rtl\" ";
|
|
}
|
|
$strAdminHeader.=">\n<head>\n";
|
|
|
|
if ($meta)
|
|
{
|
|
$strAdminHeader.=$meta;
|
|
}
|
|
$strAdminHeader.="<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />\n"
|
|
. "<script type=\"text/javascript\" src=\"{$rooturl}/scripts/jquery/jquery.js\"></script>\n"
|
|
. "<script type=\"text/javascript\" src=\"{$rooturl}/scripts/jquery/jquery-ui.js\"></script>\n"
|
|
. "<script type=\"text/javascript\" src=\"{$rooturl}/scripts/jquery/jquery.qtip.js\"></script>\n"
|
|
. "<script type=\"text/javascript\" src=\"{$rooturl}/scripts/jquery/jquery.notify.js\"></script>\n"
|
|
. "<script type=\"text/javascript\" src=\"{$homeurl}/scripts/admin_core.js\"></script>\n";
|
|
|
|
if ($_SESSION['adminlang']!='en')
|
|
{
|
|
$strAdminHeader.= "<script type=\"text/javascript\" src=\"{$rooturl}/scripts/jquery/locale/jquery.ui.datepicker-{$_SESSION['adminlang']}.js\"></script>\n";
|
|
}
|
|
|
|
$strAdminHeader.= "<title>$sitename</title>\n";
|
|
|
|
$strAdminHeader.= "<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"{$homeurl}//styles/$admintheme/tab.webfx.css \" />\n"
|
|
. "<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"{$rooturl}/scripts/jquery/css/start/jquery-ui.css\" />\n"
|
|
. "<link rel=\"stylesheet\" type=\"text/css\" href=\"{$homeurl}/styles/$admintheme/printablestyle.css\" media=\"print\" />\n"
|
|
. "<link rel=\"stylesheet\" type=\"text/css\" href=\"{$homeurl}/styles/$admintheme/adminstyle.css\" />\n"
|
|
. "<link rel=\"shortcut icon\" href=\"{$homeurl}/favicon.ico\" type=\"image/x-icon\" />\n"
|
|
. "<link rel=\"icon\" href=\"{$homeurl}/favicon.ico\" type=\"image/x-icon\" />\n";
|
|
|
|
if (getLanguageRTL($_SESSION['adminlang']))
|
|
{
|
|
$strAdminHeader.="<link rel=\"stylesheet\" type=\"text/css\" href=\"styles/$admintheme/adminstyle-rtl.css\" />\n";
|
|
}
|
|
|
|
$css_admin_includes = array_unique($css_admin_includes);
|
|
|
|
foreach ($css_admin_includes as $cssinclude)
|
|
{
|
|
$strAdminHeader .= "<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"$cssinclude\" />\n";
|
|
}
|
|
$strAdminHeader.= use_firebug()
|
|
. "</head>\n<body>\n";
|
|
if (isset($_SESSION['dateformat']))
|
|
{
|
|
$formatdata=getDateFormatData($_SESSION['dateformat']);
|
|
$strAdminHeader .= "<script type='text/javascript'>
|
|
var userdateformat='".$formatdata['jsdate']."';
|
|
var userlanguage='".$_SESSION['adminlang']."';
|
|
</script>";
|
|
}
|
|
// Prepare flashmessage
|
|
if (isset($_SESSION['flashmessage']) && $_SESSION['flashmessage']!='')
|
|
{
|
|
$strAdminHeader .='<div id="flashmessage" style="display:none;">
|
|
|
|
<div id="themeroller" class="ui-state-highlight ui-corner-all">
|
|
<!-- close link -->
|
|
<a class="ui-notify-close" href="#">
|
|
<span class="ui-icon ui-icon-close" style="float:right"></span>
|
|
</a>
|
|
|
|
<!-- alert icon -->
|
|
<span style="float:left; margin:2px 5px 0 0;" class="ui-icon ui-icon-info"></span>
|
|
|
|
<h1></h1>
|
|
<p>'.$_SESSION['flashmessage'].'</p>
|
|
</div>
|
|
|
|
<!-- other templates here, maybe.. -->
|
|
</div>';
|
|
unset($_SESSION['flashmessage']);
|
|
}
|
|
|
|
// Standard header
|
|
$strAdminHeader .="<div class='maintitle'>{$sitename}</div>\n";
|
|
return $strAdminHeader;
|
|
}
|