# Conflicts:
#	public/css/admin_new.css
This commit is contained in:
tejagerjovic 2021-12-08 11:56:17 +01:00
commit 169b250c44
201 changed files with 5964 additions and 2031 deletions

View File

@ -897,16 +897,18 @@ class SurveyAdmin
echo '<div id="firstNavigation" >';
echo '<div id="mojeAnketeLink">';
echo '<a href="index.php?a=pregledovanje" title="' . $lang['srv_pregledovanje'] . ' (' . strtolower($lang['srv_create_survey']) . ', ' . strtolower($lang['srv_library']) . ')">'/*<span class="sprites moje_ankete_off"></span>*/.'<span class="library_link">' . $lang['srv_pregledovanje'] . '</span></a>';
echo '</div>';
echo '<ol class="navigation_buttons_list '.($this->isAnketar == true ? ' displayNone' : '').'">';
// Moje ankete
echo '<li>';
echo ' <div id="mojeAnketeLink">';
echo ' <a href="index.php?a=pregledovanje" title="' . $lang['srv_pregledovanje'] . ' (' . strtolower($lang['srv_create_survey']) . ', ' . strtolower($lang['srv_library']) . ')"><span class="library_link">' . $lang['srv_pregledovanje'] . '</span></a>';
echo ' </div>';
echo '</li>';
echo '<ol class="'.($this->isAnketar == true ? ' visibility_hidden' : '').'">';
if ($this->skin == 0 && $this->isAnketar == false) {
if ($this->skin == 0 /*&& $this->checkDostopAktiven()*/ && $this->isAnketar == false) {
echo '<li>';
echo '<li class="active_'.$css_status.'">';
if ($d->checkDostopSub('dashboard'))
echo '<a href="index.php?anketa=' . $this->anketa . '&a=' . A_REPORTI . '" title="' . $lang['srv_navigation_status'] . '">';
@ -933,13 +935,11 @@ class SurveyAdmin
echo '</li>';
}
echo '<li>';
echo '<li class="active_'.$css_urejanje.'">';
if ($d->checkDostopSub('edit') && $hierarhija_type < 5) {
echo '<a href="index.php?anketa=' . $this->anketa . ($this->survey_type > 1 ? '&a=' . A_BRANCHING : '') . '" title="' . $lang['srv_vprasalnik'] . '">';
}
echo '<div class="left-' . $css_urejanje . '">&nbsp;</div>';
echo '<div class="step-' . $css_urejanje . '">' . $lang['srv_vprasalnik'] . '</div>';
//echo $css_urejanjeRight;
if ($d->checkDostopSub('edit') && $hierarhija_type < 5) {
echo '</a>';
}
@ -948,16 +948,14 @@ class SurveyAdmin
# testiranje - ne prikazemo v glasovanju
if ($this->survey_type != 0 && $this->survey_type != 1) {
echo '<li>';
echo '<li class="active_'.$css_testiranje.'">';
if ($d->checkDostopSub('test')) {
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_TESTIRANJE . '" title="' . $lang['srv_testiranje'] . '">';
}
echo '<div class="step-' . $css_testiranje . '">' . $lang['srv_testiranje'] . '</div>';
//echo $css_testiranjeRight;
if ($d->checkDostopSub('test')) {
echo '</a>';
}
echo '</li>';
}
@ -970,7 +968,7 @@ class SurveyAdmin
$link = A_VABILA;
}
echo '<li>';
echo '<li class="active_'.$css_objava.'">';
if ($d->checkDostopSub('publish')) {
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . $link . '" title="' . $lang['srv_vabila'] . '">';
}
@ -984,12 +982,11 @@ class SurveyAdmin
// Podatki - ne prikazemo v glasovanju
if ($this->survey_type != 0) {
echo '<li>';
echo '<li class="active_'.$css_data.'">';
if ($d->checkDostopSub('data')) {
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_COLLECT_DATA . '" title="' . $lang['srv_results'] . '">';
}
echo '<div class="step-' . $css_data . '">' . $lang['srv_results'] . '</div>';
//echo $css_dataRight;
if ($d->checkDostopSub('data')) {
echo '</a>';
}
@ -1008,17 +1005,14 @@ class SurveyAdmin
$_goto_m = '&m=' . M_ANALYSIS_SUMMARY;
}
echo '<li>';
echo '<li class="active_'.$css_analysis.'">';
if ($d->checkDostopSub('analyse') && !isset($modules['hierarhija'])) {
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . $_goto_m . '" title="' . $lang['srv_analiza'] . '">';
}
elseif ($d->checkDostopSub('analyse') && isset($modules['hierarhija'])) {
echo '<a href="#" title="' . $lang['srv_analiza_hierarchy'] . '">';
}
echo '<div class="step-' . $css_analysis . '">' . $lang['srv_analiza'] . '</div>';
if ($d->checkDostopSub('analyse')) {
echo '</a>';
}
@ -1029,7 +1023,7 @@ class SurveyAdmin
$d = new Dostop();
if ($d->checkDostopAktiven()) {
echo '<ol class="quick_settings' . ($this->isAnketar == true ? ' visibility_hidden' : '') . '">';
echo '<ol class="quick_settings' . ($this->isAnketar == true ? ' displayNone' : '') . '">';
# Komentarji
SurveySetting::getInstance()->Init($this->anketa);
@ -1135,14 +1129,12 @@ class SurveyAdmin
# zavhiki dodatnih nastavitev
echo '<ol class="smaller right-side">';
echo '<ol class="navigation_modules">';
# MAZA - mobilna aplikacija za anketirance
if (isset($modules['maza'])) {
$css = ($this->first_action == A_MAZA) ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_MAZA . '" title="' . $lang['srv_maza'] . '">';
echo '<span class="module_icon maza"></span>';
@ -1153,8 +1145,6 @@ class SurveyAdmin
if (isset($modules['wpn'])) {
$css = ($this->first_action == A_WPN) ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_WPN . '" title="' . $lang['srv_wpn'] . '">';
echo '<span class="module_icon wpn"></span>';
@ -1165,8 +1155,6 @@ class SurveyAdmin
if (isset($modules['phone'])) {
$css = ($this->first_action == NAVI_PHONE) ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
# če je navadni user in anketar
if ($this->isAnketar) {
@ -1182,8 +1170,6 @@ class SurveyAdmin
if (isset($modules['slideshow'])) {
$css = ($this->first_action == NAVI_SLIDESHOW) ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_SLIDESHOW . '" title="' . $lang['srv_vrsta_survey_type_9'] . '">';
echo '<span class="module_icon slideshow"></span>';
@ -1194,8 +1180,6 @@ class SurveyAdmin
if (isset($modules['uporabnost'])) {
$css = ($this->first_action == NAVI_UPORABNOST) ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_UPORABNOST . '" title="' . $lang['srv_uporabnost'] . '">';
echo '<span class="module_icon evalvation"></span>';
@ -1206,8 +1190,6 @@ class SurveyAdmin
if ($row['user_from_cms'] >= 1) {
$css = ($this->first_action == NAVI_VNOS) ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_COOKIE . '" title="' . $lang['srv_vnos'] . '">';
echo '<span class="module_icon vnos"></span>';
@ -1218,8 +1200,6 @@ class SurveyAdmin
if (isset($modules['social_network'])) {
$css = ($this->first_action == NAVI_VNOS) ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_SOCIAL_NETWORK . '" title="' . $lang['srv_vrsta_survey_type_8'] . '">';
echo '<span class="module_icon social"></span>';
@ -1230,8 +1210,6 @@ class SurveyAdmin
if (isset($modules['quiz'])) {
$css = ($this->first_action == A_KVIZ) ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_KVIZ . '" title="' . $lang['srv_vrsta_survey_type_6'] . '">';
echo '<span class="module_icon quiz"></span>';
@ -1242,8 +1220,6 @@ class SurveyAdmin
if (isset($modules['voting'])) {
$css = ($this->first_action == A_VOTING) ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_VOTING . '" title="' . $lang['srv_vrsta_survey_type_18'] . '">';
echo '<span class="module_icon voting"></span>';
@ -1254,8 +1230,6 @@ class SurveyAdmin
if (isset($modules['advanced_paradata'])) {
$css = ($this->first_action == A_ADVANCED_PARADATA) ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ADVANCED_PARADATA . '" title="' . $lang['srv_vrsta_survey_type_16'] . '">';
echo '<span class="module_icon advanced_paradata"></span>';
@ -1266,8 +1240,6 @@ class SurveyAdmin
if (isset($modules['excell_matrix'])) {
$css = ($this->first_action == 'excell_matrix') ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=excell_matrix" title="Excelleration matrix">';
echo '<span class="module_icon excell_matrix"></span>';
@ -1278,8 +1250,6 @@ class SurveyAdmin
if (isset($modules['chat'])) {
$css = ($this->first_action == A_CHAT) ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_CHAT . '" title="' . $lang['srv_vrsta_survey_type_14'] . '">';
echo '<span class="module_icon chat"></span>';
@ -1290,8 +1260,6 @@ class SurveyAdmin
if (isset($modules['panel'])) {
$css = ($this->first_action == A_PANEL) ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_PANEL . '" title="' . $lang['srv_vrsta_survey_type_15'] . '">';
echo '<span class="module_icon panel"></span>';
@ -1302,8 +1270,6 @@ class SurveyAdmin
if (isset($modules['evoli'])) {
$css = ($this->first_action == 'evoli') ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=evoli" title="Evoli">';
echo '<span class="module_icon evoli"></span>';
@ -1314,8 +1280,6 @@ class SurveyAdmin
if (isset($modules['evoli_teammeter'])) {
$css = ($this->first_action == 'evoli_teammeter') ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=evoli_teammeter" title="Evoli team meter">';
echo '<span class="module_icon evoli_teammeter"></span>';
@ -1326,8 +1290,6 @@ class SurveyAdmin
if (isset($modules['evoli_quality_climate'])) {
$css = ($this->first_action == 'evoli_quality_climate') ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=evoli_quality_climate" title="Evoli quality climate">';
echo '<span class="module_icon evoli_quality_climate"></span>';
@ -1338,8 +1300,6 @@ class SurveyAdmin
if (isset($modules['evoli_teamship_meter'])) {
$css = ($this->first_action == 'evoli_teamship_meter') ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=evoli_teamship_meter" title="Evoli teamship meter">';
echo '<span class="module_icon evoli_teamship_meter"></span>';
@ -1350,8 +1310,6 @@ class SurveyAdmin
if (isset($modules['evoli_organizational_employeeship_meter'])) {
$css = ($this->first_action == 'evoli_organizational_employeeship_meter') ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=evoli_organizational_employeeship_meter" title="Evoli organizational employeeship meter">';
echo '<span class="module_icon evoli_organizational_employeeship_meter"></span>';
@ -1362,8 +1320,6 @@ class SurveyAdmin
if (isset($modules['evoli_employmeter'])) {
$css = ($this->first_action == 'evoli_employmeter') ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=evoli_employmeter" title="Evoli employeeship meter">';
echo '<span class="module_icon evoli_employmeter"></span>';
@ -1374,8 +1330,6 @@ class SurveyAdmin
if (isset($modules['mfdps'])) {
$css = ($this->first_action == 'mfdps') ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=mfdps" title="MFDPŠ">';
echo '<span class="module_icon mfdps"></span>';
@ -1386,8 +1340,6 @@ class SurveyAdmin
if (isset($modules['borza'])) {
$css = ($this->first_action == 'borza') ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=borza" title="BORZA">';
echo '<span class="module_icon borza"></span>';
@ -1398,8 +1350,6 @@ class SurveyAdmin
if (isset($modules['mju'])) {
$css = ($this->first_action == 'mju') ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=mju" title="MJU">';
echo '<span class="module_icon mju"></span>';
@ -1410,8 +1360,6 @@ class SurveyAdmin
if (isset($modules['360_stopinj'])) {
$css = ($this->first_action == '360_stopinj') ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=360_stopinj" title="' . $lang['srv_360_reports'] . '">';
echo '<span class="module_icon degrees"></span>';
@ -1422,8 +1370,6 @@ class SurveyAdmin
if (isset($modules['360_stopinj_1ka'])) {
$css = ($this->first_action == '360_stopinj_1ka') ? 'on' : 'off';
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=360_stopinj_1ka" title="' . $lang['srv_360_reports'] . '">';
echo '<span class="module_icon degrees_1ka"></span>';
@ -1433,8 +1379,6 @@ class SurveyAdmin
# GDPR
$gdpr = new GDPR();
if (true /*$gdpr->isGDPRSurvey($this->anketa)*/) {
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=gdpr_settings" title="' . $lang['srv_gdpr'] . '">';
@ -1444,7 +1388,6 @@ class SurveyAdmin
}
# SA - hierarhija
if (isset($modules['hierarhija'])) {
echo '<li class="space">&nbsp;</li>';
echo '<li>';
if($modules['hierarhija'] == 1) {
@ -1469,7 +1412,6 @@ class SurveyAdmin
echo '</li>';
}
elseif(UserSetting::getInstance()->getUserSetting('showSAicon') && $admin_type < 3){
echo '<li class="space">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_HIERARHIJA_SUPERADMIN . '&amp;m='.M_HIERARHIJA_STATUS.'" title="' . $lang['srv_hierarchy'] . '">';
@ -1507,77 +1449,66 @@ class SurveyAdmin
# podzavihek: urejanje ankete
if ($this->first_action == NAVI_UREJANJE) {
echo '<ul class="secondNavigation ' . ($this->isAnketar == true ? ' visibility_hidden' : '') . '">';
echo '<ul class="secondNavigation ' . ($this->isAnketar == true ? ' displayNone' : '') . '">';
#zavihek vprasalnik *
echo '<li>';
echo '<a class="no-img side-left' . ($this->second_action == NAVI_UREJANJE_BRANCHING ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . ($this->survey_type > 1 ? '&a=' . A_BRANCHING : '') . '" title="' . $lang['srv_editirajanketo2'] . '">';
echo '<li class="'.($this->second_action == NAVI_UREJANJE_BRANCHING ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . ($this->survey_type > 1 ? '&a=' . A_BRANCHING : '') . '" title="' . $lang['srv_editirajanketo2'] . '">';
echo $lang['srv_editirajanketo2'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
#zavihek urejanje akete
echo '<li>';
echo '<a class="no-img' . ($this->second_action == NAVI_UREJANJE_ANKETA ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&a=' . A_SETTINGS . '" title="' . $lang['srv_nastavitve_ankete'] . '">';
echo '<li class="'.($this->second_action == NAVI_UREJANJE_ANKETA ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&a=' . A_SETTINGS . '" title="' . $lang['srv_nastavitve_ankete'] . '">';
echo $lang['srv_nastavitve_ankete'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
# zavihek oblika
echo '<li>';
echo '<a class="no-img side-right' . ($this->second_action == NAVI_UREJANJE_TEMA ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_TEMA . '" title="' . $lang['srv_themes'] . '">';
echo '<li class="'.($this->second_action == NAVI_UREJANJE_TEMA ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_TEMA . '" title="' . $lang['srv_themes'] . '">';
echo $lang['srv_themes'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
echo '</ul>';
# link arhivi
if (!$this->isAnketar) {
echo '<ul class="secondNavigationArchive">';
# link arhivi
echo '<li class="' . ($get == A_ARHIVI || $get == A_TRACKING ? ' aactive' : '') . '">';
echo '<a class="' . ($get == A_ARHIVI || $get == A_TRACKING ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ARHIVI . '" title="' . $lang['srv_arhivi'] . '">';
//echo $lang['srv_arhivi'];
echo /*'<span class="sprites archive"></span>' .*/ $lang['srv_analiza_arhiv'];
echo '<li class="'.($get == A_ARHIVI || $get == A_TRACKING ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ARHIVI . '" title="' . $lang['srv_arhivi'] . '">';
echo $lang['srv_analiza_arhiv'];
echo '</a>';
echo '</li>';
echo '</ul>';
}
}
# podzavihek: testiranje
if ($this->first_action == NAVI_TESTIRANJE) {
//$tab = $_GET['m'];
echo '<ul class="secondNavigation">';
echo '<li>';
echo '<a class="no-img side-left' . ($this->second_action == M_TESTIRANJE_DIAGNOSTIKA ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_TESTIRANJE . '&amp;m=' . M_TESTIRANJE_DIAGNOSTIKA . '" title="' . $lang['srv_testiranje_diagnostika'] . '">';
echo '<li class="'.($this->second_action == M_TESTIRANJE_DIAGNOSTIKA ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_TESTIRANJE . '&amp;m=' . M_TESTIRANJE_DIAGNOSTIKA . '" title="' . $lang['srv_testiranje_diagnostika'] . '">';
echo $lang['srv_testiranje_diagnostika'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
# zavihek trajanje
echo '<li>';
echo '<a class="no-img' . ($this->second_action == NAVI_TESTIRANJE_PREDVIDENI || $this->second_action == NAVI_TESTIRANJE_CAS ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_TESTIRANJE . '&amp;m=' . A_TRAJANJE_PREDVIDENI . '" title="' . $lang['srv_testiranje_trajanje'] . '">';
echo '<li class="'.($this->second_action == NAVI_TESTIRANJE_PREDVIDENI || $this->second_action == NAVI_TESTIRANJE_CAS ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_TESTIRANJE . '&amp;m=' . A_TRAJANJE_PREDVIDENI . '" title="' . $lang['srv_testiranje_trajanje'] . '">';
echo $lang['srv_testiranje_trajanje'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
# zavihek komentarji
echo '<li>';
echo '<a class="no-img' . ($this->second_action == NAVI_TESTIRANJE_KOMENTARJI || $this->second_action == NAVI_TESTIRANJE_KOMENTARJI_ANKETA ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_KOMENTARJI . '" title="' . $lang['srv_testiranje_komentarji'] . '">';
echo '<li class="'.($this->second_action == NAVI_TESTIRANJE_KOMENTARJI || $this->second_action == NAVI_TESTIRANJE_KOMENTARJI_ANKETA ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_KOMENTARJI . '" title="' . $lang['srv_testiranje_komentarji'] . '">';
echo $lang['srv_testiranje_komentarji'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
echo '<li>';
echo '<a class="no-img side-right' . ($this->second_action == NAVI_TESTIRANJE_VNOSI ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_TESTIRANJE . '&amp;m=' . M_TESTIRANJE_VNOSI . '" title="' . $lang['srv_testiranje_vnosi'] . '">';
echo '<li class="'.($this->second_action == NAVI_TESTIRANJE_VNOSI ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_TESTIRANJE . '&amp;m=' . M_TESTIRANJE_VNOSI . '" title="' . $lang['srv_testiranje_vnosi'] . '">';
echo $lang['srv_testiranje_vnosi'] . '</a>';
echo '</li>';
@ -1589,15 +1520,16 @@ class SurveyAdmin
$query_testdata = sisplet_query($str_testdata);
[$testdata] = mysqli_fetch_row($query_testdata);
# link arhivi
if ((int)$testdata > 0) {
echo '<ul class="secondNavigationArchive">';
# link arhivi
echo '<li>';
echo '<a class="' . ($get == A_ARHIVI || $get == A_TRACKING ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ARHIVI . '&m=testdata" title="' . $lang['srv_arhivi'] . '">';
echo /*'<span class="sprites archive"></span>' .*/ $lang['srv_analiza_arhiv'];
echo '<li class="'.($get == A_ARHIVI || $get == A_TRACKING ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ARHIVI . '&m=testdata" title="' . $lang['srv_arhivi'] . '">';
echo $lang['srv_analiza_arhiv'];
echo '</a>';
echo '</li>';
echo '</ul>';
}
}
@ -1611,38 +1543,34 @@ class SurveyAdmin
echo '<ul class="secondNavigation">';
#((($tab == 'url' || ($row['email'] != 1 && !$tab && $get!='email')) && ($get != 'invitations'))
echo '<li>';
echo '<a class="no-img side-left' . ($_GET['a'] == A_VABILA && ($_GET['m'] == '' || $_GET['m'] == 'settings') ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_VABILA . '&m=settings" title="' . $lang['srv_publication_base'] . '">';
echo '<li class="'.($_GET['a'] == A_VABILA && ($_GET['m'] == '' || $_GET['m'] == 'settings') ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_VABILA . '&m=settings" title="' . $lang['srv_publication_base'] . '">';
echo $lang['srv_publication_base'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
echo '<li>';
echo '<a class="no-img side' . ($_GET['a'] == A_VABILA && $_GET['m'] == 'url' ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_VABILA . '&m=url" title="' . $lang['srv_publication_url'] . '">';
echo '<li class="'.($_GET['a'] == A_VABILA && $_GET['m'] == 'url' ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_VABILA . '&m=url" title="' . $lang['srv_publication_url'] . '">';
echo $lang['srv_publication_url'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
echo '<li>';
echo '<a class="no-img side-right' . ($_GET['a'] == A_INVITATIONS && $_GET['m'] != 'view_archive' ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_INVITATIONS . '" title="' . $lang['srv_inv_nav_invitations'] . '">';
echo '<li class="'.($_GET['a'] == A_INVITATIONS && $_GET['m'] != 'view_archive' ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_INVITATIONS . '" title="' . $lang['srv_inv_nav_invitations'] . '">';
echo $lang['srv_inv_nav_invitations'] . '</a>';
echo '</li>';
echo '</ul>';
echo '<ul class="secondNavigationArchive">';
# link arhivi
echo '<li>';
echo '<a class="' . ($get == A_ARHIVI || $get == A_TRACKING || $_GET['m'] == 'view_archive' ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=invitations&m=view_archive" title="' . $lang['srv_arhivi'] . '">';
//echo $lang['srv_arhivi'];
echo /*'<span class="sprites archive"></span>' .*/ $lang['srv_analiza_arhiv'];
echo '<ul class="secondNavigationArchive">';
echo '<li class="'.($get == A_ARHIVI || $get == A_TRACKING || $_GET['m'] == 'view_archive' ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=invitations&m=view_archive" title="' . $lang['srv_arhivi'] . '">';
echo $lang['srv_analiza_arhiv'];
echo '</a>';
echo '</li>';
echo '</ul>';
echo '</ul>';
}
# podzavihek: analize
if ($this->first_action == NAVI_ANALYSIS) {
@ -1650,104 +1578,89 @@ class SurveyAdmin
# ZDRUŽIMO STATISTIKE
# osnovne
echo '<li>';
echo '<a class="no-img side-left' . ($_GET['m'] == M_ANALYSIS_SUMMARY
|| $_GET['m'] == M_ANALYSIS_FREQUENCY
|| $_GET['m'] == M_ANALYSIS_DESCRIPTOR
|| $_GET['m'] == M_ANALYSIS_CROSSTAB
|| $_GET['m'] == M_ANALYSIS_MEANS
|| $_GET['m'] == M_ANALYSIS_TTEST
|| $_GET['m'] == M_ANALYSIS_BREAK
|| $_GET['m'] == M_ANALYSIS_PARA
|| $_GET['m'] == M_ANALYSIS_MULTICROSSTABS
|| $_GET['m'] == M_ANALYSIS_MEANS_HIERARHY
|| $_GET['m'] == M_ANALYSIS_HEATMAP
? ' active' : '') . '"';
echo '<li class="'.($_GET['m'] == M_ANALYSIS_SUMMARY
|| $_GET['m'] == M_ANALYSIS_FREQUENCY
|| $_GET['m'] == M_ANALYSIS_DESCRIPTOR
|| $_GET['m'] == M_ANALYSIS_CROSSTAB
|| $_GET['m'] == M_ANALYSIS_MEANS
|| $_GET['m'] == M_ANALYSIS_TTEST
|| $_GET['m'] == M_ANALYSIS_BREAK
|| $_GET['m'] == M_ANALYSIS_PARA
|| $_GET['m'] == M_ANALYSIS_MULTICROSSTABS
|| $_GET['m'] == M_ANALYSIS_MEANS_HIERARHY
|| $_GET['m'] == M_ANALYSIS_HEATMAP
? ' active' : '').'">';
if (SurveyInfo::getInstance()->checkSurveyModule('hierarhija')) {
echo ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_MEANS_HIERARHY . '" title="' . $lang['srv_stat_analiza'] . '">';
} else {
echo ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_SUMMARY . '" title="' . $lang['srv_stat_analiza'] . '">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_MEANS_HIERARHY . '" title="' . $lang['srv_stat_analiza'] . '">';
}
else {
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_SUMMARY . '" title="' . $lang['srv_stat_analiza'] . '">';
}
echo $lang['srv_stat_analiza'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
if (!SurveyInfo::getInstance()->checkSurveyModule('hierarhija')) {
# zavihek GRAFI
echo '<li>';
echo '<a class="no-img ' . ($_GET['m'] == M_ANALYSIS_CHARTS ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_CHARTS . '" title="' . $lang['srv_analiza_charts'] . '">';
echo '<li class="'.($_GET['m'] == M_ANALYSIS_CHARTS ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_CHARTS . '" title="' . $lang['srv_analiza_charts'] . '">';
echo $lang['srv_analiza_charts'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
// zavihek POROCILA
// Link na navadna porocila
if (SurveyCustomReport::checkEmpty($this->anketa)) {
echo '<li>';
echo '<a class="no-img side-right ' . ($_GET['m'] == M_ANALYSIS_CREPORT || $this->second_action == NAVI_ANALYSIS_LINKS ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_LINKS . '" title="' . $lang['srv_reporti'] . '">';
echo '<li class="'.($_GET['m'] == M_ANALYSIS_CREPORT || $this->second_action == NAVI_ANALYSIS_LINKS ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_LINKS . '" title="' . $lang['srv_reporti'] . '">';
echo $lang['srv_reporti'] . '</a>';
echo '</li>';
} // Link na porocilo po meri (ce ni prazno)
}
// Link na porocilo po meri (ce ni prazno)
else {
echo '<li>';
echo '<a class="no-img side-right' . ($_GET['m'] == M_ANALYSIS_CREPORT || $this->second_action == NAVI_ANALYSIS_LINKS ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_CREPORT . '" title="' . $lang['srv_reporti'] . '">';
echo '<li class="'.($_GET['m'] == M_ANALYSIS_CREPORT || $this->second_action == NAVI_ANALYSIS_LINKS ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_CREPORT . '" title="' . $lang['srv_reporti'] . '">';
echo $lang['srv_reporti'] . '</a>';
echo '</li>';
}
// zavihek vizualizacija - zaenkrat samo admini
if ($admin_type === '0') {
echo '<li class="space"></li>';
echo '<li>';
echo '<a class="no-img ' . ($_GET['m'] == M_ANALYSIS_VIZUALIZACIJA ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_VIZUALIZACIJA . '" title="' . $lang['srv_vizualizacija'] . '">';
echo '<li class="'.($_GET['m'] == M_ANALYSIS_VIZUALIZACIJA ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_VIZUALIZACIJA . '" title="' . $lang['srv_vizualizacija'] . '">';
echo $lang['srv_vizualizacija'] . '</a>';
echo '</li>';
}
// zavihek 360 STOPINJSKA POROCILA
if (SurveyInfo::getInstance()->checkSurveyModule('360_stopinj')) {
echo '<li class="space"></li>';
echo '<li>';
echo '<a class="no-img ' . ($_GET['m'] == M_ANALYSIS_360 ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_360 . '" title="' . $lang['srv_360_stopinj'] . '">';
echo '<li class="'.($_GET['m'] == M_ANALYSIS_360 ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_360 . '" title="' . $lang['srv_360_stopinj'] . '">';
echo $lang['srv_360_report'] . '</a>';
echo '</li>';
}
// zavihek 360 STOPINJSKA POROCILA 1KA
if (SurveyInfo::getInstance()->checkSurveyModule('360_stopinj_1ka')) {
echo '<li class="space"></li>';
echo '<li>';
echo '<a class="no-img ' . ($_GET['m'] == M_ANALYSIS_360_1KA ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_360_1KA . '" title="' . $lang['srv_360_stopinj'] . '">';
echo '<li class="'.($_GET['m'] == M_ANALYSIS_360_1KA ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_360_1KA . '" title="' . $lang['srv_360_stopinj'] . '">';
echo $lang['srv_360_report'] . '</a>';
echo '</li>';
}
//$row = Cache::srv_spremenljivka($spremenljivka);
}
echo '</ul>';
echo '<ul class="secondNavigationArchive">';
# link arhivi
echo '<li>';
echo '<a class="no-img ' . ($_GET['m'] == M_ANALYSIS_ARCHIVE ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_ARCHIVE . '" title="' . $lang['srv_analiza_arhiv'] . '">';
echo /*'<span class="sprites archive"></span>' .*/ $lang['srv_analiza_arhiv'];
echo '<ul class="secondNavigationArchive">';
echo '<li class="'.($_GET['m'] == M_ANALYSIS_ARCHIVE ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ANALYSIS . '&amp;m=' . M_ANALYSIS_ARCHIVE . '" title="' . $lang['srv_analiza_arhiv'] . '">';
echo $lang['srv_analiza_arhiv'];
echo '</a>';
echo '</li>';
@ -1761,50 +1674,44 @@ class SurveyAdmin
echo '<ul class="secondNavigation">';
// podatki
echo '<li>';
echo '<a class="no-img side-left' . ((($_GET['m'] == 'view' || $_GET['m'] == '' || $_GET['m'] == M_COLLECT_DATA_QUICKEDIT || $_GET['m'] == M_COLLECT_DATA_VARIABLE_VIEW || $_GET['m'] == M_COLLECT_DATA_QUICKEDIT) && $_GET['a'] != A_COLLECT_DATA_EXPORT) ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_COLLECT_DATA . '" title="' . $lang['srv_link_data_browse'] . '">';
echo '<li class="'.((($_GET['m'] == 'view' || $_GET['m'] == '' || $_GET['m'] == M_COLLECT_DATA_QUICKEDIT || $_GET['m'] == M_COLLECT_DATA_VARIABLE_VIEW || $_GET['m'] == M_COLLECT_DATA_QUICKEDIT) && $_GET['a'] != A_COLLECT_DATA_EXPORT) ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_COLLECT_DATA . '" title="' . $lang['srv_link_data_browse'] . '">';
echo $lang['srv_link_data_browse'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
// izracuni
echo '<li>';
echo '<a class="no-img' . ($_GET['m'] == M_COLLECT_DATA_CALCULATION || $_GET['m'] == M_COLLECT_DATA_CODING || $_GET['m'] == 'coding_auto' || $_GET['m'] == M_COLLECT_DATA_RECODING || $_GET['m'] == M_COLLECT_DATA_RECODING_DASHBOARD ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_COLLECT_DATA . '&amp;m=calculation" title="' . $lang['srv_data_navigation_calculate'] . '">';
echo '<li class="'.($_GET['m'] == M_COLLECT_DATA_CALCULATION || $_GET['m'] == M_COLLECT_DATA_CODING || $_GET['m'] == 'coding_auto' || $_GET['m'] == M_COLLECT_DATA_RECODING || $_GET['m'] == M_COLLECT_DATA_RECODING_DASHBOARD ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_COLLECT_DATA . '&amp;m=calculation" title="' . $lang['srv_data_navigation_calculate'] . '">';
echo $lang['srv_data_navigation_calculate'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
// uvoz
echo '<li>';
echo '<a class="no-img' . ($_GET['m'] == 'append' || $_GET['m'] == 'merge' || $_GET['m'] == 'upload_xls' || $_GET['m'] == 'append_xls' ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_COLLECT_DATA . '&amp;m=append" title="' . $lang['srv_data_navigation_import'] . '">';
echo '<li class="'.($_GET['m'] == 'append' || $_GET['m'] == 'merge' || $_GET['m'] == 'upload_xls' || $_GET['m'] == 'append_xls' ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_COLLECT_DATA . '&amp;m=append" title="' . $lang['srv_data_navigation_import'] . '">';
echo $lang['srv_data_navigation_import'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
$d = new Dostop();
# izvozi
if ($d->checkDostopSub('export')) {
echo '<li>';
echo '<a class="no-img side-right' . ($this->second_action == NAVI_DATA_EXPORT ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_COLLECT_DATA_EXPORT . '" title="' . $lang['srv_export_tab'] . '">';
echo '<li class="'.($this->second_action == NAVI_DATA_EXPORT ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_COLLECT_DATA_EXPORT . '" title="' . $lang['srv_export_tab'] . '">';
echo $lang['srv_export_tab'] . '</a>';
echo '</li>';
}
echo '</ul>';
# link arhivi
if ($d->checkDostopSub('edit')) {
echo '<ul class="secondNavigationArchive">';
# link arhivi
echo '<li>';
echo '<a class="no-img ' . ($_GET['a'] == A_ARHIVI && $_GET['m'] == 'data' ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ARHIVI . '&amp;m=data" title="' . $lang['srv_arhiv_data'] . '">';
//echo $lang['srv_analiza_arhiv'];
echo /*'<span class="sprites archive"></span>' .*/ $lang['srv_analiza_arhiv'];
echo '<li class="'.($_GET['a'] == A_ARHIVI && $_GET['m'] == 'data' ? ' active' : '').'">';
echo '<a href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_ARHIVI . '&amp;m=data" title="' . $lang['srv_arhiv_data'] . '">';
echo $lang['srv_analiza_arhiv'];
echo '</a>';
echo '</li>';
@ -1838,7 +1745,7 @@ class SurveyAdmin
|| isset($modules['quiz'])
|| isset($modules['social_network'])
|| isset($modules['slideshow'])) ? '' : ' side-right';
echo '<li class="space"></li>';
echo '<li><a class="no-img' . $_right . $_active . '" href="' . $site_url . 'admin/survey/index.php?anketa=' . $this->anketa . '&amp;a=' . A_UPORABNOST . '" title="' . $lang['srv_uporabnost'] . '">' . $lang['srv_uporabnost'] . '</a></li>';
}
# vnos
@ -1847,7 +1754,7 @@ class SurveyAdmin
$_right = (isset($modules['quiz'])
|| isset($modules['social_network'])
|| isset($modules['slideshow'])) ? '' : ' side-right';
echo '<li class="space"></li>';
echo '<li><a class="no-img' . $_right . $_active . '" href="' . $site_url . 'admin/survey/index.php?anketa=' . $this->anketa . '&amp;a=' . A_VNOS . '" title="' . $lang['srv_vnos'] . '">' . $lang['srv_vnos'] . '</a></li>';
}
#kviz
@ -1855,7 +1762,7 @@ class SurveyAdmin
$_active = ($_GET['a'] == A_KVIZ) ? ' active' : '';
$_right = (isset($modules['social_network'])
|| isset($modules['slideshow'])) ? '' : ' side-right';
echo '<li class="space"></li>';
echo '<li><a class="no-img' . $_right . $_active . '" href="' . $site_url . 'admin/survey/index.php?anketa=' . $this->anketa . '&amp;a=' . A_KVIZ . '" title="' . $lang['srv_kviz'] . '">' . $lang['srv_kviz'] . '</a></li>';
}
#volitve
@ -1863,7 +1770,7 @@ class SurveyAdmin
$_active = ($_GET['a'] == A_VOTING) ? ' active' : '';
$_right = (isset($modules['social_network'])
|| isset($modules['slideshow'])) ? '' : ' side-right';
echo '<li class="space"></li>';
echo '<li><a class="no-img' . $_right . $_active . '" href="' . $site_url . 'admin/survey/index.php?anketa=' . $this->anketa . '&amp;a=' . A_VOTING . '" title="' . $lang['srv_voting'] . '">' . $lang['srv_voting'] . '</a></li>';
}
#napredni parapodatki
@ -1871,20 +1778,20 @@ class SurveyAdmin
$_active = ($_GET['a'] == A_ADVANCED_PARADATA) ? ' active' : '';
$_right = (isset($modules['advanced_paradata'])
|| isset($modules['advanced_paradata'])) ? '' : ' side-right';
echo '<li class="space"></li>';
echo '<li><a class="no-img' . $_right . $_active . '" href="' . $site_url . 'admin/survey/index.php?anketa=' . $this->anketa . '&amp;a=' . A_ADVANCED_PARADATA . '" title="' . $lang['srv_advanced_paradata'] . '">' . $lang['srv_advanced_paradata'] . '</a></li>';
}
# SN
if (isset($modules['social_network'])) {
$_active = ($_GET['a'] == A_SOCIAL_NETWORK) ? ' active' : '';
$_right = (isset($modules['slideshow'])) ? '' : ' side-right';
echo '<li class="space"></li>';
echo '<li><a class="no-img' . $_right . $_active . '" href="' . $site_url . 'admin/survey/index.php?anketa=' . $this->anketa . '&amp;a=' . A_SOCIAL_NETWORK . '" title="' . $lang['srv_vrsta_survey_type_8'] . '">' . $lang['srv_vrsta_survey_type_8'] . '</a></li>';
}
#slideshow
if (isset($modules['slideshow'])) {
$_active = ($_GET['a'] == A_SLIDESHOW) ? ' active' : '';
echo '<li class="space"></li>';
echo '<li><a class="no-img side-right' . $_active . '" href="' . $site_url . 'admin/survey/index.php?anketa=' . $this->anketa . '&amp;a=' . A_SLIDESHOW . '" title="' . $lang['srv_vrsta_survey_type_9'] . '">' . $lang['srv_vrsta_survey_type_9'] . '</a></li>';
}
@ -1910,7 +1817,6 @@ class SurveyAdmin
. ' href="index.php?anketa=' . $this->anketa . '&a=' . A_REPORTI . '" title="' . $lang['srv_status_osnovni'] . '">';
echo $lang['srv_status_summary'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
# parapodatki (browser, os, js...) - volitve imajo to ugasnjeno
if(!SurveyInfo::getInstance()->checkSurveyModule('voting')) {
@ -1919,19 +1825,15 @@ class SurveyAdmin
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_PARA_GRAPH . '" title="' . $lang['srv_metapodatki'] . '">';
echo $lang['srv_metapodatki'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
}
# neodgovori in uporabnost enot
//if ($admin_type === '0') {
# non-responses
echo '<li>';
echo '<a class="no-img' . ($_GET['a'] == A_NONRESPONSE_GRAPH ? ' active' : '') . '"'
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_NONRESPONSE_GRAPH . '" title="' . $lang['srv_para_neodgovori'] . '">';
echo $lang['srv_para_neodgovori'] . '</a>';
echo '</li>';
echo '<li class="space"></li>';
//}
# Gumb za novo stran napredni statusi
echo '<li>';
@ -1939,7 +1841,6 @@ class SurveyAdmin
. ' href="index.php?anketa=' . $this->anketa . '&amp;a=' . A_STATUS_ADVANCED . '" title="' . $lang['srv_status_advanced'] . '">';
echo $lang['srv_status_advanced'] . ' >></a>';
echo '</li>';
echo '<li class="space"></li>';
echo '</ul>';
}
@ -1964,6 +1865,7 @@ class SurveyAdmin
if($hierarhija_type < 5) {
echo '<div id="secondNavigation_links">';
# Ikonce za delete, copy ....
$d = new Dostop();
if ($d->checkDostopAktiven()) {
@ -2081,17 +1983,26 @@ class SurveyAdmin
// Custom footer
if(AppSettings::getInstance()->getSetting('app_settings-footer_custom') !== false){
echo '<div class="footer_line">';
echo AppSettings::getInstance()->getSetting('app_settings-footer_text');
echo '</div>';
}
// Default footer
else{
// First left line - links
echo '<div class="footer_line">';
echo $lang['srv_footer_links'];
if(isAAI())
echo '<span class="footer_item"><a href="https://www.1ka.si/d/sl/pomoc/pogosta-vprasanja/pogosta-vprasanja-o-arnes-aai-prijavi-uporabi-orodja-1ka" target="_blank">'.$lang['aa4'].'</a></span>';
echo '</div>';
if(isAAI()){
echo ' | <a href="https://www.1ka.si/d/sl/pomoc/pogosta-vprasanja/pogosta-vprasanja-o-arnes-aai-prijavi-uporabi-orodja-1ka" target="_blank">'.$lang['aa4'].'</a>';
}
echo '<br />';
// Second left line - version...
echo '<div class="footer_line">';
// Verzijo izpišemo samo za admine
if ($admin_type == 0) {
@ -2099,19 +2010,21 @@ class SurveyAdmin
// Verzija 1ka
$sqlVersion = sisplet_query("SELECT value FROM misc WHERE what='version'", "obj");
if (!empty($sqlVersion)) {
echo $lang['srv_footer_1ka_version'].': ' . $sqlVersion->value . ' | ';
echo '<span class="footer_item">'.$lang['srv_footer_1ka_version'].': ' . $sqlVersion->value . '</span>';
}
// Verzija Drupal
if ($site_frontend == 'drupal') {
$sqlDrupal = sisplet_query("SELECT value FROM misc WHERE what='drupal version'", "obj");
if (!empty($sqlDrupal)) {
echo 'Drupal: ' . $sqlDrupal->value . ' | ';
echo '<span class="footer_item">Drupal: ' . $sqlDrupal->value . '</span>';
}
}
}
echo 'Copyright (©) 2002-'.date('Y').' '.$lang['srv_footer_copyright'];
echo '<span class="footer_item">Copyright (©) 2002-'.date('Y').' '.$lang['srv_footer_copyright'].'</span>';
echo '</div>';
}
echo '</div>';

View File

@ -254,16 +254,12 @@ class SurveyList {
echo $lang['n_users_list'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
#zavihek seznam vseh uporabnikov
echo '<li>';
echo '<a class="no-img single '.($_GET['m'] == 'all' ? 'active' : '').'"'
.' href="index.php?a=diagnostics&t=uporabniki&m=all" title="'.$lang['n_users_list_all'].'">';
echo $lang['n_users_list_all'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
#zavihek izbrisani uporabniki
echo '<li>';
@ -271,8 +267,6 @@ class SurveyList {
.' href="index.php?a=diagnostics&t=uporabniki&m=izbrisani" title="'.$lang['n_deleted_users'].'">';
echo $lang['n_deleted_users'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
#zavihek odjavljeni uporabniki
echo '<li>';
@ -280,8 +274,6 @@ class SurveyList {
.' href="index.php?a=diagnostics&t=uporabniki&m=nepotrjeni" title="'.$lang['n_unconfirmed_users'].'">';
echo $lang['n_unconfirmed_users'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
#zavihek nepotrjenih uporabnikov
echo '<li>';
@ -289,8 +281,6 @@ class SurveyList {
.' href="index.php?a=diagnostics&t=uporabniki&m=odjavljeni" title="'.$lang['n_unsigned_users'].'">';
echo $lang['n_unsigned_users'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
#zavihek sa modul
echo '<li>';
@ -327,40 +317,30 @@ class SurveyList {
echo $lang['srv_ankete'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
echo '<li>';
echo '<a class="no-img'.(($_GET['t']=='time_span_daily') ? ' active' : '').'"'
.' href="index.php?a=diagnostics&t=time_span_daily" title="'.$lang['srv_weekly_diagnostics'].'">';
echo $lang['srv_weekly_diagnostics'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
echo '<li>';
echo '<a class="no-img'.(($_GET['t']=='time_span_monthly') ? ' active' : '').'"'
.' href="index.php?a=diagnostics&t=time_span_monthly" title="'.$lang['srv_monthly_diagnostics'].'">';
echo $lang['srv_monthly_diagnostics'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
echo '<li>';
echo '<a class="no-img'.(($_GET['t']=='time_span_yearly') ? ' active' : '').'"'
.' href="index.php?a=diagnostics&t=time_span_yearly" title="'.$lang['srv_yearly_diagnostics'].'">';
echo $lang['srv_yearly_diagnostics'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
echo '<li>';
echo '<a class="no-img side-right'.(($_GET['t']=='time_span') ? ' active' : '').'"'
.' href="index.php?a=diagnostics&t=time_span&uvoz=0&ustrezni=1&delnoustrezni=1&neustrezni=0" title="'.$lang['srv_all_diagnostics'].'">';
echo $lang['srv_all_diagnostics'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
echo '<li>';
echo '<a class="no-img side-right'.(($_GET['t']=='paradata') ? ' active' : '').'"'
.' href="index.php?a=diagnostics&t=paradata" title="'.$lang['srv_metapodatki'].'">';
@ -383,7 +363,6 @@ class SurveyList {
.' href="index.php?a=knjiznica" title="'.$lang['srv_javna_knjiznica'].'">';
echo $lang['srv_javna_knjiznica'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
# Zavihek moja knjižnica
echo '<li>';
@ -408,42 +387,42 @@ class SurveyList {
.' href="index.php?a=nastavitve&amp;m=system" title="'.$lang['srv_settingsSystem'].'">';
echo $lang['srv_settingsSystem'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
# Zavihek ocenjevanje trajanja
echo '<li>';
echo '<a class="no-img'.($tab=='predvidenicasi' ? ' active' : '').'"'
.' href="index.php?a=nastavitve&amp;m=predvidenicasi" title="'.$lang['srv_testiranje_predvidenicas'].'">';
echo $lang['srv_testiranje_predvidenicas'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
# Zavihek mape
echo '<li>';
echo '<a class="no-img'.($tab=='collectData' ? ' active' : '').'"'
.' href="index.php?a=nastavitve&amp;m=collectData" title="'.$lang['srv_collectData'].'">';
echo $lang['srv_collectData'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
# Zavihek lep url
echo '<li>';
echo '<a class="no-img'.($tab=='nice_links' ? ' active' : '').'"'
.' href="index.php?a=nastavitve&amp;m=nice_links" title="'.$lang['srv_nice_url'].'">';
echo $lang['srv_nice_url'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
# ankete z administrativnim dostopom
echo '<li>';
echo '<a class="no-img'.($tab=='anketa_admin' ? ' active' : '').'"'
.' href="index.php?a=nastavitve&amp;m=anketa_admin" title="'.$lang['srv_anketa_admin'].'">';
echo $lang['srv_anketa_admin'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
# zbrisane ankete
echo '<li>';
echo '<a class="no-img'.($tab=='anketa_deleted' ? ' active' : '').'"'
.' href="index.php?a=nastavitve&amp;m=anketa_deleted" title="'.$lang['srv_anketa_deleted'].'">';
echo $lang['srv_anketa_deleted'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
# Zbrisani podatki
echo '<li>';
echo '<a class="no-img'.($tab=='data_deleted' ? ' active' : '').'"'
@ -451,19 +430,13 @@ class SurveyList {
echo $lang['srv_data_deleted'].'</a>';
echo '</li>';
}
// nastavitve uporabnika
if($admin_type == 0)
echo '<li class="space"></li>';
echo '<li>';
echo '<a class="no-img side-right'.($tab=='global_user_settings' ? ' active' : '').'"'
.' href="index.php?a=nastavitve&amp;m=global_user_settings" title="'.$lang['srv_user_settings'].'">';
echo $lang['srv_user_settings'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
// Moj profil
echo '<li>';
echo '<a class="no-img side-right' . ($tab == 'global_user_myProfile' ? ' active' : '') . '"' . ' href="index.php?a=nastavitve&amp;m=global_user_myProfile" title="' . $lang['edit_data'] . '">';
@ -484,10 +457,7 @@ class SurveyList {
echo $lang['srv_notifications_recieved'].'</a>';
echo '</li>';
if ($admin_type == '0') {
echo '<li class="space"></li>';
if ($admin_type == '0') {
# poslana obvestila
echo '<li>';
echo '<a class="no-img side-left'.($_GET['t']=='sent' ? ' active' : '').'"'
@ -509,8 +479,6 @@ class SurveyList {
.' href="index.php?a=narocila" title="'.$lang['srv_narocila_my'].'">';
echo $lang['srv_narocila_my'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
# placila - samo admini
if ($admin_type == '0') {
@ -535,16 +503,12 @@ class SurveyList {
echo $lang['srv_gdpr_user_settings'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
// Seznam anket
echo '<li>';
echo '<a class="no-img side-right'.($_GET['m']=='gdpr_survey_list' ? ' active' : '').'"'
.' href="index.php?a=gdpr&amp;m=gdpr_survey_list" title="'.$lang['srv_gdpr_survey_list'].'">';
echo $lang['srv_gdpr_survey_list'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
// DPA
echo '<li>';
@ -553,8 +517,6 @@ class SurveyList {
echo $lang['srv_gdpr_dpa'].'</a>';
echo '</li>';
echo '<li class="space"></li>';
// Zahteve za izbris
echo '<li>';
$request_counter = GDPR::countUserUnfinishedRequests();
@ -565,10 +527,7 @@ class SurveyList {
echo '</li>';
// Vse zahteve za izbris - samo ADMINI
if($admin_type == '0'){
echo '<li class="space"></li>';
if($admin_type == '0'){
echo '<li>';
echo '<a class="no-img side-right'.($_GET['m']=='gdpr_requests_all' ? ' active' : '').'"'
.' href="index.php?a=gdpr&amp;m=gdpr_requests_all" title="'.$lang['srv_gdpr_requests_all'].'">';
@ -590,8 +549,7 @@ class SurveyList {
if ($admin_type == 0) {
echo '<li class="space"></li>';
# Uvozi - samo admini
echo '<li>';
echo '<a class="no-img side-left'.($_GET['t']=='import' ? ' active' : '').'"'
@ -599,16 +557,12 @@ class SurveyList {
echo 'Uvozi</a>';
echo '</li>';
echo '<li class="space"></li>';
# Testiranje - samo admini
echo '<li>';
echo '<a class="no-img side-left'.($_GET['t']=='test' ? ' active' : '').'" href="index.php?a=ul_evalvation&amp;t=test" title="Testiranje">';
echo 'Testiranje</a>';
echo '</li>';
echo '<li class="space"></li>';
# GC - samo admini
echo '<li>';
echo '<a class="no-img side-left'.($_GET['t']=='gc' ? ' active' : '').'" href="index.php?a=ul_evalvation&amp;t=gc" title="GC">';
@ -691,8 +645,8 @@ class SurveyList {
echo '<div id="firstNavigation" class="frontpage">';
echo '<ol class="smaller left-side left-1ka">';
echo '<li class="moja1ka">';
echo '<ol class="navigation_buttons_list">';
echo '<li class="moja1ka active_'.$css_1.'">';
echo '<a href="index.php?a=pregledovanje" title="' . $lang['srv_pregledovanje'] . '">';
echo '<div class="smaller-singlebutton-'.$css_1.'">'. $lang['srv_pregledovanje'] . '</div>';
echo '</a>';
@ -700,9 +654,7 @@ class SurveyList {
$SLCountPhoneSurvey = $this->countPhoneSurveys();
if ($SLCountPhoneSurvey > 0 && $admin_type != '0') {
#echo '<li class="spaceLarge">&nbsp;</li>';
echo '<li class="spaceBig">&nbsp;</li>';
echo '<li>';
echo '<li class="active_'.$css_6.'">';
echo '<a href="index.php?a=phoneSurveys" title="' . $lang['srv_telephone_surveys'] . '">';
echo '<div class="smaller-singlebutton-'.$css_6.'">' . $lang['srv_telephone_surveys'] . '</div>';
echo '</a>';
@ -712,9 +664,7 @@ class SurveyList {
$SLCount = $this->countSurveys();
if ($SLCount > 0 && $admin_type <= 1) {
#echo '<li class="spaceLarge">&nbsp;</li>';
echo '<li class="spaceBig">&nbsp;</li>';
echo '<li>';
echo '<li class="active_'.$css_2.'">';
echo '<a href="index.php?a=diagnostics" title="' . $lang['srv_diagnostics'] . '">';
echo '<div class="smaller-singlebutton-'.$css_2.'">'. $lang['srv_diagnostics'] . '</div>';
echo '</a>';
@ -724,47 +674,30 @@ class SurveyList {
# uporabniki
if ($admin_type <= 1 /*or true*/) {
# ni smiselno da ostali uporabniki vidijo zavihek, ker so tako prikazane samo njihove ankete
echo '<li class="spaceBig">&nbsp;</li>';
echo '<li>';
echo '<li class="active_'.$css_5.'">';
echo '<a href="index.php?a=diagnostics&t=uporabniki" title="' . $lang['hour_users'] . '">';
echo '<div class="smaller-singlebutton-'.$css_5.'">'. $lang['hour_users'] . '</div>';
echo '</a>';
echo '</li>';
}
echo '<li class="spaceBig">&nbsp;</li>';
echo '<li>';
// Knjiznica
echo '<li class="active_'.$css_3.'">';
echo '<a href="index.php?a=knjiznica" title="' . $lang['srv_library'] . '">';
echo '<div class="smaller-singlebutton-'.$css_3.'">'. $lang['srv_library'] . '</div>';
echo '</a>';
echo '</li>';
# Nastavitve
//if ($admin_type == 0) {
echo '<li class="spaceBig">&nbsp;</li>';
echo '<li>';
echo '<a href="index.php?a=nastavitve'.($admin_type != 0 ? '&m=global_user_settings' : '').'" title="' . $lang['settings'] . '">';
echo '<div class="smaller-singlebutton-'.$css_4.'">' . $lang['settings'] . '</div>';
echo '</a>';
echo '</li>';
//}
# Streznik
if ($admin_type == 0 && false) {
echo '<li class="spaceBig">&nbsp;</li>';
echo '<li>';
echo '<a href="http://www.1ka.si/SAR/" title="'.$lang['srv_sar'].'" target="_blank">';
echo '<div class="smaller-singlebutton-off">'/*<span class="sprites streznik_off"></span>'*/.$lang['srv_sar'].'</div>';
echo '</a>';
echo '</li>';
}
// Nastavitve
echo '<li class="active_'.$css_4.'">';
echo '<a href="index.php?a=nastavitve'.($admin_type != 0 ? '&m=global_user_settings' : '').'" title="' . $lang['settings'] . '">';
echo '<div class="smaller-singlebutton-'.$css_4.'">' . $lang['settings'] . '</div>';
echo '</a>';
echo '</li>';
# Obvestila - zaenkrat samo admin
if ($admin_type == 0) {
echo '<li class="spaceBig">&nbsp;</li>';
echo '<li>';
echo '<li class="active_'.$css_7.'">';
echo '<a href="index.php?a=obvestila'.($admin_type == 0 ? '&t=sent' : '').'" title="' . $lang['srv_notifications'] . '">';
echo '<div class="smaller-singlebutton-'.$css_7.'">'.$lang['srv_notifications'].'</div>';
echo '</a>';
@ -773,9 +706,7 @@ class SurveyList {
# Narocila - samo ce imamo vklopljene pakete
if(AppSettings::getInstance()->getSetting('app_settings-commercial_packages') === true){
echo '<li class="spaceBig">&nbsp;</li>';
echo '<li>';
echo '<li class="active_'.$css_10.'">';
echo '<a href="index.php?a=narocila" title="' . $lang['srv_narocila'] . '">';
echo '<div class="smaller-singlebutton-'.$css_10.'">'.$lang['srv_narocila'].'</div>';
echo '</a>';
@ -783,9 +714,7 @@ class SurveyList {
}
# GDPR
echo '<li class="spaceBig">&nbsp;</li>';
echo '<li>';
echo '<li class="active_'.$css_9.'">';
$request_counter = GDPR::countUserUnfinishedRequests();
$request_counter_text = (true) ? ' <sup class="red" style="vertical-align: baseline; position: relative; top: -0.4em;">('.$request_counter.')</sup>' : '';
echo '<a href="index.php?a=gdpr'.($request_counter > 0 ? '&m=gdpr_requests' : '').'" title="' . $lang['srv_gdpr_settings'] . '">';
@ -795,9 +724,7 @@ class SurveyList {
# UL evalvacija razne nastavitve, uvozi, izvozi - samo na anketa.uni-lj.si/student (zaenkrat samo admin)
if (Common::checkModule('evalvacija') == '1' && $admin_type == 0) {
echo '<li class="spaceBig">&nbsp;</li>';
echo '<li>';
echo '<li class="active_'.$css_8.'">';
echo '<a href="index.php?a=ul_evalvation" title="UL evalvacije">';
echo '<div class="smaller-singlebutton-'.$css_8.'">UL evalvacije</div>';
echo '</a>';
@ -833,7 +760,7 @@ class SurveyList {
break;
}
echo '<ol class="smaller left-side help-1ka" >';
echo '<ol class="help-1ka">';
echo ' <li>';
echo ' <a href="'.$help_url.'" title="'.$lang['srv_settings_help'].'" target="_blank" >';
echo ' <div class="smaller-singlebutton-off">'.$lang['srv_settings_help'].'</div>';
@ -3071,23 +2998,31 @@ class SurveyList {
$to_update = $meta_surveys_ids;
# poiščemmo katere ankete so OK, in jih odstranimo iz seznama anket potrebnih za update
$stringSurveyList = "SELECT id FROM srv_survey_list WHERE id IN (".implode(',', $meta_surveys_ids).")"
. " AND updated = '0' AND last_updated IS NOT NULL";
$sqlSurveyList = sisplet_query($stringSurveyList);
while ( $rowSurveyList = mysqli_fetch_assoc($sqlSurveyList)) {
if (isset($to_update[$rowSurveyList['id']])) {
unset($to_update[$rowSurveyList['id']]);
}
}
if(!empty($meta_surveys_ids)){
# poiščemmo katere ankete so OK, in jih odstranimo iz seznama anket potrebnih za update
$sqlSurveyList = sisplet_query("SELECT id
FROM srv_survey_list
WHERE id IN (".implode(',', $meta_surveys_ids).")
AND updated = '0' AND last_updated IS NOT NULL
");
while ( $rowSurveyList = mysqli_fetch_assoc($sqlSurveyList)) {
if (isset($to_update[$rowSurveyList['id']])) {
unset($to_update[$rowSurveyList['id']]);
}
}
}
}
else{
$to_update = $this->surveys_ids;
# poiščemmo katere ankete so OK, in jih odstranimo iz seznama anket potrebnih za update
$stringSurveyList = "SELECT id FROM srv_survey_list WHERE id IN (".implode(',', $this->surveys_ids).")"
. " AND updated = '0' AND last_updated IS NOT NULL";
$sqlSurveyList = sisplet_query($stringSurveyList);
$sqlSurveyList = sisplet_query("SELECT id
FROM srv_survey_list
WHERE id IN (".implode(',', $this->surveys_ids).")
AND updated = '0' AND last_updated IS NOT NULL
");
while ( $rowSurveyList = mysqli_fetch_assoc($sqlSurveyList)) {
if (isset($to_update[$rowSurveyList['id']])) {
unset($to_update[$rowSurveyList['id']]);

View File

@ -1,27 +1,23 @@
<?php
$finder = Symfony\CS\Finder\DefaultFinder::create()
->in(__DIR__ . '/lib')
;
$rules = array(
'@PSR2' => true,
);
return Symfony\CS\Config\Config::create()
->level(Symfony\CS\FixerInterface::PSR2_LEVEL)
->setUsingCache(true)
->fixers(array(
'linefeed',
'trailing_spaces',
'unused_use',
'short_tag',
'return',
'visibility',
'php_closing_tag',
'extra_empty_lines',
'function_declaration',
'include',
'controls_spaces',
'elseif',
'-eof_ending',
'-method_argument_space',
))
->finder($finder)
;
$config = PhpCsFixer\Config::create();
$finder = $config->getFinder();
$finder
->in(array('.', 'builder/', 'lib/', 'tests/', 'min_extras/', 'static/'))
->name('*.php')
->ignoreDotFiles(true)
->ignoreVCS(true);
return $config
->setUsingCache(true)
->setRiskyAllowed(true)
->setRules($rules)
->setIndent(' ')
->setLineEnding("\n");
// vim:ft=php

View File

@ -0,0 +1,6 @@
---
:major: 3
:minor: 0
:patch: 11
:special: ''
:metadata: ''

View File

@ -5,7 +5,8 @@ dist: trusty
jobs:
fast_finish: true
allow_failures:
- php: "hhvm"
- php: "nightly"
- name: "Php CS Fixer"
include:
- php: "5.3"
dist: precise
@ -15,8 +16,13 @@ jobs:
- php: "7.0"
- php: "7.1"
- php: "7.2"
- php: "7.3"
- php: "7.4"
- php: "nightly"
- php: "hhvm"
- name: "Php CS Fixer"
php: "7.3"
env:
- PHP_CS_FIXER=1
env:
- CLOSURE_VERSION: 20161024
@ -36,7 +42,14 @@ before_script:
- tests/dl-closure.sh
script:
- PATH=vendor/bin:$PATH
- composer validate
- phpunit --verbose
- |
if [ "$PHP_CS_FIXER" ]; then
composer config --unset platform.php
composer require --dev friendsofphp/php-cs-fixer:2.16
php-cs-fixer fix --verbose --diff --dry-run --ansi
fi
- vendor/bin/phpunit --verbose
# vim:ts=2:sw=2:et

View File

@ -1,18 +1,101 @@
## Version 3.0.3 (2017-11-03)
# Changelog
* Fix closure-compiler's error "redirection limit reached". #618, #619
All notable changes to this project will be documented in this file.
## Version 3.0.2 (2017-09-14)
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
* Fixes syntax error in Groups controller, #613
* Better-maintained lessphp fork, #610
* No longer corrupts some chars in some environments, #608
## [3.0.11] - 2021-03-11
## Version 3.0.1 (2017-06-09)
- PHP 8.0 support, [#685], [#682], [#677]
* Update CSSmin to v4, #599, #590
[3.0.11]: https://github.com/mrclay/minify/compare/3.0.10...3.0.11
[#685]: https://github.com/mrclay/minify/pull/685
[#682]: https://github.com/mrclay/minify/pull/682
[#677]: https://github.com/mrclay/minify/pull/677
## [3.0.10] - 2020-04-02
- Exclude SSI Comments from HTML minify, [#670], [#671]
[3.0.10]: https://github.com/mrclay/minify/compare/3.0.9...3.0.10
[#671]: https://github.com/mrclay/minify/issues/671
[#670]: https://github.com/mrclay/minify/pull/670
## [3.0.9] - 2020-03-24
- Allow `intervention/httpauth` 3.x, [#667], [#666], [#664]
[3.0.9]: https://github.com/mrclay/minify/compare/3.0.8...3.0.9
[#664]: https://github.com/mrclay/minify/issues/664
[#666]: https://github.com/mrclay/minify/pull/666
[#667]: https://github.com/mrclay/minify/pull/667
## [3.0.8] - 2020-03-19
- Removed deprecated get_magic_quotes_gpc() function that since PHP 5.4.0 returns FALSE always, and since PHP 7.4 is deprecated, [#661]
[3.0.8]: https://github.com/mrclay/minify/compare/3.0.7...3.0.8
[#661]: https://github.com/mrclay/minify/pull/661
## [3.0.7] - 2019-12-10
- Allow mrclay/props-dic ^3.0, [#658]
[3.0.7]: https://github.com/mrclay/minify/compare/3.0.6...3.0.7
[#658]: https://github.com/mrclay/minify/pull/658
## [3.0.6] - 2019-10-28
- Bugfix for option sanitizer, [#654], [#655]
[3.0.6]: https://github.com/mrclay/minify/compare/3.0.5...3.0.6
[#654]: https://github.com/mrclay/minify/issues/654
[#655]: https://github.com/mrclay/minify/pull/655
## [3.0.5] - 2019-10-01
- Fix syntax error in composer.json, [#653]
[3.0.5]: https://github.com/mrclay/minify/compare/3.0.4...3.0.5
[#653]: https://github.com/mrclay/minify/pull/653
## 3.0.4 - 2019-09-24
- Fix PHP 7.3 compatibility issues, [#648]
[3.0.4]: https://github.com/mrclay/minify/compare/3.0.3...3.0.4
[#648]: https://github.com/mrclay/minify/issues/648
## [3.0.3] - 2017-11-03
- Fix closure-compiler's error "redirection limit reached". [#618], [#619]
[3.0.3]: https://github.com/mrclay/minify/compare/3.0.2...3.0.3
[#618]: https://github.com/mrclay/minify/pull/618
[#619]: https://github.com/mrclay/minify/issues/619
## [3.0.2] - 2017-09-14
- Fixes syntax error in Groups controller, [#613]
- Better-maintained lessphp fork, [#610]
- No longer corrupts some chars in some environments, [#608]
[3.0.2]: https://github.com/mrclay/minify/compare/3.0.1...3.0.2
[#608]: https://github.com/mrclay/minify/pull/608
[#610]: https://github.com/mrclay/minify/pull/610
[#613]: https://github.com/mrclay/minify/issues/613
## [3.0.1] - 2017-06-09
- Update CSSmin to v4, [#599], [#590]
[3.0.1]: https://github.com/mrclay/minify/compare/3.0.0...3.0.1
[#590]: https://github.com/mrclay/minify/issues/590
[#599]: https://github.com/mrclay/minify/pull/599
## 3.0.0 - 2017-04-03
## Version 3.0.0 (2017-04-03)
* Improved CSS minification via Túbal Martín's CSSMin
* Easier error identification (just see error_log)
* Adds feature to serve static files directly
@ -30,7 +113,8 @@
* BREAKING: Removes `$min_libPath` option
* BREAKING: The Minify, source, and controller components have changed APIs
## Version 2.3.0 (2016-03-11)
## 2.3.0 - 2016-03-11
* Adds `$min_concatOnly` option to just concatenate files
* Deprecates use of Minify_Loader
* Deprecates use of Minify_Logger
@ -38,13 +122,15 @@
* Deprecates use of FirePHP
* Deprecates use of DooDigestAuth
## Version 2.2.1 (2014-10-30)
## 2.2.1 - 2014-10-30
* Builder styled with Bootstrap (thanks to help from acidvertigo)
* Update CSSmin to v.2.4.8
* Added WinCache
* URLs with spaces properly rewritten
## Version 2.2.0 (2014-03-12)
## 2.2.0 - 2014-03-12
* Fix handling of RegEx in certain situations in JSMin
* Thanks to Vovan-VE for reporting this
* Update composer.json with support info
@ -66,11 +152,13 @@
* Allow far-future expiration and file versioning with the "v" querystirng parameter in addition to existing method
* Lots of general code tidy ups
## Version 2.1.7 (2013-07-23)
## 2.1.7 - 2013-07-23
* Fixes arbitrary file inclusion vulnerability on some systems
* Thanks to Matt Mecham for reporting this
## Version 2.1.6 (2013-07-19)
## 2.1.6 - 2013-07-19
* JSMin fixes
* Prevents some Closure Compiler API failures
* Uses autoloading for all class loading
@ -82,7 +170,8 @@
* CLI script more portable
* Adds composer.json
## Version 2.1.5 (2012-03-10)
## 2.1.5 - 2012-03-10
* Removed XSS vulnerability
* Disabled builder by default
* command line tools to minify and rewrite URIs in CSS
@ -91,7 +180,8 @@
* Closure Compiler uses cURL when allow\_url\_fopen is off
* Missing file notices when using groups
## Version 2.1.4b (2010-07-10)
## 2.1.4b - 2010-07-10
* Option to minify JS with Closure Compiler API w/ JSMin failover
* Cookie/bookmarklet-based debug mode. No HTML editing!
* Allows 1 file to be missing w/o complete failure
@ -107,7 +197,8 @@
* Removed annoying maxFiles limit
* mbstring.func\_overload usage is safer
## Version 2.1.3 (2009-06-30)
## 2.1.3 - 2009-06-30
* CSS fixes
* A few URI rewriting bugs fixed
* comment/whitespace removal no longer breaks some values
@ -122,7 +213,8 @@
* API: Can set contentType Minify\_Source objects (fixes an annoying [caveat](http://groups.google.com/group/minify/msg/8446d32ee99a4961))
* [Resolved Issue list](http://code.google.com/p/minify/issues/list?can=1&q=label%3ARelease-2.1.2%20status%3AVerified)
## Version 2.1.2 (2009-03-04)
## 2.1.2 - 2009-03-04
* Javascript fixes
* Debug mode no longer confused by `*/*` in strings/RegExps (jQuery)
* quote characters inside RegExp literals no longer cause exception
@ -134,14 +226,16 @@
* Builder app doesn't fail on systems without gzdeflate()
* APC caching class included
## Version 2.1.1 (2008-10-19)
## 2.1.1 - 2008-10-19
* Bug fix release
* Detection and workarounds for zlib.output\_compression and non-PHP encoding modules
* Zlib not required (mod\_rewrite, et.al., can still be used for encoding)
* HTML : More IE conditional comments preserved
* Minify\_groupUri() utility fixed
## Version 2.1.0 (2008-09-18)
## 2.1.0 - 2008-09-18
* "min" default application for quick deployment
* Minify URI Builder app & bookmarklet for quickly creating minify URIs
* Relative URIs in CSS file are fixed automatically by default
@ -157,8 +251,8 @@
* Minify\_Cache\_File has flock()s (by default)
* Workaround for Windows mtime reporting bug
## 2.0.0 - 2008-05-22
## Version 2.0.0 (2008-05-22)
* Complete code overhaul. Minify is now a PEAR-style class and toolkit for building customized minifying file servers.
* Content-Encoding: deflate/gzip/compress, based on request headers
* Expanded CSS and HTML minifiers with test cases
@ -167,10 +261,12 @@
* Compression & encoding modules lazy-loaded as needed (304 responses use minimal code)
* Separate utility classes for HTTP encoding and cache control
## Version 1.0.1 (2007-05-05)
## 1.0.1 - 2007-05-05
* Fixed various problems resolving pathnames when hosted on an NFS mount.
* Fixed 'undefined constant' notice.
* Replaced old JSMin library with a much faster custom implementation.
## Version 1.0.0 (2007-05-02)
## 1.0.0 - 2007-05-02
* First release.

View File

@ -25,4 +25,4 @@ call_user_func(function () {
require $file;
});
return new \Minify\App(__DIR__);
return new \Minify\App(__DIR__);

View File

@ -0,0 +1,4 @@
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>

View File

@ -162,12 +162,12 @@ var MUB = {
ext = thisExt;
else if (thisExt !== ext) {
fail = true;
return genericAlertPopup('alert_extensions_match');
return alert('extensions must match!');
}
this.value = this.value.replace(/^\//, '');
if (-1 !== $.inArray(this.value, sources)) {
fail = true;
return genericAlertPopup('alert_duplicate_file');
return alert('duplicate file!');
}
sources.push(this.value);
}

View File

@ -32,5 +32,7 @@ javascript:(function() {
if (uris.length)
window.open('%BUILDER_URL%#' + uris.join(','));
else
genericAlertPopup('alert_no_jscss_found',home.split('/')[2]);
alert('No js/css files found with URLs within "'
+ home.split('/')[2]
+ '".\n(This tool is limited to URLs with the same domain.)');
})();

View File

@ -1,4 +1,4 @@
<?php
<?php
$app = (require __DIR__ . '/../bootstrap.php');
/* @var \Minify\App $app */

View File

@ -1,7 +1,7 @@
<?php
/**
* AJAX checks for zlib.output_compression
*
*
* @package Minify
*/
@ -29,7 +29,6 @@ if ($app->env->get('hello')) {
));
$he->encode();
$he->sendAll();
} else {
// echo status "0" or "1"
header('Content-Type: text/plain');

View File

@ -37,7 +37,7 @@ if (isset($_GET['oc'])) {
echo "<p class=topNote><strong>\$_SERVER['SUBDOMAIN_DOCUMENT_ROOT'] is set.</strong> "
. "You may need to set \$min_documentRoot to this in config.php</p>";
}
}
//*/
//*/

View File

@ -1,7 +1,7 @@
{
"name": "mrclay/minify",
"type": "library",
"description": "Minify is a PHP5 app that helps you follow several rules for client-side performance. It combines multiple CSS or Javascript files, removes unnecessary whitespace and comments, and serves them with gzip encoding and optimal client-side cache headers",
"description": "Minify is a PHP app that helps you follow several rules for client-side performance. It combines multiple CSS or Javascript files, removes unnecessary whitespace and comments, and serves them with gzip encoding and optimal client-side cache headers",
"homepage": "https://github.com/mrclay/minify",
"license": "BSD-3-Clause",
"authors": [
@ -22,26 +22,31 @@
"autoload-dev": {
"psr-4": {"Minify\\Test\\": "tests/"}
},
"config": {
"platform": {
"php": "5.3.29"
},
"sort-packages": true
},
"require": {
"php": "^5.3.0 || ^7.0 || ^8.0",
"ext-pcre": "*",
"intervention/httpauth": "~2.0",
"monolog/monolog": "~1.1",
"intervention/httpauth": "^2.0|^3.0",
"marcusschwarz/lesserphp": "^0.5.1",
"monolog/monolog": "~1.1|~2.0",
"mrclay/jsmin-php": "~2",
"mrclay/props-dic": "^2.2",
"php": "^5.3.0 || ^7.0",
"mrclay/props-dic": "^2.2|^3.0",
"tubalmartin/cssmin": "~4"
},
"require-dev": {
"firephp/firephp-core": "~0.4.0",
"leafo/scssphp": "^0.3 || ^0.6 || ^0.7",
"marcusschwarz/lesserphp": "~0.5.1",
"meenie/javascript-packer": "~1.1",
"phpunit/phpunit": "^4.8.36",
"tedivm/jshrink": "~1.1.0"
},
"suggest": {
"firephp/firephp-core": "Use FirePHP for Log messages",
"marcusschwarz/lesserphp": "LESS support",
"meenie/javascript-packer": "Keep track of the Packer PHP port using Composer"
},
"scripts": {

View File

@ -4,7 +4,6 @@
*
* To test config options, place them in this file and add "&test" to your Minify URL.
* Note that if this is on a public server, anyone can execute your test.
*
*
* @package Minify
*/

View File

@ -1,9 +1,9 @@
<?php
/**
* Sets up MinApp controller and serves files
*
*
* DO NOT EDIT! Configure this utility via config.php and groupsConfig.php
*
*
* @package Minify
*/

View File

@ -128,8 +128,8 @@ class HTTP_ConditionalGet
$etagAppend = '';
if (isset($spec['encoding'])) {
$this->_stripEtag = true;
$this->_headers['Vary'] = 'Accept-Encoding';
if ('' !== $spec['encoding']) {
$this->_headers['Vary'] = 'Accept-Encoding';
if (0 === strpos($spec['encoding'], 'x-')) {
$spec['encoding'] = substr($spec['encoding'], 2);
}
@ -317,7 +317,7 @@ class HTTP_ConditionalGet
if (!isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
return false;
}
$clientEtagList = get_magic_quotes_gpc()
$clientEtagList = PHP_VERSION_ID < 50400 && get_magic_quotes_gpc()
? stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])
: $_SERVER['HTTP_IF_NONE_MATCH'];
$clientEtags = explode(',', $clientEtagList);

View File

@ -204,9 +204,10 @@ class HTTP_Encoder
}
// gzip checks (slow)
if (preg_match(
'@(?:^|,)\\s*((?:x-)?gzip)\\s*(?:$|,|;\\s*q=(?:0\\.|1))@'
,$ae
,$m)) {
'@(?:^|,)\\s*((?:x-)?gzip)\\s*(?:$|,|;\\s*q=(?:0\\.|1))@',
$ae,
$m
)) {
return array('gzip', $m[1]);
}
if ($allowDeflate) {
@ -217,14 +218,17 @@ class HTTP_Encoder
|| 0 === strpos($ae, 'deflate,') // opera
// slow parsing
|| preg_match(
'@(?:^|,)\\s*deflate\\s*(?:$|,|;\\s*q=(?:0\\.|1))@', $ae)) {
'@(?:^|,)\\s*deflate\\s*(?:$|,|;\\s*q=(?:0\\.|1))@',
$ae
)) {
return array('deflate', 'deflate');
}
}
if ($allowCompress && preg_match(
'@(?:^|,)\\s*((?:x-)?compress)\\s*(?:$|,|;\\s*q=(?:0\\.|1))@'
,$ae
,$m)) {
'@(?:^|,)\\s*((?:x-)?compress)\\s*(?:$|,|;\\s*q=(?:0\\.|1))@',
$ae,
$m
)) {
return array('compress', $m[1]);
}

View File

@ -242,7 +242,7 @@ class Minify
if (! $this->options['quiet']) {
$this->errorExit($this->options['badRequestHeader'], self::URL_DEBUG);
} else {
list(,$statusCode) = explode(' ', $this->options['badRequestHeader']);
list(, $statusCode) = explode(' ', $this->options['badRequestHeader']);
return array(
'success' => false,
@ -470,7 +470,7 @@ class Minify
public function errorExit($header, $url = '', $msgHtml = '')
{
$url = htmlspecialchars($url, ENT_QUOTES);
list(,$h1) = explode(' ', $header, 2);
list(, $h1) = explode(' ', $header, 2);
$h1 = htmlspecialchars($h1);
// FastCGI environments require 3rd arg to header() to be set
list(, $code) = explode(' ', $header, 3);
@ -593,7 +593,8 @@ class Minify
! $source // yes, we ran out of sources
|| $type === self::TYPE_CSS // yes, to process CSS individually (avoiding PCRE bugs/limits)
|| $minifier !== $lastMinifier // yes, minifier changed
|| $options !== $lastOptions)) { // yes, options changed
|| $options !== $lastOptions // yes, options changed
)) {
// minify previous sources with last settings
$imploded = implode($implodeSeparator, $groupToProcessTogether);
$groupToProcessTogether = array();

View File

@ -80,6 +80,12 @@ class App extends Container
};
$varNames = array_map($prefixer, $propNames);
$varDefined = get_defined_vars();
$varNames = array_filter($varNames, function ($name) use ($varDefined) {
return array_key_exists($name, $varDefined);
});
$vars = compact($varNames);
foreach ($varNames as $varName) {

View File

@ -73,16 +73,16 @@ class Minify_CSSmin
}
if ($options['currentDir']) {
return Minify_CSS_UriRewriter::rewrite(
$css
,$options['currentDir']
,$options['docRoot']
,$options['symlinks']
$css,
$options['currentDir'],
$options['docRoot'],
$options['symlinks']
);
}
return Minify_CSS_UriRewriter::prepend(
$css
,$options['prependRelativePath']
$css,
$options['prependRelativePath']
);
}
}

View File

@ -64,4 +64,4 @@ class Minify_Cache_Null implements Minify_CacheInterface
public function fetch($id)
{
}
}
}

View File

@ -136,4 +136,4 @@ class Minify_Cache_WinCache implements Minify_CacheInterface
return true;
}
}
}

View File

@ -68,4 +68,3 @@ class Minify_Controller_Files extends Minify_Controller_Base
return new Minify_ServeConfiguration($options, $sources);
}
}

View File

@ -73,4 +73,3 @@ class Minify_Controller_Groups extends Minify_Controller_Files
return parent::createConfiguration($options);
}
}

View File

@ -66,4 +66,3 @@ class Minify_Controller_Page extends Minify_Controller_Base
return new Minify_ServeConfiguration($options, $sources, $selectionId);
}
}

View File

@ -19,4 +19,4 @@ interface Minify_ControllerInterface
* @return Minify_Env
*/
public function getEnv();
}
}

View File

@ -99,32 +99,34 @@ class Minify_HTML
// replace SCRIPTs (and minify) with placeholders
$this->_html = preg_replace_callback(
'/(\\s*)<script(\\b[^>]*?>)([\\s\\S]*?)<\\/script>(\\s*)/iu'
,array($this, '_removeScriptCB')
,$this->_html);
'/(\\s*)<script(\\b[^>]*?>)([\\s\\S]*?)<\\/script>(\\s*)/iu',
array($this, '_removeScriptCB'),
$this->_html
);
// replace STYLEs (and minify) with placeholders
$this->_html = preg_replace_callback(
'/\\s*<style(\\b[^>]*>)([\\s\\S]*?)<\\/style>\\s*/iu'
,array($this, '_removeStyleCB')
,$this->_html);
'/\\s*<style(\\b[^>]*>)([\\s\\S]*?)<\\/style>\\s*/iu',
array($this, '_removeStyleCB'),
$this->_html
);
// remove HTML comments (not containing IE conditional comments).
$this->_html = preg_replace_callback(
'/<!--([\\s\\S]*?)-->/u'
,array($this, '_commentCB')
,$this->_html);
'/<!--([\\s\\S]*?)-->/u',
array($this, '_commentCB'),
$this->_html
);
// replace PREs with placeholders
$this->_html = preg_replace_callback('/\\s*<pre(\\b[^>]*?>[\\s\\S]*?<\\/pre>)\\s*/iu'
,array($this, '_removePreCB')
,$this->_html);
$this->_html = preg_replace_callback('/\\s*<pre(\\b[^>]*?>[\\s\\S]*?<\\/pre>)\\s*/iu', array($this, '_removePreCB'), $this->_html);
// replace TEXTAREAs with placeholders
$this->_html = preg_replace_callback(
'/\\s*<textarea(\\b[^>]*?>[\\s\\S]*?<\\/textarea>)\\s*/iu'
,array($this, '_removeTextareaCB')
,$this->_html);
'/\\s*<textarea(\\b[^>]*?>[\\s\\S]*?<\\/textarea>)\\s*/iu',
array($this, '_removeTextareaCB'),
$this->_html
);
// trim each line.
// @todo take into account attribute values that span multiple lines.
@ -139,24 +141,25 @@ class Minify_HTML
// remove ws outside of all elements
$this->_html = preg_replace(
'/>(\\s(?:\\s*))?([^<]+)(\\s(?:\s*))?</u'
,'>$1$2$3<'
,$this->_html);
'/>(\\s(?:\\s*))?([^<]+)(\\s(?:\s*))?</u',
'>$1$2$3<',
$this->_html
);
// use newlines before 1st attribute in open tags (to limit line lengths)
$this->_html = preg_replace('/(<[a-z\\-]+)\\s+([^>]+>)/iu', "$1\n$2", $this->_html);
// fill placeholders
$this->_html = str_replace(
array_keys($this->_placeholders)
,array_values($this->_placeholders)
,$this->_html
array_keys($this->_placeholders),
array_values($this->_placeholders),
$this->_html
);
// issue 229: multi-pass to catch scripts that didn't get replaced in textareas
$this->_html = str_replace(
array_keys($this->_placeholders)
,array_values($this->_placeholders)
,$this->_html
array_keys($this->_placeholders),
array_values($this->_placeholders),
$this->_html
);
return $this->_html;
@ -164,7 +167,7 @@ class Minify_HTML
protected function _commentCB($m)
{
return (0 === strpos($m[1], '[') || false !== strpos($m[1], '<!['))
return (0 === strpos($m[1], '[') || false !== strpos($m[1], '<![') || 0 === strpos($m[1], '#'))
? $m[0]
: '';
}
@ -209,7 +212,8 @@ class Minify_HTML
: 'trim';
$css = call_user_func($minifier, $css);
return $this->_reservePlace($this->_needsCdata($css)
return $this->_reservePlace(
$this->_needsCdata($css)
? "{$openStyle}/*<![CDATA[*/{$css}/*]]>*/</style>"
: "{$openStyle}{$css}</style>"
);
@ -238,7 +242,8 @@ class Minify_HTML
: 'trim';
$js = call_user_func($minifier, $js);
return $this->_reservePlace($this->_needsCdata($js)
return $this->_reservePlace(
$this->_needsCdata($js)
? "{$ws1}{$openScript}/*<![CDATA[*/{$js}/*]]>*/</script>{$ws2}"
: "{$ws1}{$openScript}{$js}</script>{$ws2}"
);

View File

@ -66,7 +66,7 @@ class Minify_ImportProcessor
$this->_currentDir = dirname($file);
// remove UTF-8 BOM if present
if (pack("CCC",0xef,0xbb,0xbf) === substr($content, 0, 3)) {
if (pack("CCC", 0xef, 0xbb, 0xbf) === substr($content, 0, 3)) {
$content = substr($content, 3);
}
// ensure uniform EOLs
@ -182,7 +182,7 @@ class Minify_ImportProcessor
private function truepath($path)
{
// whether $path is unix or not
$unipath = ('' === $path) || ($path{0} !== '/');
$unipath = ('' === $path) || ($path[0] !== '/');
// attempts to detect if path is relative in which case, add cwd
if (strpos($path, ':') === false && $unipath) {

View File

@ -195,13 +195,13 @@ class Minify_JS_ClosureCompiler
curl_close($ch);
} else {
throw new Minify_JS_ClosureCompiler_Exception(
"Could not make HTTP request: allow_url_open is false and cURL not available"
"Could not make HTTP request: allow_url_open is false and cURL not available"
);
}
if (false === $contents) {
throw new Minify_JS_ClosureCompiler_Exception(
"No HTTP response from server"
"No HTTP response from server"
);
}

View File

@ -110,4 +110,4 @@ class Minify_NailgunClosureCompiler extends Minify_ClosureCompiler
$this->shell("$serverCommand </dev/null >/dev/null 2>/dev/null & sleep 10");
}
}
}

View File

@ -170,7 +170,7 @@ class Minify_Source_Factory
if ($this->options['noMinPattern'] && preg_match($this->options['noMinPattern'], $basename)) {
if (preg_match('~\.(css|less)$~i', $basename)) {
$spec['minifyOptions']['compress'] = false;
// we still want URI rewriting to work for CSS
// we still want URI rewriting to work for CSS
} else {
$spec['minifier'] = 'Minify::nullMinifier';
}

View File

@ -154,4 +154,3 @@ class Minify_YUICompressor
}
}
}

View File

@ -390,4 +390,3 @@ class Cli
$this->errors[$letter][] = sprintf($msg, $value);
}
}

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- http://phpunit.de/manual/current/en/appendixes.configuration.html -->
<!-- https://phpunit.readthedocs.io/en/latest/configuration.html -->
<phpunit
backupGlobals="false"
backupStaticAttributes="false"
@ -10,7 +10,6 @@
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
bootstrap="vendor/autoload.php">
<testsuites>
@ -32,6 +31,7 @@
<directory>.</directory>
<exclude>
<directory>tests</directory>
<directory>vendor</directory>
</exclude>
</whitelist>
</filter>

View File

@ -13,7 +13,8 @@ if (!$enabled) {
die('Set $enabled to true to see server info.');
}
function assertTrue($test, $message) {
function assertTrue($test, $message)
{
if (!$test) {
echo "Warning: $message\n";
}

View File

@ -7,12 +7,12 @@ if (is_file(__DIR__ . '/bootstrap.php')) {
$bootstrap_file = __DIR__ . '/../bootstrap.php';
}
$send_400 = function($content = 'Bad URL') {
$send_400 = function ($content = 'Bad URL') {
http_response_code(400);
die($content);
};
$send_301 = function($url) {
$send_301 = function ($url) {
http_response_code(301);
header("Cache-Control: max-age=31536000");
header("Location: $url");

View File

@ -10,7 +10,8 @@ namespace Minify\StaticService;
* @param string $type "css" or "js"
* @return string
*/
function build_uri($static_uri, $query, $type) {
function build_uri($static_uri, $query, $type)
{
$static_uri = rtrim($static_uri, '/');
$query = ltrim($query, '?');
@ -30,7 +31,8 @@ function build_uri($static_uri, $query, $type) {
* @param bool $auto_create Automatically create the directory if missing?
* @return null|string null if missing or can't create
*/
function get_cache_time($auto_create = true) {
function get_cache_time($auto_create = true)
{
foreach (scandir(__DIR__) as $entry) {
if (ctype_digit($entry)) {
return $entry;
@ -50,14 +52,16 @@ function get_cache_time($auto_create = true) {
return $time;
}
function flush_cache() {
function flush_cache()
{
$time = get_cache_time(false);
if ($time) {
remove_tree(__DIR__ . "/$time");
}
}
function remove_tree($dir) {
function remove_tree($dir)
{
$files = array_diff(scandir($dir), array('.', '..'));
foreach ($files as $file) {

View File

@ -48,7 +48,7 @@ function Minify_getUri($keyOrFiles, $opts = array())
*
* Since this makes a bunch of stat() calls, you might not want to check this
* on every request.
*
*
* @param array $keysAndFiles group keys and/or file paths/URIs.
* @return int latest modification time of all given keys/files
*/

235
composer.lock generated
View File

@ -8,16 +8,16 @@
"packages": [
{
"name": "composer/ca-bundle",
"version": "1.2.10",
"version": "1.3.1",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
"reference": "9fdb22c2e97a614657716178093cd1da90a64aa8"
"reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/9fdb22c2e97a614657716178093cd1da90a64aa8",
"reference": "9fdb22c2e97a614657716178093cd1da90a64aa8",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
"reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
"shasum": ""
},
"require": {
@ -29,7 +29,7 @@
"phpstan/phpstan": "^0.12.55",
"psr/log": "^1.0",
"symfony/phpunit-bridge": "^4.2 || ^5",
"symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
"symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
},
"type": "library",
"extra": {
@ -64,7 +64,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
"source": "https://github.com/composer/ca-bundle/tree/1.2.10"
"source": "https://github.com/composer/ca-bundle/tree/1.3.1"
},
"funding": [
{
@ -80,7 +80,7 @@
"type": "tidelift"
}
],
"time": "2021-06-07T13:58:28+00:00"
"time": "2021-10-28T20:44:15+00:00"
},
{
"name": "fgrosse/phpasn1",
@ -159,16 +159,16 @@
},
{
"name": "geoip2/geoip2",
"version": "v2.11.0",
"version": "v2.12.2",
"source": {
"type": "git",
"url": "https://github.com/maxmind/GeoIP2-php.git",
"reference": "d01be5894a5c1a3381c58c9b1795cd07f96c30f7"
"reference": "83adb44ac4b9553d36b579a14673ed124583082f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/d01be5894a5c1a3381c58c9b1795cd07f96c30f7",
"reference": "d01be5894a5c1a3381c58c9b1795cd07f96c30f7",
"url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/83adb44ac4b9553d36b579a14673ed124583082f",
"reference": "83adb44ac4b9553d36b579a14673ed124583082f",
"shasum": ""
},
"require": {
@ -178,7 +178,8 @@
"php": ">=7.2"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "2.*",
"friendsofphp/php-cs-fixer": "3.*",
"phpstan/phpstan": "*",
"phpunit/phpunit": "^8.0 || ^9.0",
"squizlabs/php_codesniffer": "3.*"
},
@ -210,9 +211,9 @@
],
"support": {
"issues": "https://github.com/maxmind/GeoIP2-php/issues",
"source": "https://github.com/maxmind/GeoIP2-php/tree/v2.11.0"
"source": "https://github.com/maxmind/GeoIP2-php/tree/v2.12.2"
},
"time": "2020-10-01T18:48:34+00:00"
"time": "2021-11-30T18:15:25+00:00"
},
{
"name": "guzzlehttp/guzzle",
@ -287,16 +288,16 @@
},
{
"name": "guzzlehttp/promises",
"version": "1.4.1",
"version": "1.5.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d"
"reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d",
"reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d",
"url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
"reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
"shasum": ""
},
"require": {
@ -308,7 +309,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
"dev-master": "1.5-dev"
}
},
"autoload": {
@ -324,10 +325,25 @@
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
},
{
"name": "Tobias Schultze",
"email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion"
}
],
"description": "Guzzle promises library",
@ -336,22 +352,36 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
"source": "https://github.com/guzzle/promises/tree/1.4.1"
"source": "https://github.com/guzzle/promises/tree/1.5.1"
},
"time": "2021-03-07T09:25:29+00:00"
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
"type": "tidelift"
}
],
"time": "2021-10-22T20:56:57+00:00"
},
{
"name": "guzzlehttp/psr7",
"version": "1.8.2",
"version": "1.8.3",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "dc960a912984efb74d0a90222870c72c87f10c91"
"reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91",
"reference": "dc960a912984efb74d0a90222870c72c87f10c91",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/1afdd860a2566ed3c2b0b4a3de6e23434a79ec85",
"reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85",
"shasum": ""
},
"require": {
@ -388,13 +418,34 @@
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "George Mponos",
"email": "gmponos@gmail.com",
"homepage": "https://github.com/gmponos"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://github.com/sagikazarmark"
},
{
"name": "Tobias Schultze",
"email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion"
}
],
@ -411,22 +462,36 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/1.8.2"
"source": "https://github.com/guzzle/psr7/tree/1.8.3"
},
"time": "2021-04-26T09:17:50+00:00"
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
"type": "tidelift"
}
],
"time": "2021-10-05T13:56:00+00:00"
},
{
"name": "maxmind-db/reader",
"version": "v1.10.1",
"version": "v1.11.0",
"source": {
"type": "git",
"url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
"reference": "569bd44d97d30a4ec12c7793a33004a76d4caf18"
"reference": "b1f3c0699525336d09cc5161a2861268d9f2ae5b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/569bd44d97d30a4ec12c7793a33004a76d4caf18",
"reference": "569bd44d97d30a4ec12c7793a33004a76d4caf18",
"url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/b1f3c0699525336d09cc5161a2861268d9f2ae5b",
"reference": "b1f3c0699525336d09cc5161a2861268d9f2ae5b",
"shasum": ""
},
"require": {
@ -436,7 +501,7 @@
"ext-maxminddb": "<1.10.1,>=2.0.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "*",
"friendsofphp/php-cs-fixer": "3.*",
"php-coveralls/php-coveralls": "^2.1",
"phpstan/phpstan": "*",
"phpunit/phpcov": ">=6.0.0",
@ -476,9 +541,9 @@
],
"support": {
"issues": "https://github.com/maxmind/MaxMind-DB-Reader-php/issues",
"source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.10.1"
"source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.11.0"
},
"time": "2021-04-14T17:49:35+00:00"
"time": "2021-10-18T15:23:10+00:00"
},
{
"name": "maxmind/web-service-common",
@ -728,20 +793,20 @@
},
{
"name": "paypal/paypal-checkout-sdk",
"version": "1.0.1",
"version": "1.0.2",
"source": {
"type": "git",
"url": "https://github.com/paypal/Checkout-PHP-SDK.git",
"reference": "ed6a55075448308b87a8b59dcb7fedf04a048cb1"
"reference": "19992ce7051ff9e47e643f28abb8cc1b3e5f1812"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paypal/Checkout-PHP-SDK/zipball/ed6a55075448308b87a8b59dcb7fedf04a048cb1",
"reference": "ed6a55075448308b87a8b59dcb7fedf04a048cb1",
"url": "https://api.github.com/repos/paypal/Checkout-PHP-SDK/zipball/19992ce7051ff9e47e643f28abb8cc1b3e5f1812",
"reference": "19992ce7051ff9e47e643f28abb8cc1b3e5f1812",
"shasum": ""
},
"require": {
"paypal/paypalhttp": "1.0.0"
"paypal/paypalhttp": "1.0.1"
},
"require-dev": {
"phpunit/phpunit": "^5.7"
@ -774,23 +839,22 @@
"sdk"
],
"support": {
"issues": "https://github.com/paypal/Checkout-PHP-SDK/issues",
"source": "https://github.com/paypal/Checkout-PHP-SDK/tree/1.0.1"
"source": "https://github.com/paypal/Checkout-PHP-SDK/tree/1.0.2"
},
"time": "2019-11-07T23:16:44+00:00"
"time": "2021-09-21T20:57:38+00:00"
},
{
"name": "paypal/paypalhttp",
"version": "1.0.0",
"version": "1.0.1",
"source": {
"type": "git",
"url": "https://github.com/paypal/paypalhttp_php.git",
"reference": "1ad9b846a046f09d6135cbf2cbaa7701bbc630a3"
"reference": "7b09c89c80828e842c79230e7f156b61fbb68d25"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paypal/paypalhttp_php/zipball/1ad9b846a046f09d6135cbf2cbaa7701bbc630a3",
"reference": "1ad9b846a046f09d6135cbf2cbaa7701bbc630a3",
"url": "https://api.github.com/repos/paypal/paypalhttp_php/zipball/7b09c89c80828e842c79230e7f156b61fbb68d25",
"reference": "7b09c89c80828e842c79230e7f156b61fbb68d25",
"shasum": ""
},
"require": {
@ -818,23 +882,22 @@
],
"support": {
"issues": "https://github.com/paypal/paypalhttp_php/issues",
"source": "https://github.com/paypal/paypalhttp_php/tree/1.0.0"
"source": "https://github.com/paypal/paypalhttp_php/tree/1.0.1"
},
"abandoned": true,
"time": "2019-11-06T21:27:12+00:00"
"time": "2021-09-14T21:35:26+00:00"
},
{
"name": "phpmailer/phpmailer",
"version": "v6.5.1",
"version": "v6.5.3",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "dd803df5ad7492e1b40637f7ebd258fee5ca7355"
"reference": "baeb7cde6b60b1286912690ab0693c7789a31e71"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/dd803df5ad7492e1b40637f7ebd258fee5ca7355",
"reference": "dd803df5ad7492e1b40637f7ebd258fee5ca7355",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/baeb7cde6b60b1286912690ab0693c7789a31e71",
"reference": "baeb7cde6b60b1286912690ab0693c7789a31e71",
"shasum": ""
},
"require": {
@ -891,7 +954,7 @@
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
"support": {
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.1"
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.3"
},
"funding": [
{
@ -899,7 +962,7 @@
"type": "github"
}
],
"time": "2021-08-18T09:14:16+00:00"
"time": "2021-11-25T16:34:11+00:00"
},
{
"name": "psr/http-message",
@ -1075,6 +1138,7 @@
"type": "github"
}
],
"abandoned": true,
"time": "2021-02-15T19:23:18+00:00"
},
{
@ -1144,16 +1208,16 @@
},
{
"name": "stripe/stripe-php",
"version": "v7.94.0",
"version": "v7.105.0",
"source": {
"type": "git",
"url": "https://github.com/stripe/stripe-php.git",
"reference": "03cd6b5c1c4fc9087ddd1dd046457bff274294d6"
"reference": "3a926610ca772aa7519fb132c88a6e7472788d90"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/stripe/stripe-php/zipball/03cd6b5c1c4fc9087ddd1dd046457bff274294d6",
"reference": "03cd6b5c1c4fc9087ddd1dd046457bff274294d6",
"url": "https://api.github.com/repos/stripe/stripe-php/zipball/3a926610ca772aa7519fb132c88a6e7472788d90",
"reference": "3a926610ca772aa7519fb132c88a6e7472788d90",
"shasum": ""
},
"require": {
@ -1163,11 +1227,10 @@
"php": ">=5.6.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "2.17.1",
"php-coveralls/php-coveralls": "^2.1",
"phpunit/phpunit": "^5.7",
"squizlabs/php_codesniffer": "^3.3",
"symfony/process": "~3.4"
"friendsofphp/php-cs-fixer": "3.2.1",
"phpstan/phpstan": "^1.2",
"phpunit/phpunit": "^5.7 || ^9.0",
"squizlabs/php_codesniffer": "^3.3"
},
"type": "library",
"extra": {
@ -1199,9 +1262,9 @@
],
"support": {
"issues": "https://github.com/stripe/stripe-php/issues",
"source": "https://github.com/stripe/stripe-php/tree/v7.94.0"
"source": "https://github.com/stripe/stripe-php/tree/v7.105.0"
},
"time": "2021-08-19T14:15:27+00:00"
"time": "2021-12-06T22:51:55+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
@ -2171,21 +2234,21 @@
"packages-dev": [
{
"name": "filp/whoops",
"version": "2.14.0",
"version": "2.14.4",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
"reference": "fdf92f03e150ed84d5967a833ae93abffac0315b"
"reference": "f056f1fe935d9ed86e698905a957334029899895"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/filp/whoops/zipball/fdf92f03e150ed84d5967a833ae93abffac0315b",
"reference": "fdf92f03e150ed84d5967a833ae93abffac0315b",
"url": "https://api.github.com/repos/filp/whoops/zipball/f056f1fe935d9ed86e698905a957334029899895",
"reference": "f056f1fe935d9ed86e698905a957334029899895",
"shasum": ""
},
"require": {
"php": "^5.5.9 || ^7.0 || ^8.0",
"psr/log": "^1.0.1"
"psr/log": "^1.0.1 || ^2.0 || ^3.0"
},
"require-dev": {
"mockery/mockery": "^0.9 || ^1.0",
@ -2230,7 +2293,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
"source": "https://github.com/filp/whoops/tree/2.14.0"
"source": "https://github.com/filp/whoops/tree/2.14.4"
},
"funding": [
{
@ -2238,7 +2301,7 @@
"type": "github"
}
],
"time": "2021-07-13T12:00:00+00:00"
"time": "2021-10-03T12:00:00+00:00"
},
{
"name": "kint-php/kint",
@ -2297,21 +2360,21 @@
},
{
"name": "maximebf/debugbar",
"version": "v1.17.1",
"version": "v1.17.3",
"source": {
"type": "git",
"url": "https://github.com/maximebf/php-debugbar.git",
"reference": "0a3532556be0145603f8a9de23e76dc28eed7054"
"reference": "e8ac3499af0ea5b440908e06cc0abe5898008b3c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/0a3532556be0145603f8a9de23e76dc28eed7054",
"reference": "0a3532556be0145603f8a9de23e76dc28eed7054",
"url": "https://api.github.com/repos/maximebf/php-debugbar/zipball/e8ac3499af0ea5b440908e06cc0abe5898008b3c",
"reference": "e8ac3499af0ea5b440908e06cc0abe5898008b3c",
"shasum": ""
},
"require": {
"php": "^7.1|^8",
"psr/log": "^1.0",
"psr/log": "^1|^2|^3",
"symfony/var-dumper": "^2.6|^3|^4|^5"
},
"require-dev": {
@ -2356,9 +2419,9 @@
],
"support": {
"issues": "https://github.com/maximebf/php-debugbar/issues",
"source": "https://github.com/maximebf/php-debugbar/tree/v1.17.1"
"source": "https://github.com/maximebf/php-debugbar/tree/v1.17.3"
},
"time": "2021-08-01T09:19:02+00:00"
"time": "2021-10-19T12:33:27+00:00"
},
{
"name": "psr/log",
@ -2575,16 +2638,16 @@
},
{
"name": "symfony/var-dumper",
"version": "v4.4.27",
"version": "v4.4.34",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "391d6d0e7a06ab54eb7c38fab29b8d174471b3ba"
"reference": "2d0c056b2faaa3d785bdbd5adecc593a5be9c16e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/391d6d0e7a06ab54eb7c38fab29b8d174471b3ba",
"reference": "391d6d0e7a06ab54eb7c38fab29b8d174471b3ba",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/2d0c056b2faaa3d785bdbd5adecc593a5be9c16e",
"reference": "2d0c056b2faaa3d785bdbd5adecc593a5be9c16e",
"shasum": ""
},
"require": {
@ -2644,7 +2707,7 @@
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v4.4.27"
"source": "https://github.com/symfony/var-dumper/tree/v4.4.34"
},
"funding": [
{
@ -2660,7 +2723,7 @@
"type": "tidelift"
}
],
"time": "2021-07-23T15:41:52+00:00"
"time": "2021-11-12T10:50:54+00:00"
}
],
"aliases": [],

View File

@ -5029,10 +5029,10 @@ $lang = array (
'srv_svetovanje_uporaba' => "Uporaba 1KA",
'srv_svetovanje_statistika' => "Statistika",
'srv_svetovanje_metodologija' => "Metodologija",
'srv_footer_links' => "<a href=\"https://www.1ka.si/d/sl/o-1ka/splosen-opis\" target=\"_blank\">O 1KA</a>
| <a href=\"https://www.1ka.si/d/sl/pomoc\" target=\"_blank\">Pomoč</a>
| <a href=\"https://www.1ka.si/d/sl/o-1ka/pogoji-uporabe-1ka\" target=\"_blank\">Pogoji uporabe</a>
| <a href=\"https://www.1ka.si/d/sl/cenik/zasebni-paketi\" target=\"_blank\">Cenik</a>",
'srv_footer_links' => "<span class=\"footer_item\"><a href=\"https://www.1ka.si/d/sl/o-1ka/splosen-opis\" target=\"_blank\">O 1KA</a></span>
<span class=\"footer_item\"><a href=\"https://www.1ka.si/d/sl/pomoc\" target=\"_blank\">Pomoč</a></span>
<span class=\"footer_item\"><a href=\"https://www.1ka.si/d/sl/o-1ka/pogoji-uporabe-1ka\" target=\"_blank\">Pogoji uporabe</a></span>
<span class=\"footer_item\"><a href=\"https://www.1ka.si/d/sl/cenik/zasebni-paketi\" target=\"_blank\">Cenik</a></span>",
'srv_footer_1ka_version' => "1KA verzija",
'srv_footer_drupal_version' => "Drupal",
'srv_footer_copyright' => "UL FDV, CDI",

View File

@ -5000,10 +5000,10 @@ $lang = array (
'srv_svetovanje_uporaba' => "Using 1KA",
'srv_svetovanje_statistika' => "Statistics",
'srv_svetovanje_metodologija' => "Methodology",
'srv_footer_links' => "<a href=\"https://www.1ka.si/d/en/about/general-description\" target=\"_blank\">About 1KA</a>
| <a href=\"https://www.1ka.si/d/en/help\" target=\"_blank\">Help</a>
| <a href=\"https://www.1ka.si/d/en/about/terms-of-use\" target=\"_blank\">Terms of use</a>
| <a href=\"https://www.1ka.si/d/en/price-list/private-packages\" target=\"_blank\">Pricelist</a>",
'srv_footer_links' => "<span class=\"footer_item\"><a href=\"https://www.1ka.si/d/en/about/general-description\" target=\"_blank\">About 1KA</a></span>
<span class=\"footer_item\"><span class=\"footer_item\"><a href=\"https://www.1ka.si/d/en/help\" target=\"_blank\">Help</a></span>
<span class=\"footer_item\"><a href=\"https://www.1ka.si/d/en/about/terms-of-use\" target=\"_blank\">Terms of use</a></span>
<span class=\"footer_item\"><a href=\"https://www.1ka.si/d/en/price-list/private-packages\" target=\"_blank\">Pricelist</a></span>",
'srv_footer_1ka_version' => "1KA version",
'srv_footer_drupal_version' => "Drupal",
'srv_footer_copyright' => "UL FDV, CDI",

File diff suppressed because it is too large Load Diff

View File

@ -9,6 +9,6 @@
@import "typography";
@import "layout";
@import "animations";
@import "icons";
@import "icons/icons";
@import "links";
@import "basic_classes";

View File

@ -11,6 +11,7 @@ $black: #333333;
$white: #FFFFFF;
$very-dark-gray: #777777;
$very-dark-gray2: #808080;
$dark-gray: #C4C4C4;
$gray: #E5E5E5;
$light-gray: #F8F8F8;

View File

@ -1,116 +0,0 @@
span.faicon,
a.faicon{
font-family: $fontawesome;
color: inherit;
display: inline-block;
font-weight: $heavy;
&.empty {
font-weight: $regular;
}
&.link-right {
margin-right: 10px;
}
&.link-left {
margin-left: 8px;
}
//VELIKOSTI
&.large {
font-size: 32px !important;
}
&.medium {
font-size: 24px !important;
}
&.normal {
font-size: 16px !important;
}
&.small {
font-size: 10px !important;
}
//BARVE
&.yellow {
color: $yellow;
}
&.blue {
color: $blue;
}
//STACKING
&.fa-stack {
height: 1em;
line-height: 1em;
width: 1em;
}
}
// Ključavnica
span.faicon.lock_open::before{
content: "\f3c1";
}
span.faicon.lock_close::before{
content: "\f023";
}
// Zvone (notification)
span.faicon.bell::before{
content: "\f0f3";
}
span.faicon.bell_slash::before{
content: "\f1f6";
}
// Izbris (delete)
span.faicon.trash::before{
content: "\f2ed";
}
// Kopiranje
span.faicon.copy::before{
content: "\f0c5";
}
// Plus, minus, krogi
span.faicon.circle::before{
content: "\f111";
}
span.faicon.plus::before{
content: "\f067";
}
span.faicon.plus_circle::before{
content: "\f055";
}
span.faicon.minus_circle::before{
content: "\f056";
}
// Koledar
span.faicon.calendar_icon::before{
content: "\f073";
}
//Wrapper (za ikone desno ob elementih)
div.icon_holder {
display: flex;
flex-direction: row;
box-sizing: border-box;
align-items: center;
span.faicon,
a.faicon{
margin-left: 12px;
}
}

View File

@ -0,0 +1,62 @@
/*
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
*/
/*
Created on : 10-Okt-2018
Author : Peter Hrvatin
*/
/* Analiza */
span.faicon.an_sigma::before {
font-family: $font_family;
font-weight: 700;
content: "Σ";
vertical-align: middle;
}
span.faicon.an_sigmax::before {
font-family: $font_family;
font-weight: 700;
content: "Σ*";
vertical-align: middle;
margin-left: 3px;
}
span.faicon.an_freq::before {
font-family: $font_family;
font-weight: 700;
font-style: italic;
content: "f";
vertical-align: middle;
margin-left: 3px;
}
span.faicon.an_freqx::before {
font-family: $font_family;
font-weight: 700;
font-style: italic;
content: "f*";
vertical-align: middle;
margin-left: 3px;
}
span.faicon.an_stat::before {
font-family: $font_family;
font-weight: 700;
font-style: italic;
content: "s";
vertical-align: middle;
margin-left: 3px;
}
span.faicon.an_chart_bar::before {
font-size: 14px;
font-weight: 700;
/*content: "\f080";*/
content: "\f200";
margin-left: 3px;
}

View File

@ -0,0 +1,132 @@
/*
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
*/
/*
Created on : 8-Okt-2018
Author : Peter Hrvatin
*/
/* Izvozi */
// PDF
span.faicon.pdf::before{
font-size: 16px;
font-weight: 400;
content: "\f1c1";
color: #ed1c24;
}
span.faicon.pdf.black{
color: $gray !important;
&:hover{
color: #ed1c24 !important;
}
}
a:hover span.faicon.pdf.black{
color: #ed1c24 !important;
}
span.faicon.pdf.black::before{
color: inherit !important;
}
// XLS
span.faicon.xls::before{
font-size: 16px;
font-weight: 400;
content: "\f1c3";
color: #008000;
}
span.faicon.xls.black{
color: $gray !important;
&:hover{
color: #008000 !important;
}
}
a:hover span.faicon.xls.black{
color: #008000 !important;
}
span.faicon.xls.black::before{
color: inherit !important;
}
// RTF
span.faicon.rtf::before{
font-size: 16px;
font-weight: 400;
content: "\f1c2";
color: #0f3ea8;
}
span.faicon.rtf.black{
color: $gray !important;
&:hover{
color: #0f3ea8 !important;
}
}
a:hover span.faicon.rtf.black{
color: #0f3ea8 !important;
}
span.faicon.rtf.black::before{
color: inherit !important;
}
// PPT
span.faicon.ppt::before{
font-size: 16px;
font-weight: 400;
content: "\f1c4";
color: #fa4913;
}
span.faicon.ppt.black{
color: $gray !important;
&:hover{
color: #fa4913 !important;
}
}
a:hover span.faicon.ppt.black{
color: #fa4913 !important;
}
span.faicon.ppt.black::before{
color: inherit !important;
}
// XML
span.faicon.xml::before{
font-size: 16px;
font-weight: 400;
content: "\f1c9";
color: #00a000;
}
span.faicon.xml.black{
color: $gray !important;
&:hover{
color: #00a000 !important;
}
}
a:hover span.faicon.xml.black{
color: #00a000 !important;
}
span.faicon.xml.black::before{
color: inherit !important;
}
// Arhiv
span.faicon.arhiv::before{
font-size: 16px;
content: "\f187";
}
span.faicon.arhiv_mail::before{
font-size: 16px;
font-weight: 400;
content: "\f14d";
}

View File

@ -0,0 +1,62 @@
span.faicon,
a.faicon{
font-family: $fontawesome;
color: inherit;
display: inline-block;
font-weight: $heavy;
&.empty {
font-weight: $regular;
}
&.link-right {
margin-right: 10px;
}
&.link-left {
margin-left: 8px;
}
//VELIKOSTI
&.large {
font-size: 32px !important;
}
&.medium {
font-size: 24px !important;
}
&.normal {
font-size: 16px !important;
}
&.small {
font-size: 10px !important;
}
//BARVE
&.yellow {
color: $yellow;
}
&.blue {
color: $blue;
}
//STACKING
&.fa-stack {
height: 1em;
line-height: 1em;
width: 1em;
}
}
@import "radio";
@import "standard";
@import "modules";
@import "toolbox";
@import "question_edit";
@import "library";
@import "export";
@import "analiza";
@import "invitation";

View File

@ -0,0 +1,44 @@
/*
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
*/
/*
Created on : 10-Okt-2018
Author : Peter Hrvatin
*/
/* Invitation table */
span.faicon.inv_sent_0::before {
font-size: 14px;
content: "\f2b6";
font-weight: 400;
}
span.faicon.inv_sent_1::before {
font-size: 14px;
content: "\f0e0";
}
span.faicon.inv_responded_0::before {
font-size: 14px;
font-weight: 400;
content: "\f005";
}
span.faicon.inv_responded_1::before {
font-size: 14px;
font-weight: 700;
content: "\f005";
}
span.faicon.inv_unsubscribed_0::before {
font-size: 14px;
font-weight: 400;
content: "\f111";
}
span.faicon.inv_unsubscribed_1::before {
font-size: 14px;
font-weight: 700;
content: "\f111";
color: $red;
}

View File

@ -0,0 +1,41 @@
/*
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
*/
/*
Created on : 7-Okt-2018
Author : Peter Hrvatin
*/
/* Knjiznica */
span.faicon.mapca.anketa::before{
font-size: 16px;
font-weight: 400;
content: "\f022";
}
span.faicon.table::before{
font-size: 16px;
content: "\f00b";
}
span.faicon.other_vprasanja::before{
font-size: 16px;
content: "\f0ca" !important;
}
span.faicon.osnovna_vprasanja::before{
font-size: 16px;
content: "\f0ca";
}
span.faicon.mapca.if::before{
font-family: $font_family;
font-weight: 500;
font-size: 16px;
content: "IF";
}
span.faicon.mapca.b::before{
font-family: $font_family;
font-weight: 500;
font-size: 16px;
content: "B";
}

View File

@ -0,0 +1,125 @@
/*
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
*/
/*
Created on : 21-Sep-2018
Author : Peter Hrvatin
*/
/* NAPREDNI MODULI */
span.module_icon{
padding: 0 6px;
color: white;
font-weight: 700;
font-size: 16px;
background-color: transparent;
border: 1px $white solid;
}
span.module_icon.maza::before{
content: "MAZA";
}
span.module_icon.wpn::before{
content: "WPN";
}
span.module_icon.panel::before{
content: "Panel";
}
span.module_icon.telephone::before{
content: "TEL";
}
span.module_icon.slideshow::before{
content: "SS";
}
span.module_icon.evalvation::before{
content: "EVAL";
}
span.module_icon.vnos::before{
content: "V";
}
span.module_icon.social::before{
content: "SN";
}
span.module_icon.quiz::before{
content: "Q";
}
span.module_icon.voting::before{
content: "VOTE";
}
span.module_icon.advanced_paradata::before{
content: "AP";
}
span.module_icon.chat::before{
content: "C";
}
span.module_icon.degrees_1ka::before{
content: "360";
}
span.module_icon.mju::before{
content: "H";
}
span.module_icon.sa-hierarhija::before{
content: "SA";
}
span.module_icon.degrees::before{
content: "360";
}
span.module_icon.borza::before{
content: "Borza";
}
span.module_icon.evoli::before{
content: "Evoli";
}
span.module_icon.evoli_teammeter::before{
content: "Evoli TM";
}
span.module_icon.evoli_quality_climate::before{
content: "Evoli QC";
}
span.module_icon.evoli_teamship_meter::before{
content: "Evoli TSM";
}
span.module_icon.evoli_organizational_employeeship_meter::before{
content: "Evoli OEM";
}
span.module_icon.evoli_employmeter::before{
content: "Evoli EM";
}
span.module_icon.excell_matrix::before{
content: "EM";
}
span.module_icon.mfdps::before{
content: "MFDPS";
}
span.module_icon.mju::before{
content: "MJU";
}
span.module_icon.gdpr{
color: $gray;
background-color: $blue;
border: 1px $white solid;
&:hover{
color: $white;
}
}
span.module_icon.gdpr.active{
color: white;
background-color: $blue;
border: 1px $white solid;
&:hover{
color: white;
border: 1px $white solid;
}
}
span.module_icon.gdpr::before{
content: "GDPR";
}

View File

@ -0,0 +1,119 @@
/*
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
*/
/*
Created on : 21-Sep-2018
Author : Peter Hrvatin
*/
/* question editing icons */
a.faicon{
color: $blue !important;
&:hover{
color: $dark-blue !important;
}
}
span.faicon.edit-vprasanje{
line-height: 25px;
&:before{
font-size: 18px;
content: "\f031";
}
}
a.faicon.edit::before{
font-size: 16px;
content: "\f304";
}
a.faicon.addif::before{
font-family: Montserrat, sans-serif;
font-size: 18px;
font-weight: 900;
content: "IF";
}
a.faicon.copy::before{
font-size: 18px;
font-weight: 400;
content: "\f0c5";
}
a.faicon.copycond::before{
font-size: 18px;
content: "\f0c5";
}
a.faicon.preview::before{
@include icon_preview_before();
}
a.faicon.preview::after{
@include icon_preview_after();
}
a.faicon.arhiv::before{
font-size: 18px;
content: "\f044";
}
a.faicon.delete::before{
font-size: 18px;
font-weight: 400;
content: "\f2ed";
}
a.faicon.hide::before{
font-size: 18px;
font-weight: 400;
content: "\f06e";
}
a.faicon.unhide_icon::before{
font-size: 18px;
font-weight: 400;
content: "\f070";
}
/* Urejanje vrednosti inline */
.variabla span.inline.faicon::before{
color: $blue;
}
.variabla span.inline.faicon:hover::before{
color: $dark-blue;
}
.variabla span.inline.faicon.edit2::before{
font-size: 14px;
content: "\f304";
}
.variabla span.inline.faicon.odg_hidden::before{
font-size: 14px;
content: "\f05e";
}
.variabla span.inline.faicon.odg_hidden.show-hidden::before{
color: $red;
}
.variabla span.inline.faicon.odg_hidden.show-disable::before{
color: $yellow;
}
.variabla span.inline.faicon.odg_if_not::before{
font-family: Montserrat, sans-serif;
font-size: 15px;
font-weight: 900;
content: "IF*";
}
.variabla span.inline.faicon.odg_if_follow::before{
font-family: Montserrat, sans-serif;
font-size: 15px;
font-weight: 900;
content: "IF🠞";
}
.variabla span.inline.faicon.correct::before{
font-size: 14px;
font-weight: 900;
content: "\f00c";
}
.variabla span.inline.faicon.move_updown::before{
font-size: 16px;
color: $dark-blue;
content: "\f338";
}

View File

@ -0,0 +1,102 @@
/*
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
*/
/*
Created on : 21-Sep-2018
Author : Peter Hrvatin
*/
.enka-custom-radio{
&::before {
letter-spacing: 10px;
color: $gray;
}
&.star::before {
content: fa-content($fa-var-star);
}
&.thumb::before {
content: fa-content($fa-var-thumbs-up);
}
&.smiley::before {
content: fa-content($fa-var-smile);
}
&.heart::before {
content: fa-content($fa-var-heart);
}
&.flag::before {
content: fa-content($fa-var-flag);
}
&.user::before {
content: fa-content($fa-var-user);
}
}
/* visual analog scale - radio buttons */
.enka-vizualna-skala {
&::before {
font-family: $fontawesome;
font-size: 20px;
letter-spacing: 10px;
color: $gray;
}
// D;
&.siv-61::before,
&.siv-71::before{
content: fa-content($fa-var-sad-tear);
}
// D:
&.siv-41::before,
&.siv-51::before,
&.siv-62::before,
&.siv-72::before {
content: fa-content($fa-var-frown-open);
}
// :(
&.siv-21::before,
&.siv-31::before,
&.siv-42::before,
&.siv-52::before,
&.siv-63::before,
&.siv-73::before {
content: fa-content($fa-var-frown);
}
// :|
&.siv-32::before,
&.siv-53::before,
&.siv-74::before{
content: fa-content($fa-var-meh);
}
// :)
&.siv-22::before,
&.siv-33::before,
&.siv-43::before,
&.siv-54::before,
&.siv-64::before,
&.siv-75::before {
content: fa-content($fa-var-smile);
}
// :D
&.siv-44::before,
&.siv-55::before,
&.siv-65::before,
&.siv-76::before {
content: fa-content($fa-var-grin);
}
// ;D
&.siv-66::before,
&.siv-77::before{
content: fa-content($fa-var-laugh-wink);
}
}

View File

@ -0,0 +1,612 @@
/*
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
*/
/*
Created on : 21-Sep-2018
Author : Peter Hrvatin
*/
/* icons */
span.faicon.plus::before{
content: "\f067";
}
span.faicon.minus::before{
content: "\f068";
}
span.faicon.close::before{
font-size: 18px;
font-weight: 400;
content: "\f057";
}
span.faicon.dropdown_blue::before{
font-size: 16px;
content: "\f13a";
}
span.faicon.dropup_blue::before{
font-size: 16px;
content: "\f139";
}
span.faicon.arrow_back::before{
font-weight: 600;
font-size: 16px;
content: "\f137";
}
span.faicon.add::before{
font-size: 18px;
content: "\f055";
}
span.faicon.remove::before{
font-size: 18px;
content: "\f056";
}
span.faicon.delete::before{
font-size: 18px;
font-weight: 400;
content: "\f2ed";
}
span.faicon.anketa_delete::before{
font-size: 24px;
font-weight: 400;
content: "\f2ed";
}
span.faicon.copy::before{
font-size: 18px;
content: "\f0c5";
font-weight: 400;
}
span.faicon.anketa_copy::before{
font-size: 24px;
content: "\f0c5";
font-weight: 400;
}
span.faicon.export::before{
font-size: 24px;
content: "\f56e";
}
/*span.faicon.import::before{
font-size: 24px;
content: "\f56f";
}*/
span.faicon.import{
width: 32px;
}
span.faicon.import::before{
font-size: 24px;
font-weight: 400;
content: "\f1c2";
}
span.faicon.import::after{
font-size: 14px;
content: "\f061";
display: inline-block;
}
span.faicon.library::before{
font-size: 24px;
content: "\f518";
}
span.faicon.folder::before{
font-size: 22px;
content: "\f07b";
vertical-align: middle;
}
span.faicon.after.sort_down_arrow::after{
content: "\f0d7";
margin-left: 5px;
}
span.faicon.after.sort_up_arrow::after{
content: "\f0d8";
margin-left: 5px;
}
span.faicon.info::before{
font-size: 28px;
content: "\f05a";
vertical-align: middle;
}
span.faicon.pagination_left::before{
margin: 0 1px 0 1px;
content: "\f104";
}
span.faicon.pagination_right::before{
margin: 0 0 0 1px;
content: "\f105";
}
span.faicon.edit::before{
font-size: 16px;
content: "\f304";
}
span.faicon.refresh::before{
font-size: 18px;
content: "\f2f1";
}
span.faicon.filter::before{
font-size: 18px;
content: "\f0b0";
}
span.faicon.star::before,
span.faicon.star_off::before{
font-size: 14px;
font-weight: 400;
content: "\f005";
}
span.faicon.star_on::before{
font-size: 14px;
font-weight: 700;
content: "\f005";
}
span.faicon.search::before{
font-size: 20px;
content: "\f002";
}
span.faicon.help2::before{
font-size: 20px;
content: "\f059";
}
span.faicon.user::before{
font-size: 18px;
content: "\f007";
}
span.faicon.logout::before{
font-size: 20px;
content: "\f2f5";
}
span.faicon.monitor::before{
font-size: 18px;
content: "\f108";
}
span.faicon.users::before{
font-size: 18px;
content: "\f500";
}
span.faicon.lock_open::before{
font-size: 18px;
content: "\f3c1";
}
span.faicon.lock_close::before{
font-size: 18px;
content: "\f023";
}
span.faicon.bottom_saving::before{
font-size: 24px;
font-weight: 400;
content: "\f0c7";
}
span.faicon.bottom_publish::before{
font-size: 24px;
content: "\f093";
}
span.faicon.bottom_preview{
width: 20px;
}
span.faicon.bottom_preview::before{
font-size: 24px;
font-weight: 400;
content: "\f15b";
}
span.faicon.bottom_preview::after{
font-size: 14px;
content: "\f002";
display: inline-block;
margin-left: -70%;
}
span.faicon.bottom_test::before{
font-size: 24px;
content: "\f492";
}
span.faicon.language::before{
font-size: 24px;
content: "\f0ac";
}
span.faicon.mobile_off::before{
font-size: 24px;
content: "\f3cd";
}
span.faicon.mobile_off::after{
font-size: 24px;
content: "\f715";
margin-left: -23px;
}
span.faicon.comments::before{
font-size: 24px;
content: "\f27a";
}
span.faicon.comments_num::before{
font-size: 24px;
content: "\f27a";
}
span.faicon.comments_num {
strong {
color: white;
font-family: $font_family;
margin-top: -2px;
}
}
@mixin icon_link(){
content: "\f0c1";
}
span.faicon.data_link::before{
font-size: 20px;
@include icon_link();
}
span.faicon.data_link_small::before{
font-size: 16px;
@include icon_link();
}
@mixin icon_print(){
content: "\f02f";
}
span.faicon.print::before{
font-size: 24px;
@include icon_print();
}
span.faicon.print_small::before{
font-size: 16px;
@include icon_print();
}
@mixin icon_preview_before(){
font-size: 18px;
font-weight: 400;
content: "\f15b";
}
@mixin icon_preview_after(){
content: "\f002";
display: inline-block;
font-size: 11px;
margin-left: -50%;
}
span.faicon.preview{
width: 18px;
}
span.faicon.preview::before{
@include icon_preview_before();
}
span.faicon.preview::after{
@include icon_preview_after();
}
span.faicon.palette::before{
font-size: 18px;
content: "\f53f";
}
span.faicon.inline_comment::before{
font-size: 14px;
font-weight: 400;
content: "\f075";
}
span.faicon.inline_double_comment::before{
font-size: 14px;
font-weight: 400;
content: "\f086";
}
span.faicon.comments_creport::before{
font-size: 16px;
content: "\f086";
}
span.faicon.compress::before{
font-size: 15px;
content: "\f066";
}
span.faicon.expand::before{
font-size: 15px;
content: "\f065";
}
span.faicon.hashtag::before{
font-size: 15px;
content: "\f292";
}
span.faicon.bug::before{
font-size: 15px;
content: "\f188";
}
span.faicon.paragraph::before{
font-size: 15px;
content: "\f1dd";
}
span.faicon.replace::before{
font-size: 15px;
content: "\f362";
}
span.faicon.plus_square::before{
font-size: 15px;
font-weight: 400;
content: "\f0fe";
}
span.faicon.minus_square::before{
font-size: 15px;
font-weight: 400;
content: "\f146";
}
span.faicon.delete_circle::before{
font-size: 14px;
content: "\f056";
}
span.faicon.quick_view::before{
font-size: 15px;
font-weight: 400;
content: "\f06e";
}
span.faicon.edit_square::before{
font-size: 15px;
content: "\f044";
}
span.faicon.test::before{
font-size: 15px;
content: "\f492";
}
@mixin icon_if_add() {
font-size: 12px;
font-family: $font_family;
font-weight: 400;
&:before{
background-color: $blue;
font-weight: 500;
padding: 2px 4px;
color: white;
content: "IF";
}
&:hover{
&:before{
background-color: $dark-blue;
}
}
}
a.faicon.if_add{
@include icon_if_add();
}
span.faicon.if_add{
@include icon_if_add();
}
span.faicon.text_file::before{
font-size: 24px;
font-weight: 400;
content: "\f15c";
}
span.faicon.text_file_small {
height: 20px;
vertical-align: middle;
&:before{
font-size: 18px;
font-weight: 400;
content: "\f15c";
}
}
span.faicon.warning::before{
font-size: 16px;
content: "\f071";
}
span.faicon.users_small::before{
font-size: 16px;
content: "\f0c0";
}
span.faicon.popup_0::before{
font-size: 14px;
content: "\f065";
color: $blue;
}
span.faicon.popup_1::before{
font-size: 14px;
content: "\f065";
color: $dark-blue;
}
span.faicon.flat_0::before{
font-size: 14px;
content: "\f03c";
color: $dark-blue;
}
span.faicon.flat_1::before{
font-size: 14px;
content: "\f03c";
color: $blue;
}
span.basic-icon.spss::before{
content: "Σ";
line-height: 26px;
vertical-align: bottom;
font-size: 30px !important;
font-weight: bold;
}
span.faicon.external_link::before{
font-size: 14px;
font-weight: 600;
content: "\f35d";
}
span.faicon.cog_large::before{
font-size: 34px;
font-weight: 600;
content: "\f013";
}
span.faicon.chart_large::before{
font-size: 34px;
font-weight: 600;
content: "\f201";
}
span.faicon.reload_large::before{
font-size: 34px;
font-weight: 600;
content: "\f021";
}
/* CALENDAR */
span.faicon.calendar_icon::before,
button.ui-datepicker-trigger::before{
font-family: $fontawesome;
font-weight: 400;
font-size: 16px;
content: "\f073";
}
/* ARROWS */
span.faicon.arrow_up::before{
font-size: 14px;
content: "\f062";
color: $gray;
}
span.faicon.arrow2_r::before{
font-size: 14px;
content: "\f054";
}
span.faicon.arrow2_l::before{
font-size: 14px;
content: "\f053";
}
span.faicon.arrow2_d::before{
font-size: 14px;
content: "\f078";
}
span.faicon.arrow2_u::before{
font-size: 14px;
content: "\f077";
}
span.faicon.arrow_large2_r::before{
font-size: 35px;
content: "\f054";
}
span.faicon.arrow_large2_l::before{
font-size: 35px;
content: "\f053";
}
span.faicon.arrow_verylarge2_r::before{
font-size: 40px;
content: "\f054";
}
span.faicon.arrow_verylarge2_l::before{
font-size: 40px;
content: "\f053";
}
span.faicon.sort_descending::before{
font-size: 14px;
content: "\f0d7";
}
span.faicon.sort_ascending::before{
font-size: 14px;
content: "\f0d8";
}
/* Plus/minus sqare */
span.folder_plusminus {
text-indent: 0px !important;
font-style: normal !important;
}
span.faicon.plus_orange::before{
font-size: 12px;
font-weight: 400;
content: "\f0fe";
}
span.faicon.minus_orange::before{
font-size: 12px;
font-weight: 400;
content: "\f146";
}
/* Spinner */
span.faicon.spinner::before{
font-size: 18px;
content: "\f110";
}
/* Bars - mobile menu */
span.faicon.bars::before{
font-size: 26px;
content: "\f0c9";
}
// Ključavnica
span.faicon.lock_open::before{
content: "\f3c1";
}
span.faicon.lock_close::before{
content: "\f023";
}
// Zvone (notification)
span.faicon.bell::before{
content: "\f0f3";
}
span.faicon.bell_slash::before{
content: "\f1f6";
}
// Izbris (delete)
span.faicon.trash::before{
content: "\f2ed";
}
// Kopiranje
span.faicon.copy::before{
content: "\f0c5";
}
// Plus, minus, krogi
span.faicon.circle::before{
content: "\f111";
}
span.faicon.plus::before{
content: "\f067";
}
span.faicon.plus_circle::before{
content: "\f055";
}
span.faicon.minus_circle::before{
content: "\f056";
}
// Koledar
span.faicon.calendar_icon::before{
content: "\f073";
}
//Wrapper (za ikone desno ob elementih)
div.icon_holder {
display: flex;
flex-direction: row;
box-sizing: border-box;
align-items: center;
span.faicon,
a.faicon{
margin-left: 12px;
}
}

View File

@ -0,0 +1,75 @@
/*
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
*/
/*
Created on : 21-Sep-2018
Author : Peter Hrvatin
*/
/* Toolbox na levi strani */
span.faicon.wheel_32::before{
content: "\f013";
font-size: 20px;
}
span.faicon.radio_32::before{
content: "\f192";
font-weight: 400;
font-size: 18px;
}
span.faicon.check_32::before{
content: "\f14a";
font-weight: 400;
font-size: 18px;
}
span.faicon.matrix_32::before{
content: "\f192 \f192\A\f192 \f192";
white-space: pre;
font-weight: 400;
font-size: 12px;
}
span.faicon.abc_32::before{
content: "ABC";
font-family: $font_family;
font-size: 16px;
}
span.faicon.number_32::before{
content: "123";
font-family: $font_family;
font-size: 16px;
}
span.faicon.nagovor::before{
content: "T";
font-size: 18px;
}
span.faicon.plus_32::before{
content: "\f055";
font-size: 18px;
}
span.faicon.if_32::before{
content: "IF";
font-family: $font_family;
font-size: 16px;
}
span.faicon.block_32::before{
content: "B";
font-family: $font_family;
font-size: 16px;
}
span.faicon.loop_32::before{
content: "L";
font-family: $font_family;
font-size: 15px;
}

View File

@ -1,5 +1,58 @@
footer{
height: 120px;
footer#srv_footer{
display: flex;
justify-content: space-between;
box-sizing: border-box;
background-color: #eee;
}
width: 100%;
height: 80px;
padding: 16px 40px;
margin-top: 40px;
font-size: 14px;
line-height: 16px;
color: $black;
background-color: $white;
border-top: 1px solid $gray;
a{
text-decoration: none;
}
.footer_left{
display: flex;
flex-direction: column;
.footer_line{
display: flex;
&:first-child{
margin-bottom: 15px;
}
.footer_item{
padding: 0 8px;
border-left: 1px $gray solid;
&:first-child{
padding-left: 0;
border-left: none;
}
}
}
}
.footer_right{
text-align: left;
span.faicon.inline_comment:before{
font-size: 14px !important;
margin-right: 3px;
}
span.faicon.external_link:before{
font-size: 14px !important;
margin-right: 3px;
}
}
}

View File

@ -15,35 +15,46 @@ header{
display: flex;
height: 50px;
width: 100%;
padding-top: 10px;
margin-left: 32px;
font-size: 16px;
font-weight: 400;
text-align: center;
#mojeAnketeLink {
a {
color: $white;
text-decoration: none;
}
}
ol {
ol{
display: flex;
li {
padding: 0;
margin: 0;
li{
list-style-image: none;
list-style-position: outside;
list-style-type: none;
}
&.navigation_buttons_list li{
padding: 14px 32px;
a {
color: $white;
text-decoration: none;
}
&.active_on{
background-color: $white;
a {
color: $blue;
}
}
#mojeAnketeLink {
}
}
}
}
}
}
@ -93,180 +104,53 @@ header{
#secondNavigation {
display: block;
z-index: 1;
left: 0px;
right: 0px;
padding: 8px 20px 0 145px;
height: 33px;
border-bottom: 1px solid $blue;
background-color: $second_navigation_background;
}
display: flex;
ul.secondNavigation {
display: inline-block;
float: left;
width: auto;
margin-top: 1px !important;
margin-bottom: 0;
}
height: 41px;
.secondNavigation {
display: inline-block;
list-style-image: none;
list-style-position: outside;
list-style-type: none;
padding: 0px;
width: 100%;
li {
display: list-item;
float: left;
padding: 0px;
margin: 0px;
}
.blank {
height: 12px;
width: 6px;
}
.no-img {
padding: 0px 12px !important;
background-image: none !important;
}
a {
display: block;
line-height: 30px;
font-size: 14px;
color: $second_navigation_text;
&:hover {
border-bottom: 2px solid $yellow;
}
}
a.active {
color: $yellow;
background-color: inherit;
border-bottom: 2px solid $yellow;
}
.side-left {
padding-left: 10px;
}
.side-right {
padding-right: 12px;
}
.space {
width: 20px;
height: 19px;
padding: 0px;
}
.single {
padding: 0px 12px 0px 24px¸;
&:hover {
text-shadow: 0px 1px 0px #fff;
}
&:active {
color: $gray;
}
}
}
border-bottom: 1px solid $gray;
#secondNavigation.library {
padding-left: 35px;
a {
font-size: 14px;
}
ul.secondNavigation {
.space {
width: 25px;
}
}
}
ul.secondNavigation,
ul.secondNavigationArchive{
display: flex;
align-items: center;
#secondNavigation_links {
position: relative;
float: right;
width: auto;
margin-top: -7px;
line-height: 38px;
z-index: 2;
text-align: right;
#hover_export {
display: none;
position: absolute;
z-index: 99999;
right: 10px;
top: 39px;
padding: 5px 0 5px 13px;
width: 180px;
text-align: left;
line-height: normal;
background-color: $second_navigation_background;
border: 1px $blue solid;
-webkit-box-shadow: 0 5px 15px 0 rgba(0,0,0,0.4);
box-shadow: 0 5px 15px 0 rgba(0,0,0,0.4);
-moz-box-shadow: 0 5px 15px 0 rgba(0,0,0,0.4);
a {
display: block;
padding: 6px 0;
color: $export_dropdown_text;
font-size: 14px;
transition: 0.2s;
&:hover {
color: $yellow;
margin: 0 0 0 32px;
padding: 0;
li{
list-style-image: none;
list-style-position: outside;
list-style-type: none;
height: 41px;
border-bottom: 1px $gray solid;
a {
padding: 12px 32px;
line-height: 41px;
font-size: 15px;
color: $very-dark-gray2;
text-decoration: none;
}
&.active,
&:hover{
border-bottom: 1px $blue solid;
a{
color: $blue;
}
}
}
span.hover_export_icon {
display: inline-block;
width: 40px;
}
}
}
ul.secondNavigationArchive {
display: inline-block;
float: left;
width: auto;
padding: 0px;
margin: 0 0 0 10px !important;
padding-left: 23px;
padding-top: 0px;
font-size: 14px;
list-style-image: none;
list-style-position: outside;
list-style-type: none;
border-left: 1px dotted $blue;
li {
display: list-item;
padding: 0 12px;
float: left;
margin: 0px;
transition: 0.2s;
a {
color: $second_navigation_text;
line-height: 31px;
}
a.active {
color: $yellow;
}
&:hover {
border-bottom: 2px solid $yellow;
}
}
li.aactive{
border-bottom: 2px solid $yellow;
}
}
// skrijemo breadcrumbs na desktopu
div.breadcrumbs {
display: none;
}
}

View File

@ -19,6 +19,7 @@ return array(
'ApiController' => $baseDir . '/admin/survey/api/class.ApiController.php',
'ApiNarocilaController' => $baseDir . '/frontend/payments/classes/class.ApiNarocilaController.php',
'ApiSurvey' => $baseDir . '/admin/survey/api/class.ApiSurvey.php',
'AppSettings' => $baseDir . '/admin/survey/classes/class.AppSettings.php',
'App\\Controllers\\AjaxController' => $baseDir . '/main/survey/app/Controllers/AjaxController.php',
'App\\Controllers\\BodyController' => $baseDir . '/main/survey/app/Controllers/BodyController.php',
'App\\Controllers\\CheckController' => $baseDir . '/main/survey/app/Controllers/CheckController.php',
@ -855,6 +856,7 @@ return array(
'Stripe\\Service\\ReviewService' => $vendorDir . '/stripe/stripe-php/lib/Service/ReviewService.php',
'Stripe\\Service\\SetupAttemptService' => $vendorDir . '/stripe/stripe-php/lib/Service/SetupAttemptService.php',
'Stripe\\Service\\SetupIntentService' => $vendorDir . '/stripe/stripe-php/lib/Service/SetupIntentService.php',
'Stripe\\Service\\ShippingRateService' => $vendorDir . '/stripe/stripe-php/lib/Service/ShippingRateService.php',
'Stripe\\Service\\Sigma\\ScheduledQueryRunService' => $vendorDir . '/stripe/stripe-php/lib/Service/Sigma/ScheduledQueryRunService.php',
'Stripe\\Service\\Sigma\\SigmaServiceFactory' => $vendorDir . '/stripe/stripe-php/lib/Service/Sigma/SigmaServiceFactory.php',
'Stripe\\Service\\SkuService' => $vendorDir . '/stripe/stripe-php/lib/Service/SkuService.php',
@ -874,6 +876,7 @@ return array(
'Stripe\\Service\\WebhookEndpointService' => $vendorDir . '/stripe/stripe-php/lib/Service/WebhookEndpointService.php',
'Stripe\\SetupAttempt' => $vendorDir . '/stripe/stripe-php/lib/SetupAttempt.php',
'Stripe\\SetupIntent' => $vendorDir . '/stripe/stripe-php/lib/SetupIntent.php',
'Stripe\\ShippingRate' => $vendorDir . '/stripe/stripe-php/lib/ShippingRate.php',
'Stripe\\Sigma\\ScheduledQueryRun' => $vendorDir . '/stripe/stripe-php/lib/Sigma/ScheduledQueryRun.php',
'Stripe\\SingletonApiResource' => $vendorDir . '/stripe/stripe-php/lib/SingletonApiResource.php',
'Stripe\\Source' => $vendorDir . '/stripe/stripe-php/lib/Source.php',

View File

@ -223,6 +223,7 @@ class ComposerStaticInit6b03163c371c5541881b55b762b8c779
'ApiController' => __DIR__ . '/../..' . '/admin/survey/api/class.ApiController.php',
'ApiNarocilaController' => __DIR__ . '/../..' . '/frontend/payments/classes/class.ApiNarocilaController.php',
'ApiSurvey' => __DIR__ . '/../..' . '/admin/survey/api/class.ApiSurvey.php',
'AppSettings' => __DIR__ . '/../..' . '/admin/survey/classes/class.AppSettings.php',
'App\\Controllers\\AjaxController' => __DIR__ . '/../..' . '/main/survey/app/Controllers/AjaxController.php',
'App\\Controllers\\BodyController' => __DIR__ . '/../..' . '/main/survey/app/Controllers/BodyController.php',
'App\\Controllers\\CheckController' => __DIR__ . '/../..' . '/main/survey/app/Controllers/CheckController.php',
@ -1059,6 +1060,7 @@ class ComposerStaticInit6b03163c371c5541881b55b762b8c779
'Stripe\\Service\\ReviewService' => __DIR__ . '/..' . '/stripe/stripe-php/lib/Service/ReviewService.php',
'Stripe\\Service\\SetupAttemptService' => __DIR__ . '/..' . '/stripe/stripe-php/lib/Service/SetupAttemptService.php',
'Stripe\\Service\\SetupIntentService' => __DIR__ . '/..' . '/stripe/stripe-php/lib/Service/SetupIntentService.php',
'Stripe\\Service\\ShippingRateService' => __DIR__ . '/..' . '/stripe/stripe-php/lib/Service/ShippingRateService.php',
'Stripe\\Service\\Sigma\\ScheduledQueryRunService' => __DIR__ . '/..' . '/stripe/stripe-php/lib/Service/Sigma/ScheduledQueryRunService.php',
'Stripe\\Service\\Sigma\\SigmaServiceFactory' => __DIR__ . '/..' . '/stripe/stripe-php/lib/Service/Sigma/SigmaServiceFactory.php',
'Stripe\\Service\\SkuService' => __DIR__ . '/..' . '/stripe/stripe-php/lib/Service/SkuService.php',
@ -1078,6 +1080,7 @@ class ComposerStaticInit6b03163c371c5541881b55b762b8c779
'Stripe\\Service\\WebhookEndpointService' => __DIR__ . '/..' . '/stripe/stripe-php/lib/Service/WebhookEndpointService.php',
'Stripe\\SetupAttempt' => __DIR__ . '/..' . '/stripe/stripe-php/lib/SetupAttempt.php',
'Stripe\\SetupIntent' => __DIR__ . '/..' . '/stripe/stripe-php/lib/SetupIntent.php',
'Stripe\\ShippingRate' => __DIR__ . '/..' . '/stripe/stripe-php/lib/ShippingRate.php',
'Stripe\\Sigma\\ScheduledQueryRun' => __DIR__ . '/..' . '/stripe/stripe-php/lib/Sigma/ScheduledQueryRun.php',
'Stripe\\SingletonApiResource' => __DIR__ . '/..' . '/stripe/stripe-php/lib/SingletonApiResource.php',
'Stripe\\Source' => __DIR__ . '/..' . '/stripe/stripe-php/lib/Source.php',

View File

@ -30,7 +30,7 @@
"symfony/phpunit-bridge": "^4.2 || ^5",
"phpstan/phpstan": "^0.12.55",
"psr/log": "^1.0",
"symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
"symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
},
"autoload": {
"psr-4": {

View File

@ -1,7 +1,7 @@
##
## Bundle of CA Root Certificates
##
## Certificate data from Mozilla as of: Tue May 25 03:12:05 2021 GMT
## Certificate data from Mozilla as of: Tue Oct 26 03:12:05 2021 GMT
##
## This is a bundle of X.509 certificates of public Certificate Authorities
## (CA). These were automatically extracted from Mozilla's root certificates
@ -14,7 +14,7 @@
## Just configure this file as the SSLCACertificateFile.
##
## Conversion done with mk-ca-bundle.pl version 1.28.
## SHA256: e292bd4e2d500c86df45b830d89417be5c42ee670408f1d2c454c63d8a782865
## SHA256: bb36818a81feaa4cca61101e6d6276cd09e972efcb08112dfed846918ca41d7f
##
@ -156,38 +156,6 @@ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
-----END CERTIFICATE-----
QuoVadis Root CA
================
-----BEGIN CERTIFICATE-----
MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
5nrQNiOKSnQ2+Q==
-----END CERTIFICATE-----
QuoVadis Root CA 2
==================
-----BEGIN CERTIFICATE-----
@ -275,26 +243,6 @@ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
FL39vmwLAw==
-----END CERTIFICATE-----
Sonera Class 2 Root CA
======================
-----BEGIN CERTIFICATE-----
MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
llpwrN9M
-----END CERTIFICATE-----
XRamp Global CA Root
====================
-----BEGIN CERTIFICATE-----
@ -433,26 +381,6 @@ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
-----END CERTIFICATE-----
DST Root CA X3
==============
-----BEGIN CERTIFICATE-----
MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
-----END CERTIFICATE-----
SwissSign Gold CA - G2
======================
-----BEGIN CERTIFICATE-----
@ -1194,27 +1122,6 @@ OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
-----END CERTIFICATE-----
Trustis FPS Root CA
===================
-----BEGIN CERTIFICATE-----
MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
iB6XzCGcKQENZetX2fNXlrtIzYE=
-----END CERTIFICATE-----
Buypass Class 2 Root CA
=======================
-----BEGIN CERTIFICATE-----
@ -3136,3 +3043,190 @@ gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk
vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+
CAezNIm8BZ/3Hobui3A=
-----END CERTIFICATE-----
GLOBALTRUST 2020
================
-----BEGIN CERTIFICATE-----
MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx
IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT
VCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYxMDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAh
BgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAy
MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWi
D59bRatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9ZYybNpyrO
VPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3QWPKzv9pj2gOlTblzLmM
CcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPwyJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCm
fecqQjuCgGOlYx8ZzHyyZqjC0203b+J+BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKA
A1GqtH6qRNdDYfOiaxaJSaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9OR
JitHHmkHr96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj04KlG
DfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9MedKZssCz3AwyIDMvU
clOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIwq7ejMZdnrY8XD2zHc+0klGvIg5rQ
mjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1Ud
IwQYMBaAFNwuH9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA
VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJCXtzoRlgHNQIw
4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd6IwPS3BD0IL/qMy/pJTAvoe9
iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS
8cE54+X1+NZK3TTN+2/BT+MAi1bikvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2
HcqtbepBEX4tdJP7wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxS
vTOBTI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6CMUO+1918
oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn4rnvyOL2NSl6dPrFf4IF
YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl
gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg==
-----END CERTIFICATE-----
ANF Secure Server Root CA
=========================
-----BEGIN CERTIFICATE-----
MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNVBAUTCUc2MzI4
NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lv
bjEUMBIGA1UECxMLQU5GIENBIFJhaXoxIjAgBgNVBAMTGUFORiBTZWN1cmUgU2VydmVyIFJvb3Qg
Q0EwHhcNMTkwOTA0MTAwMDM4WhcNMzkwODMwMTAwMDM4WjCBhDESMBAGA1UEBRMJRzYzMjg3NTEw
MQswCQYDVQQGEwJFUzEnMCUGA1UEChMeQU5GIEF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uMRQw
EgYDVQQLEwtBTkYgQ0EgUmFpejEiMCAGA1UEAxMZQU5GIFNlY3VyZSBTZXJ2ZXIgUm9vdCBDQTCC
AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvrayvmZFSVgpCjcqQZAZ2cC4Ffc0m6p6zz
BE57lgvsEeBbphzOG9INgxwruJ4dfkUyYA8H6XdYfp9qyGFOtibBTI3/TO80sh9l2Ll49a2pcbnv
T1gdpd50IJeh7WhM3pIXS7yr/2WanvtH2Vdy8wmhrnZEE26cLUQ5vPnHO6RYPUG9tMJJo8gN0pcv
B2VSAKduyK9o7PQUlrZXH1bDOZ8rbeTzPvY1ZNoMHKGESy9LS+IsJJ1tk0DrtSOOMspvRdOoiXse
zx76W0OLzc2oD2rKDF65nkeP8Nm2CgtYZRczuSPkdxl9y0oukntPLxB3sY0vaJxizOBQ+OyRp1RM
VwnVdmPF6GUe7m1qzwmd+nxPrWAI/VaZDxUse6mAq4xhj0oHdkLePfTdsiQzW7i1o0TJrH93PB0j
7IKppuLIBkwC/qxcmZkLLxCKpvR/1Yd0DVlJRfbwcVw5Kda/SiOL9V8BY9KHcyi1Swr1+KuCLH5z
JTIdC2MKF4EA/7Z2Xue0sUDKIbvVgFHlSFJnLNJhiQcND85Cd8BEc5xEUKDbEAotlRyBr+Qc5RQe
8TZBAQIvfXOn3kLMTOmJDVb3n5HUA8ZsyY/b2BzgQJhdZpmYgG4t/wHFzstGH6wCxkPmrqKEPMVO
Hj1tyRRM4y5Bu8o5vzY8KhmqQYdOpc5LMnndkEl/AgMBAAGjYzBhMB8GA1UdIwQYMBaAFJxf0Gxj
o1+TypOYCK2Mh6UsXME3MB0GA1UdDgQWBBScX9BsY6Nfk8qTmAitjIelLFzBNzAOBgNVHQ8BAf8E
BAMCAYYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEATh65isagmD9uw2nAalxJ
UqzLK114OMHVVISfk/CHGT0sZonrDUL8zPB1hT+L9IBdeeUXZ701guLyPI59WzbLWoAAKfLOKyzx
j6ptBZNscsdW699QIyjlRRA96Gejrw5VD5AJYu9LWaL2U/HANeQvwSS9eS9OICI7/RogsKQOLHDt
dD+4E5UGUcjohybKpFtqFiGS3XNgnhAY3jyB6ugYw3yJ8otQPr0R4hUDqDZ9MwFsSBXXiJCZBMXM
5gf0vPSQ7RPi6ovDj6MzD8EpTBNO2hVWcXNyglD2mjN8orGoGjR0ZVzO0eurU+AagNjqOknkJjCb
5RyKqKkVMoaZkgoQI1YS4PbOTOK7vtuNknMBZi9iPrJyJ0U27U1W45eZ/zo1PqVUSlJZS2Db7v54
EX9K3BR5YLZrZAPbFYPhor72I5dQ8AkzNqdxliXzuUJ92zg/LFis6ELhDtjTO0wugumDLmsx2d1H
hk9tl5EuT+IocTUW0fJz/iUrB0ckYyfI+PbZa/wSMVYIwFNCr5zQM378BvAxRAMU8Vjq8moNqRGy
g77FGr8H6lnco4g175x2MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3
r5+qPeoott7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw=
-----END CERTIFICATE-----
Certum EC-384 CA
================
-----BEGIN CERTIFICATE-----
MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ
TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy
dGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2
MDcyNDU0WhcNNDMwMzI2MDcyNDU0WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERh
dGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
GTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATEKI6rGFtq
vm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7TmFy8as10CW4kjPMIRBSqn
iBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68KjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
VR0OBBYEFI0GZnQkdjrzife81r1HfS+8EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo
ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0
QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k=
-----END CERTIFICATE-----
Certum Trusted Root CA
======================
-----BEGIN CERTIFICATE-----
MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6MQswCQYDVQQG
EwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0g
Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0Ew
HhcNMTgwMzE2MTIxMDEzWhcNNDMwMzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMY
QXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBB
dXRob3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEB
AQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZn0EGze2jusDbCSzBfN8p
fktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/qp1x4EaTByIVcJdPTsuclzxFUl6s1wB52
HO8AU5853BSlLCIls3Jy/I2z5T4IHhQqNwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2
fJmItdUDmj0VDT06qKhF8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGt
g/BKEiJ3HAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGamqi4
NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi7VdNIuJGmj8PkTQk
fVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSFytKAQd8FqKPVhJBPC/PgP5sZ0jeJ
P/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0PqafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSY
njYJdmZm/Bo/6khUHL4wvYBQv3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHK
HRzQ+8S1h9E6Tsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1
vALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQADggIBAEii1QAL
LtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4WxmB82M+w85bj/UvXgF2Ez8s
ALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvozMrnadyHncI013nR03e4qllY/p0m+jiGPp2K
h2RX5Rc64vmNueMzeMGQ2Ljdt4NR5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8
CYyqOhNf6DR5UMEQGfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA
4kZf5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq0Uc9Nneo
WWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7DP78v3DSk+yshzWePS/Tj
6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTMqJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmT
OPQD8rv7gmsHINFSH5pkAnuYZttcTVoP0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZck
bxJF0WddCajJFdr60qZfE2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb
-----END CERTIFICATE-----
TunTrust Root CA
================
-----BEGIN CERTIFICATE-----
MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQELBQAwYTELMAkG
A1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUgQ2VydGlmaWNhdGlvbiBFbGVj
dHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJvb3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQw
NDI2MDg1NzU2WjBhMQswCQYDVQQGEwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBD
ZXJ0aWZpY2F0aW9uIEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIw
DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZn56eY+hz
2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd2JQDoOw05TDENX37Jk0b
bjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgFVwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7
NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZGoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAd
gjH8KcwAWJeRTIAAHDOFli/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViW
VSHbhlnUr8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2eY8f
Tpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIbMlEsPvLfe/ZdeikZ
juXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISgjwBUFfyRbVinljvrS5YnzWuioYas
DXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwS
VXAkPcvCFDVDXSdOvsC9qnyW5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI
04Y+oXNZtPdEITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0
90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+zxiD2BkewhpMl
0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYuQEkHDVneixCwSQXi/5E/S7fd
Ao74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRY
YdZ2vyJ/0Adqp2RT8JeNnYA/u8EH22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJp
adbGNjHh/PqAulxPxOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65x
xBzndFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5Xc0yGYuP
jCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7bnV2UqL1g52KAdoGDDIzM
MEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQCvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9z
ZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZHu/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3r
AZ3r2OvEhJn7wAzMMujjd9qDRIueVSjAi1jTkD5OGwDxFa2DK5o=
-----END CERTIFICATE-----
HARICA TLS RSA Root CA 2021
===========================
-----BEGIN CERTIFICATE-----
MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQG
EwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
cyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0EgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUz
OFoXDTQ1MDIxMzEwNTUzN1owbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRl
bWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNB
IFJvb3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569lmwVnlskN
JLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE4VGC/6zStGndLuwRo0Xu
a2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uva9of08WRiFukiZLRgeaMOVig1mlDqa2Y
Ulhu2wr7a89o+uOkXjpFc5gH6l8Cct4MpbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K
5FrZx40d/JiZ+yykgmvwKh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEv
dmn8kN3bLW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcYAuUR
0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqBAGMUuTNe3QvboEUH
GjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYqE613TBoYm5EPWNgGVMWX+Ko/IIqm
haZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHrW2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQ
CPxrvrNQKlr9qEgYRtaQQJKQCoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8G
A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE
AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAUX15QvWiWkKQU
EapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3f5Z2EMVGpdAgS1D0NTsY9FVq
QRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxajaH6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxD
QpSbIPDRzbLrLFPCU3hKTwSUQZqPJzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcR
j88YxeMn/ibvBZ3PzzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5
vZStjBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0/L5H9MG0
qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pTBGIBnfHAT+7hOtSLIBD6
Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79aPib8qXPMThcFarmlwDB31qlpzmq6YR/
PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YWxw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnn
kf3/W9b3raYvAwtt41dU63ZTGI0RmLo=
-----END CERTIFICATE-----
HARICA TLS ECC Root CA 2021
===========================
-----BEGIN CERTIFICATE-----
MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH
UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD
QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX
DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj
IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv
b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l
AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b
ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW
0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi
rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw
CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps
-----END CERTIFICATE-----

View File

@ -108,7 +108,7 @@ class CaBundle
return self::$caPath = $caBundle;
}
if ($caBundle && self::caDirUsable($caBundle)) {
if ($caBundle && self::caDirUsable($caBundle, $logger)) {
return self::$caPath = $caBundle;
}
}
@ -335,19 +335,97 @@ EOT;
/**
* @param string|false $certFile
* @param LoggerInterface|null $logger
* @return bool
*/
private static function caFileUsable($certFile, LoggerInterface $logger = null)
{
return $certFile && @is_file($certFile) && @is_readable($certFile) && static::validateCaFile($certFile, $logger);
return $certFile
&& static::isFile($certFile, $logger)
&& static::isReadable($certFile, $logger)
&& static::validateCaFile($certFile, $logger);
}
/**
* @param string|false $certDir
* @param LoggerInterface|null $logger
* @return bool
*/
private static function caDirUsable($certDir)
private static function caDirUsable($certDir, LoggerInterface $logger = null)
{
return $certDir && @is_dir($certDir) && @is_readable($certDir) && glob($certDir . '/*');
return $certDir
&& static::isDir($certDir, $logger)
&& static::isReadable($certDir, $logger)
&& static::glob($certDir . '/*', $logger);
}
/**
* @param string $certFile
* @param LoggerInterface|null $logger
* @return bool
*/
private static function isFile($certFile, LoggerInterface $logger = null)
{
$isFile = @is_file($certFile);
if (!$isFile && $logger) {
$logger->debug(sprintf('Checked CA file %s does not exist or it is not a file.', $certFile));
}
return $isFile;
}
/**
* @param string $certDir
* @param LoggerInterface|null $logger
* @return bool
*/
private static function isDir($certDir, LoggerInterface $logger = null)
{
$isDir = @is_dir($certDir);
if (!$isDir && $logger) {
$logger->debug(sprintf('Checked directory %s does not exist or it is not a directory.', $certDir));
}
return $isDir;
}
/**
* @param string $certFileOrDir
* @param LoggerInterface|null $logger
* @return bool
*/
private static function isReadable($certFileOrDir, LoggerInterface $logger = null)
{
$isReadable = @is_readable($certFileOrDir);
if (!$isReadable && $logger) {
$logger->debug(sprintf('Checked file or directory %s is not readable.', $certFileOrDir));
}
return $isReadable;
}
/**
* @param string $pattern
* @param LoggerInterface|null $logger
* @return bool
*/
private static function glob($pattern, LoggerInterface $logger = null)
{
$certs = glob($pattern);
if ($certs === false) {
if ($logger) {
$logger->debug(sprintf("An error occurred while trying to find certificates for pattern: %s", $pattern));
}
return false;
}
if (count($certs) === 0) {
if ($logger) {
$logger->debug(sprintf("No CA files found for pattern: %s", $pattern));
}
return false;
}
return true;
}
}

View File

@ -2,17 +2,17 @@
"packages": [
{
"name": "composer/ca-bundle",
"version": "1.2.10",
"version_normalized": "1.2.10.0",
"version": "1.3.1",
"version_normalized": "1.3.1.0",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
"reference": "9fdb22c2e97a614657716178093cd1da90a64aa8"
"reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/9fdb22c2e97a614657716178093cd1da90a64aa8",
"reference": "9fdb22c2e97a614657716178093cd1da90a64aa8",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
"reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
"shasum": ""
},
"require": {
@ -24,9 +24,9 @@
"phpstan/phpstan": "^0.12.55",
"psr/log": "^1.0",
"symfony/phpunit-bridge": "^4.2 || ^5",
"symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0"
"symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
},
"time": "2021-06-07T13:58:28+00:00",
"time": "2021-10-28T20:44:15+00:00",
"type": "library",
"extra": {
"branch-alias": {
@ -61,7 +61,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
"source": "https://github.com/composer/ca-bundle/tree/1.2.10"
"source": "https://github.com/composer/ca-bundle/tree/1.3.1"
},
"funding": [
{
@ -155,17 +155,17 @@
},
{
"name": "geoip2/geoip2",
"version": "v2.11.0",
"version_normalized": "2.11.0.0",
"version": "v2.12.2",
"version_normalized": "2.12.2.0",
"source": {
"type": "git",
"url": "https://github.com/maxmind/GeoIP2-php.git",
"reference": "d01be5894a5c1a3381c58c9b1795cd07f96c30f7"
"reference": "83adb44ac4b9553d36b579a14673ed124583082f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/d01be5894a5c1a3381c58c9b1795cd07f96c30f7",
"reference": "d01be5894a5c1a3381c58c9b1795cd07f96c30f7",
"url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/83adb44ac4b9553d36b579a14673ed124583082f",
"reference": "83adb44ac4b9553d36b579a14673ed124583082f",
"shasum": ""
},
"require": {
@ -175,11 +175,12 @@
"php": ">=7.2"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "2.*",
"friendsofphp/php-cs-fixer": "3.*",
"phpstan/phpstan": "*",
"phpunit/phpunit": "^8.0 || ^9.0",
"squizlabs/php_codesniffer": "3.*"
},
"time": "2020-10-01T18:48:34+00:00",
"time": "2021-11-30T18:15:25+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -207,6 +208,10 @@
"geolocation",
"maxmind"
],
"support": {
"issues": "https://github.com/maxmind/GeoIP2-php/issues",
"source": "https://github.com/maxmind/GeoIP2-php/tree/v2.12.2"
},
"install-path": "../geoip2/geoip2"
},
{
@ -281,17 +286,17 @@
},
{
"name": "guzzlehttp/promises",
"version": "1.4.1",
"version_normalized": "1.4.1.0",
"version": "1.5.1",
"version_normalized": "1.5.1.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
"reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d"
"reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d",
"reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d",
"url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
"reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
"shasum": ""
},
"require": {
@ -300,11 +305,11 @@
"require-dev": {
"symfony/phpunit-bridge": "^4.4 || ^5.1"
},
"time": "2021-03-07T09:25:29+00:00",
"time": "2021-10-22T20:56:57+00:00",
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
"dev-master": "1.5-dev"
}
},
"installation-source": "dist",
@ -321,31 +326,64 @@
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
},
{
"name": "Tobias Schultze",
"email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion"
}
],
"description": "Guzzle promises library",
"keywords": [
"promise"
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
"source": "https://github.com/guzzle/promises/tree/1.5.1"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
"type": "tidelift"
}
],
"install-path": "../guzzlehttp/promises"
},
{
"name": "guzzlehttp/psr7",
"version": "1.8.2",
"version_normalized": "1.8.2.0",
"version": "1.8.3",
"version_normalized": "1.8.3.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
"reference": "dc960a912984efb74d0a90222870c72c87f10c91"
"reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91",
"reference": "dc960a912984efb74d0a90222870c72c87f10c91",
"url": "https://api.github.com/repos/guzzle/psr7/zipball/1afdd860a2566ed3c2b0b4a3de6e23434a79ec85",
"reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85",
"shasum": ""
},
"require": {
@ -363,7 +401,7 @@
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"time": "2021-04-26T09:17:50+00:00",
"time": "2021-10-05T13:56:00+00:00",
"type": "library",
"extra": {
"branch-alias": {
@ -384,13 +422,34 @@
"MIT"
],
"authors": [
{
"name": "Graham Campbell",
"email": "hello@gjcampbell.co.uk",
"homepage": "https://github.com/GrahamCampbell"
},
{
"name": "Michael Dowling",
"email": "mtdowling@gmail.com",
"homepage": "https://github.com/mtdowling"
},
{
"name": "George Mponos",
"email": "gmponos@gmail.com",
"homepage": "https://github.com/gmponos"
},
{
"name": "Tobias Nyholm",
"email": "tobias.nyholm@gmail.com",
"homepage": "https://github.com/Nyholm"
},
{
"name": "Márk Sági-Kazár",
"email": "mark.sagikazar@gmail.com",
"homepage": "https://github.com/sagikazarmark"
},
{
"name": "Tobias Schultze",
"email": "webmaster@tubo-world.de",
"homepage": "https://github.com/Tobion"
}
],
@ -405,21 +464,39 @@
"uri",
"url"
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
"source": "https://github.com/guzzle/psr7/tree/1.8.3"
},
"funding": [
{
"url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
"url": "https://github.com/Nyholm",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
"type": "tidelift"
}
],
"install-path": "../guzzlehttp/psr7"
},
{
"name": "maxmind-db/reader",
"version": "v1.10.1",
"version_normalized": "1.10.1.0",
"version": "v1.11.0",
"version_normalized": "1.11.0.0",
"source": {
"type": "git",
"url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git",
"reference": "569bd44d97d30a4ec12c7793a33004a76d4caf18"
"reference": "b1f3c0699525336d09cc5161a2861268d9f2ae5b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/569bd44d97d30a4ec12c7793a33004a76d4caf18",
"reference": "569bd44d97d30a4ec12c7793a33004a76d4caf18",
"url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/b1f3c0699525336d09cc5161a2861268d9f2ae5b",
"reference": "b1f3c0699525336d09cc5161a2861268d9f2ae5b",
"shasum": ""
},
"require": {
@ -429,7 +506,7 @@
"ext-maxminddb": "<1.10.1,>=2.0.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "*",
"friendsofphp/php-cs-fixer": "3.*",
"php-coveralls/php-coveralls": "^2.1",
"phpstan/phpstan": "*",
"phpunit/phpcov": ">=6.0.0",
@ -441,7 +518,7 @@
"ext-gmp": "bcmath or gmp is required for decoding larger integers with the pure PHP decoder",
"ext-maxminddb": "A C-based database decoder that provides significantly faster lookups"
},
"time": "2021-04-14T17:49:35+00:00",
"time": "2021-10-18T15:23:10+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -469,6 +546,10 @@
"geolocation",
"maxmind"
],
"support": {
"issues": "https://github.com/maxmind/MaxMind-DB-Reader-php/issues",
"source": "https://github.com/maxmind/MaxMind-DB-Reader-php/tree/v1.11.0"
},
"install-path": "../maxmind-db/reader"
},
{
@ -718,26 +799,26 @@
},
{
"name": "paypal/paypal-checkout-sdk",
"version": "1.0.1",
"version_normalized": "1.0.1.0",
"version": "1.0.2",
"version_normalized": "1.0.2.0",
"source": {
"type": "git",
"url": "https://github.com/paypal/Checkout-PHP-SDK.git",
"reference": "ed6a55075448308b87a8b59dcb7fedf04a048cb1"
"reference": "19992ce7051ff9e47e643f28abb8cc1b3e5f1812"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paypal/Checkout-PHP-SDK/zipball/ed6a55075448308b87a8b59dcb7fedf04a048cb1",
"reference": "ed6a55075448308b87a8b59dcb7fedf04a048cb1",
"url": "https://api.github.com/repos/paypal/Checkout-PHP-SDK/zipball/19992ce7051ff9e47e643f28abb8cc1b3e5f1812",
"reference": "19992ce7051ff9e47e643f28abb8cc1b3e5f1812",
"shasum": ""
},
"require": {
"paypal/paypalhttp": "1.0.0"
"paypal/paypalhttp": "1.0.1"
},
"require-dev": {
"phpunit/phpunit": "^5.7"
},
"time": "2019-11-07T23:16:44+00:00",
"time": "2021-09-21T20:57:38+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -766,21 +847,24 @@
"rest",
"sdk"
],
"support": {
"source": "https://github.com/paypal/Checkout-PHP-SDK/tree/1.0.2"
},
"install-path": "../paypal/paypal-checkout-sdk"
},
{
"name": "paypal/paypalhttp",
"version": "1.0.0",
"version_normalized": "1.0.0.0",
"version": "1.0.1",
"version_normalized": "1.0.1.0",
"source": {
"type": "git",
"url": "https://github.com/paypal/paypalhttp_php.git",
"reference": "1ad9b846a046f09d6135cbf2cbaa7701bbc630a3"
"reference": "7b09c89c80828e842c79230e7f156b61fbb68d25"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paypal/paypalhttp_php/zipball/1ad9b846a046f09d6135cbf2cbaa7701bbc630a3",
"reference": "1ad9b846a046f09d6135cbf2cbaa7701bbc630a3",
"url": "https://api.github.com/repos/paypal/paypalhttp_php/zipball/7b09c89c80828e842c79230e7f156b61fbb68d25",
"reference": "7b09c89c80828e842c79230e7f156b61fbb68d25",
"shasum": ""
},
"require": {
@ -790,7 +874,7 @@
"phpunit/phpunit": "^5.7",
"wiremock-php/wiremock-php": "1.43.2"
},
"time": "2019-11-06T21:27:12+00:00",
"time": "2021-09-14T21:35:26+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -808,21 +892,25 @@
"homepage": "https://github.com/paypal/paypalhttp_php/contributors"
}
],
"support": {
"issues": "https://github.com/paypal/paypalhttp_php/issues",
"source": "https://github.com/paypal/paypalhttp_php/tree/1.0.1"
},
"install-path": "../paypal/paypalhttp"
},
{
"name": "phpmailer/phpmailer",
"version": "v6.5.1",
"version_normalized": "6.5.1.0",
"version": "v6.5.3",
"version_normalized": "6.5.3.0",
"source": {
"type": "git",
"url": "https://github.com/PHPMailer/PHPMailer.git",
"reference": "dd803df5ad7492e1b40637f7ebd258fee5ca7355"
"reference": "baeb7cde6b60b1286912690ab0693c7789a31e71"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/dd803df5ad7492e1b40637f7ebd258fee5ca7355",
"reference": "dd803df5ad7492e1b40637f7ebd258fee5ca7355",
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/baeb7cde6b60b1286912690ab0693c7789a31e71",
"reference": "baeb7cde6b60b1286912690ab0693c7789a31e71",
"shasum": ""
},
"require": {
@ -849,7 +937,7 @@
"stevenmaguire/oauth2-microsoft": "Needed for Microsoft XOAUTH2 authentication",
"symfony/polyfill-mbstring": "To support UTF-8 if the Mbstring PHP extension is not enabled (^1.2)"
},
"time": "2021-08-18T09:14:16+00:00",
"time": "2021-11-25T16:34:11+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@ -881,7 +969,7 @@
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
"support": {
"issues": "https://github.com/PHPMailer/PHPMailer/issues",
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.1"
"source": "https://github.com/PHPMailer/PHPMailer/tree/v6.5.3"
},
"funding": [
{
@ -1125,17 +1213,17 @@
},
{
"name": "stripe/stripe-php",
"version": "v7.94.0",
"version_normalized": "7.94.0.0",
"version": "v7.105.0",
"version_normalized": "7.105.0.0",
"source": {
"type": "git",
"url": "https://github.com/stripe/stripe-php.git",
"reference": "03cd6b5c1c4fc9087ddd1dd046457bff274294d6"
"reference": "3a926610ca772aa7519fb132c88a6e7472788d90"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/stripe/stripe-php/zipball/03cd6b5c1c4fc9087ddd1dd046457bff274294d6",
"reference": "03cd6b5c1c4fc9087ddd1dd046457bff274294d6",
"url": "https://api.github.com/repos/stripe/stripe-php/zipball/3a926610ca772aa7519fb132c88a6e7472788d90",
"reference": "3a926610ca772aa7519fb132c88a6e7472788d90",
"shasum": ""
},
"require": {
@ -1145,13 +1233,12 @@
"php": ">=5.6.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "2.17.1",
"php-coveralls/php-coveralls": "^2.1",
"phpunit/phpunit": "^5.7",
"squizlabs/php_codesniffer": "^3.3",
"symfony/process": "~3.4"
"friendsofphp/php-cs-fixer": "3.2.1",
"phpstan/phpstan": "^1.2",
"phpunit/phpunit": "^5.7 || ^9.0",
"squizlabs/php_codesniffer": "^3.3"
},
"time": "2021-08-19T14:15:27+00:00",
"time": "2021-12-06T22:51:55+00:00",
"type": "library",
"extra": {
"branch-alias": {
@ -1183,7 +1270,7 @@
],
"support": {
"issues": "https://github.com/stripe/stripe-php/issues",
"source": "https://github.com/stripe/stripe-php/tree/v7.94.0"
"source": "https://github.com/stripe/stripe-php/tree/v7.105.0"
},
"install-path": "../stripe/stripe-php"
},

View File

@ -5,7 +5,7 @@
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'reference' => '7dadd6ede285708f874a020c0152511e73fbf4b2',
'reference' => '01747093b15bd2fd1afc5757a1466d4c4bf1dd3d',
'name' => '1ka/1ka.si',
'dev' => false,
),
@ -16,16 +16,16 @@
'type' => 'project',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'reference' => '7dadd6ede285708f874a020c0152511e73fbf4b2',
'reference' => '01747093b15bd2fd1afc5757a1466d4c4bf1dd3d',
'dev_requirement' => false,
),
'composer/ca-bundle' => array(
'pretty_version' => '1.2.10',
'version' => '1.2.10.0',
'pretty_version' => '1.3.1',
'version' => '1.3.1.0',
'type' => 'library',
'install_path' => __DIR__ . '/./ca-bundle',
'aliases' => array(),
'reference' => '9fdb22c2e97a614657716178093cd1da90a64aa8',
'reference' => '4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b',
'dev_requirement' => false,
),
'fgrosse/phpasn1' => array(
@ -38,12 +38,12 @@
'dev_requirement' => false,
),
'geoip2/geoip2' => array(
'pretty_version' => 'v2.11.0',
'version' => '2.11.0.0',
'pretty_version' => 'v2.12.2',
'version' => '2.12.2.0',
'type' => 'library',
'install_path' => __DIR__ . '/../geoip2/geoip2',
'aliases' => array(),
'reference' => 'd01be5894a5c1a3381c58c9b1795cd07f96c30f7',
'reference' => '83adb44ac4b9553d36b579a14673ed124583082f',
'dev_requirement' => false,
),
'guzzlehttp/guzzle' => array(
@ -56,30 +56,30 @@
'dev_requirement' => false,
),
'guzzlehttp/promises' => array(
'pretty_version' => '1.4.1',
'version' => '1.4.1.0',
'pretty_version' => '1.5.1',
'version' => '1.5.1.0',
'type' => 'library',
'install_path' => __DIR__ . '/../guzzlehttp/promises',
'aliases' => array(),
'reference' => '8e7d04f1f6450fef59366c399cfad4b9383aa30d',
'reference' => 'fe752aedc9fd8fcca3fe7ad05d419d32998a06da',
'dev_requirement' => false,
),
'guzzlehttp/psr7' => array(
'pretty_version' => '1.8.2',
'version' => '1.8.2.0',
'pretty_version' => '1.8.3',
'version' => '1.8.3.0',
'type' => 'library',
'install_path' => __DIR__ . '/../guzzlehttp/psr7',
'aliases' => array(),
'reference' => 'dc960a912984efb74d0a90222870c72c87f10c91',
'reference' => '1afdd860a2566ed3c2b0b4a3de6e23434a79ec85',
'dev_requirement' => false,
),
'maxmind-db/reader' => array(
'pretty_version' => 'v1.10.1',
'version' => '1.10.1.0',
'pretty_version' => 'v1.11.0',
'version' => '1.11.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../maxmind-db/reader',
'aliases' => array(),
'reference' => '569bd44d97d30a4ec12c7793a33004a76d4caf18',
'reference' => 'b1f3c0699525336d09cc5161a2861268d9f2ae5b',
'dev_requirement' => false,
),
'maxmind/web-service-common' => array(
@ -119,30 +119,30 @@
'dev_requirement' => false,
),
'paypal/paypal-checkout-sdk' => array(
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'pretty_version' => '1.0.2',
'version' => '1.0.2.0',
'type' => 'library',
'install_path' => __DIR__ . '/../paypal/paypal-checkout-sdk',
'aliases' => array(),
'reference' => 'ed6a55075448308b87a8b59dcb7fedf04a048cb1',
'reference' => '19992ce7051ff9e47e643f28abb8cc1b3e5f1812',
'dev_requirement' => false,
),
'paypal/paypalhttp' => array(
'pretty_version' => '1.0.0',
'version' => '1.0.0.0',
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'type' => 'library',
'install_path' => __DIR__ . '/../paypal/paypalhttp',
'aliases' => array(),
'reference' => '1ad9b846a046f09d6135cbf2cbaa7701bbc630a3',
'reference' => '7b09c89c80828e842c79230e7f156b61fbb68d25',
'dev_requirement' => false,
),
'phpmailer/phpmailer' => array(
'pretty_version' => 'v6.5.1',
'version' => '6.5.1.0',
'pretty_version' => 'v6.5.3',
'version' => '6.5.3.0',
'type' => 'library',
'install_path' => __DIR__ . '/../phpmailer/phpmailer',
'aliases' => array(),
'reference' => 'dd803df5ad7492e1b40637f7ebd258fee5ca7355',
'reference' => 'baeb7cde6b60b1286912690ab0693c7789a31e71',
'dev_requirement' => false,
),
'psr/http-message' => array(
@ -188,12 +188,12 @@
'dev_requirement' => false,
),
'stripe/stripe-php' => array(
'pretty_version' => 'v7.94.0',
'version' => '7.94.0.0',
'pretty_version' => 'v7.105.0',
'version' => '7.105.0.0',
'type' => 'library',
'install_path' => __DIR__ . '/../stripe/stripe-php',
'aliases' => array(),
'reference' => '03cd6b5c1c4fc9087ddd1dd046457bff274294d6',
'reference' => '3a926610ca772aa7519fb132c88a6e7472788d90',
'dev_requirement' => false,
),
'symfony/polyfill-intl-idn' => array(

View File

@ -0,0 +1,7 @@
version: 2
updates:
- package-ecosystem: composer
directory: "/"
schedule:
interval: daily
open-pull-requests-limit: 10

View File

@ -0,0 +1,32 @@
name: PHP Lints
on:
push:
pull_request:
schedule:
- cron: '55 3 * * SUN'
jobs:
run:
runs-on: ubuntu-latest
name: "PHP Lints"
steps:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: 7.4
- name: Checkout
uses: actions/checkout@v2
- name: Install dependencies
run: composer install --no-progress --prefer-dist --optimize-autoloader
- name: Lint with php-cs-fixer
run: vendor/bin/php-cs-fixer fix --verbose --diff --dry-run
- name: Lint with phpcs
run: vendor/bin/phpcs --standard=PSR2 src/
- name: Lint with phpstan
run: vendor/bin/phpstan analyze

View File

@ -0,0 +1,36 @@
name: PHPUnit
on:
push:
pull_request:
schedule:
- cron: '55 3 * * SUN'
jobs:
run:
runs-on: ${{ matrix.operating-system }}
strategy:
matrix:
operating-system: [ubuntu-latest, windows-latest, macos-latest]
php-versions: ['7.2', '7.3', '7.4', '8.0']
name: "PHP ${{ matrix.php-versions }} test on ${{ matrix.operating-system }}"
steps:
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-versions }}
tools: composer
- name: Setup problem matchers for PHPUnit
run: echo "::add-matcher::${{ runner.tool_cache }}/phpunit.json"
- name: Checkout
uses: actions/checkout@v2
with:
submodules: true
- name: Install dependencies
run: composer install --no-progress --prefer-dist --optimize-autoloader
- name: Test with phpunit
run: vendor/bin/phpunit --coverage-text

45
vendor/geoip2/geoip2/.php-cs-fixer.php vendored Normal file
View File

@ -0,0 +1,45 @@
<?php
$config = new PhpCsFixer\Config();
return $config
->setRiskyAllowed(true)
->setRules([
'@Symfony' => true,
'@Symfony:risky' => true,
'@PhpCsFixer' => true,
'@PSR1' => true,
'@PSR2' => true,
'@PSR12' => true,
'@PSR12:risky' => true,
'array_syntax' => ['syntax' => 'short'],
'combine_consecutive_unsets' => true,
'concat_space' => [ 'spacing' => 'one'],
'explicit_string_variable' => false,
'fopen_flags' => ['b_mode' => true],
'heredoc_to_nowdoc' => true,
'increment_style' => false,
'list_syntax' => ['syntax' => 'short'],
'multiline_whitespace_before_semicolons' => false,
'no_unreachable_default_argument_value' => true,
'no_useless_else' => true,
'no_useless_return' => true,
'ordered_imports' => true,
'php_unit_strict' => true,
'php_unit_test_class_requires_covers' => true,
'phpdoc_add_missing_param_annotation' => true,
'phpdoc_no_alias_tag' => false,
'phpdoc_order' => true,
'phpdoc_types_order' => ['sort_algorithm' => 'alpha', 'null_adjustment' => 'always_last'],
'semicolon_after_instruction' => true,
'single_line_throw' => false,
'strict_comparison' => true,
'strict_param' => true,
'yoda_style' => false,
])
->setFinder(
PhpCsFixer\Finder::create()
->exclude('ext')
->in(__DIR__)
)
;

View File

@ -1,6 +1,39 @@
CHANGELOG
=========
2.12.2 (2021-11-30)
-------------------
* The `geoip2.phar` now works when included from another directory.
Reported by Eduardo Ruiz. GitHub #179.
2.12.1 (2021-11-23)
-------------------
* The `geoip2.phar` included in 2.12.0 would only work in CLI applications.
This was due to a change in Box 3.x. The Phar should now work in all
applications. This release only affects users of the Phar file.
2.12.0 (2021-11-18)
-------------------
* Support for mobile country code (MCC) and mobile network codes (MNC) was
added for the GeoIP2 ISP and Enterprise databases as well as the GeoIP2
City and Insights web services. `$mobileCountryCode` and
`$mobileNetworkCode` properties were added to `GeoIp2\Model\Isp`
for the GeoIP2 ISP database and `GeoIp2\Record\Traits` for the Enterprise
database and the GeoIP2 City and Insights web services. We expect this data
to be available by late January, 2022.
* `geoip2.phar` is now generated with Box 3.x.
2.11.0 (2020-10-01)
-------------------
* IMPORTANT: PHP 7.2 or greater is now required.
* Added the `isResidentialProxy` property to `GeoIp2\Model\AnonymousIP` and
`GeoIp2\Record\Traits`.
* Additional type hints have been added.
2.10.0 (2019-12-12)
-------------------

View File

@ -2,11 +2,9 @@
## Description ##
This package provides an API for the GeoIP2
[web services](https://dev.maxmind.com/geoip/geoip2/web-services) and
[databases](https://dev.maxmind.com/geoip/geoip2/downloadable). The API also
works with the free
[GeoLite2 databases](https://dev.maxmind.com/geoip/geoip2/geolite2/).
This package provides an API for the GeoIP2 and GeoLite2
[web services](https://dev.maxmind.com/geoip/docs/web-services?lang=en) and
[databases](https://dev.maxmind.com/geoip/docs/databases?lang=en).
## Install via Composer ##
@ -26,7 +24,7 @@ You should now have the file `composer.phar` in your project directory.
Run in your project root:
```
```sh
php composer.phar require geoip2/geoip2:~2.0
```
@ -265,13 +263,33 @@ print($record->network . "\n"); // '128.101.101.101/32'
### Usage ###
To use this API, you must create a new `\GeoIp2\WebService\Client`
object with your `$accountId` and `$licenseKey`, then you call the method
corresponding to a specific end point, passing it the IP address you want to
look up.
object with your `$accountId` and `$licenseKey`:
If the request succeeds, the method call will return a model class for the end
point you called. This model in turn contains multiple record classes, each of
which represents part of the data returned by the web service.
```php
$client = new Client(42, 'abcdef123456');
```
You may also call the constructor with additional arguments. The third argument
specifies the language preferences when using the `->name` method on the model
classes that this client creates. The fourth argument is additional options
such as `host` and `timeout`.
For instance, to call the GeoLite2 web service instead of GeoIP2 Precision:
```php
$client = new Client(42, 'abcdef123456', ['en'], ['host' => 'geolite.info']);
```
After creating the client, you may now call the method corresponding to a
specific endpoint with the IP address to look up, e.g.:
```php
$record = $client->city('128.101.101.101');
```
If the request succeeds, the method call will return a model class for the
endpoint you called. This model in turn contains multiple record classes, each
of which represents part of the data returned by the web service.
If there is an error, a structured exception is thrown.
@ -286,7 +304,8 @@ use GeoIp2\WebService\Client;
// This creates a Client object that can be reused across requests.
// Replace "42" with your account ID and "license_key" with your license
// key.
// key. Set the "host" to "geolite.info" in the fourth argument options
// array to use the GeoLite2 web service instead of GeoIP2 Precision.
$client = new Client(42, 'abcdef123456');
// Replace "city" with the method corresponding to the web service that
@ -336,7 +355,7 @@ Because of these factors, it is possible for any end point to return a record
where some or all of the attributes are unpopulated.
See the
[GeoIP2 Precision web service docs](https://dev.maxmind.com/geoip/geoip2/web-services)
[GeoIP2 Precision web service docs](https://dev.maxmind.com/geoip/docs/web-services?lang=en)
for details on what data each end point may return.
The only piece of data which is always returned is the `ipAddress`
@ -386,7 +405,7 @@ to the client API, please see
## Requirements ##
This library requires PHP 5.6 or greater.
This library requires PHP 7.2 or greater.
This library also relies on the [MaxMind DB Reader](https://github.com/maxmind/MaxMind-DB-Reader-php).
@ -404,6 +423,6 @@ The GeoIP2 PHP API uses [Semantic Versioning](https://semver.org/).
## Copyright and License ##
This software is Copyright (c) 2013-2019 by MaxMind, Inc.
This software is Copyright (c) 2013-2020 by MaxMind, Inc.
This is free software, licensed under the Apache License, Version 2.0.

View File

@ -13,15 +13,16 @@
}
],
"require": {
"maxmind-db/reader": "~1.5",
"maxmind/web-service-common": "~0.6",
"php": ">=5.6",
"maxmind-db/reader": "~1.8",
"maxmind/web-service-common": "~0.8",
"php": ">=7.2",
"ext-json": "*"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "2.*",
"phpunit/phpunit": "5.*",
"squizlabs/php_codesniffer": "3.*"
"friendsofphp/php-cs-fixer": "3.*",
"phpunit/phpunit": "^8.0 || ^9.0",
"squizlabs/php_codesniffer": "3.*",
"phpstan/phpstan": "*"
},
"autoload": {
"psr-4": {

View File

@ -10,7 +10,8 @@ $reader = new Reader('GeoIP2-City.mmdb');
$count = 500000;
$startTime = microtime(true);
for ($i = 0; $i < $count; ++$i) {
$ip = long2ip(rand(0, pow(2, 32) - 1));
$ip = long2ip(rand(0, 2 ** 32 - 1));
try {
$t = $reader->city($ip);
} catch (\GeoIp2\Exception\AddressNotFoundException $e) {

7
vendor/geoip2/geoip2/phpstan.neon vendored Normal file
View File

@ -0,0 +1,7 @@
parameters:
level: 6
paths:
- src
- tests
checkMissingIterableValueType: false

View File

@ -1,8 +1,11 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Database;
use GeoIp2\Exception\AddressNotFoundException;
use GeoIp2\Model\AbstractModel;
use GeoIp2\ProviderInterface;
use MaxMind\Db\Reader as DbReader;
use MaxMind\Db\Reader\InvalidDatabaseException;
@ -33,8 +36,17 @@ use MaxMind\Db\Reader\InvalidDatabaseException;
*/
class Reader implements ProviderInterface
{
/**
* @var DbReader
*/
private $dbReader;
/**
* @var string
*/
private $dbType;
/**
* @var array<string>
*/
private $locales;
/**
@ -48,8 +60,8 @@ class Reader implements ProviderInterface
* is corrupt or invalid
*/
public function __construct(
$filename,
$locales = ['en']
string $filename,
array $locales = ['en']
) {
$this->dbReader = new DbReader($filename);
$this->dbType = $this->dbReader->metadata()->databaseType;
@ -65,11 +77,10 @@ class Reader implements ProviderInterface
* not in the database
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*
* @return \GeoIp2\Model\City
*/
public function city($ipAddress)
public function city(string $ipAddress): \GeoIp2\Model\City
{
// @phpstan-ignore-next-line
return $this->modelFor('City', 'City', $ipAddress);
}
@ -82,11 +93,10 @@ class Reader implements ProviderInterface
* not in the database
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*
* @return \GeoIp2\Model\Country
*/
public function country($ipAddress)
public function country(string $ipAddress): \GeoIp2\Model\Country
{
// @phpstan-ignore-next-line
return $this->modelFor('Country', 'Country', $ipAddress);
}
@ -99,11 +109,10 @@ class Reader implements ProviderInterface
* not in the database
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*
* @return \GeoIp2\Model\AnonymousIp
*/
public function anonymousIp($ipAddress)
public function anonymousIp(string $ipAddress): \GeoIp2\Model\AnonymousIp
{
// @phpstan-ignore-next-line
return $this->flatModelFor(
'AnonymousIp',
'GeoIP2-Anonymous-IP',
@ -120,11 +129,10 @@ class Reader implements ProviderInterface
* not in the database
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*
* @return \GeoIp2\Model\Asn
*/
public function asn($ipAddress)
public function asn(string $ipAddress): \GeoIp2\Model\Asn
{
// @phpstan-ignore-next-line
return $this->flatModelFor(
'Asn',
'GeoLite2-ASN',
@ -141,11 +149,10 @@ class Reader implements ProviderInterface
* not in the database
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*
* @return \GeoIp2\Model\ConnectionType
*/
public function connectionType($ipAddress)
public function connectionType(string $ipAddress): \GeoIp2\Model\ConnectionType
{
// @phpstan-ignore-next-line
return $this->flatModelFor(
'ConnectionType',
'GeoIP2-Connection-Type',
@ -162,11 +169,10 @@ class Reader implements ProviderInterface
* not in the database
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*
* @return \GeoIp2\Model\Domain
*/
public function domain($ipAddress)
public function domain(string $ipAddress): \GeoIp2\Model\Domain
{
// @phpstan-ignore-next-line
return $this->flatModelFor(
'Domain',
'GeoIP2-Domain',
@ -183,11 +189,10 @@ class Reader implements ProviderInterface
* not in the database
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*
* @return \GeoIp2\Model\Enterprise
*/
public function enterprise($ipAddress)
public function enterprise(string $ipAddress): \GeoIp2\Model\Enterprise
{
// @phpstan-ignore-next-line
return $this->modelFor('Enterprise', 'Enterprise', $ipAddress);
}
@ -200,11 +205,10 @@ class Reader implements ProviderInterface
* not in the database
* @throws \MaxMind\Db\Reader\InvalidDatabaseException if the database
* is corrupt or invalid
*
* @return \GeoIp2\Model\Isp
*/
public function isp($ipAddress)
public function isp(string $ipAddress): \GeoIp2\Model\Isp
{
// @phpstan-ignore-next-line
return $this->flatModelFor(
'Isp',
'GeoIP2-ISP',
@ -212,9 +216,9 @@ class Reader implements ProviderInterface
);
}
private function modelFor($class, $type, $ipAddress)
private function modelFor(string $class, string $type, string $ipAddress): AbstractModel
{
list($record, $prefixLen) = $this->getRecord($class, $type, $ipAddress);
[$record, $prefixLen] = $this->getRecord($class, $type, $ipAddress);
$record['traits']['ip_address'] = $ipAddress;
$record['traits']['prefix_len'] = $prefixLen;
@ -224,9 +228,9 @@ class Reader implements ProviderInterface
return new $class($record, $this->locales);
}
private function flatModelFor($class, $type, $ipAddress)
private function flatModelFor(string $class, string $type, string $ipAddress): AbstractModel
{
list($record, $prefixLen) = $this->getRecord($class, $type, $ipAddress);
[$record, $prefixLen] = $this->getRecord($class, $type, $ipAddress);
$record['ip_address'] = $ipAddress;
$record['prefix_len'] = $prefixLen;
@ -235,15 +239,16 @@ class Reader implements ProviderInterface
return new $class($record);
}
private function getRecord($class, $type, $ipAddress)
private function getRecord(string $class, string $type, string $ipAddress): array
{
if (strpos($this->dbType, $type) === false) {
$method = lcfirst($class);
throw new \BadMethodCallException(
"The $method method cannot be used to open a {$this->dbType} database"
);
}
list($record, $prefixLen) = $this->dbReader->getWithPrefixLen($ipAddress);
[$record, $prefixLen] = $this->dbReader->getWithPrefixLen($ipAddress);
if ($record === null) {
throw new AddressNotFoundException(
"The address $ipAddress is not in the database."
@ -272,7 +277,7 @@ class Reader implements ProviderInterface
*
* @return \MaxMind\Db\Reader\Metadata object for the database
*/
public function metadata()
public function metadata(): DbReader\Metadata
{
return $this->dbReader->metadata();
}
@ -280,7 +285,7 @@ class Reader implements ProviderInterface
/**
* Closes the GeoIP2 database and returns the resources to the system.
*/
public function close()
public function close(): void
{
$this->dbReader->close();
}

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Exception;
/**

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Exception;
/**

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Exception;
/**

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Exception;
/**
@ -9,13 +11,15 @@ class HttpException extends GeoIp2Exception
{
/**
* The URI queried.
*
* @var string
*/
public $uri;
public function __construct(
$message,
$httpStatus,
$uri,
string $message,
int $httpStatus,
string $uri,
\Exception $previous = null
) {
$this->uri = $uri;

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Exception;
/**
@ -10,14 +12,16 @@ class InvalidRequestException extends HttpException
{
/**
* The code returned by the MaxMind web service.
*
* @var string
*/
public $error;
public function __construct(
$message,
$error,
$httpStatus,
$uri,
string $message,
string $error,
int $httpStatus,
string $uri,
\Exception $previous = null
) {
$this->error = $error;

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Exception;
/**

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Model;
/**
@ -7,14 +9,15 @@ namespace GeoIp2\Model;
*/
abstract class AbstractModel implements \JsonSerializable
{
/**
* @var array<string, mixed>
*/
protected $raw;
/**
* @ignore
*
* @param mixed $raw
*/
public function __construct($raw)
public function __construct(array $raw)
{
$this->raw = $raw;
}
@ -22,9 +25,9 @@ abstract class AbstractModel implements \JsonSerializable
/**
* @ignore
*
* @param mixed $field
* @return mixed
*/
protected function get($field)
protected function get(string $field)
{
if (isset($this->raw[$field])) {
return $this->raw[$field];
@ -39,12 +42,12 @@ abstract class AbstractModel implements \JsonSerializable
/**
* @ignore
*
* @param mixed $attr
* @return mixed
*/
public function __get($attr)
public function __get(string $attr)
{
if ($attr !== 'instance' && property_exists($this, $attr)) {
return $this->$attr;
return $this->{$attr};
}
throw new \RuntimeException("Unknown attribute: $attr");
@ -52,15 +55,13 @@ abstract class AbstractModel implements \JsonSerializable
/**
* @ignore
*
* @param mixed $attr
*/
public function __isset($attr)
public function __isset(string $attr): bool
{
return $attr !== 'instance' && isset($this->$attr);
return $attr !== 'instance' && isset($this->{$attr});
}
public function jsonSerialize()
public function jsonSerialize(): array
{
return $this->raw;
}

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Model;
use GeoIp2\Util;
@ -17,6 +19,8 @@ use GeoIp2\Util;
* to a hosting or VPN provider (see description of isAnonymousVpn property).
* @property-read bool $isPublicProxy This is true if the IP address belongs to
* a public proxy.
* @property-read bool $isResidentialProxy This is true if the IP address is
* on a suspected anonymizing network and belongs to a residential ISP.
* @property-read bool $isTorExitNode This is true if the IP address is a Tor
* exit node.
* @property-read string $ipAddress The IP address that the data in the model is
@ -27,20 +31,43 @@ use GeoIp2\Util;
*/
class AnonymousIp extends AbstractModel
{
/**
* @var bool
*/
protected $isAnonymous;
/**
* @var bool
*/
protected $isAnonymousVpn;
/**
* @var bool
*/
protected $isHostingProvider;
/**
* @var bool
*/
protected $isPublicProxy;
/**
* @var bool
*/
protected $isResidentialProxy;
/**
* @var bool
*/
protected $isTorExitNode;
/**
* @var string
*/
protected $ipAddress;
/**
* @var string
*/
protected $network;
/**
* @ignore
*
* @param mixed $raw
*/
public function __construct($raw)
public function __construct(array $raw)
{
parent::__construct($raw);
@ -48,6 +75,7 @@ class AnonymousIp extends AbstractModel
$this->isAnonymousVpn = $this->get('is_anonymous_vpn');
$this->isHostingProvider = $this->get('is_hosting_provider');
$this->isPublicProxy = $this->get('is_public_proxy');
$this->isResidentialProxy = $this->get('is_residential_proxy');
$this->isTorExitNode = $this->get('is_tor_exit_node');
$ipAddress = $this->get('ip_address');
$this->ipAddress = $ipAddress;

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Model;
use GeoIp2\Util;
@ -20,17 +22,27 @@ use GeoIp2\Util;
*/
class Asn extends AbstractModel
{
/**
* @var int|null
*/
protected $autonomousSystemNumber;
/**
* @var string|null
*/
protected $autonomousSystemOrganization;
/**
* @var string
*/
protected $ipAddress;
/**
* @var string
*/
protected $network;
/**
* @ignore
*
* @param mixed $raw
*/
public function __construct($raw)
public function __construct(array $raw)
{
parent::__construct($raw);
$this->autonomousSystemNumber = $this->get('autonomous_system_number');

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Model;
/**
@ -7,7 +9,7 @@ namespace GeoIp2\Model;
*
* The only difference between the City and Insights model classes is which
* fields in each record may be populated. See
* https://dev.maxmind.com/geoip/geoip2/web-services for more details.
* https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details.
*
* @property-read \GeoIp2\Record\City $city City data for the requested IP
* address.
@ -31,28 +33,33 @@ class City extends Country
{
/**
* @ignore
*
* @var \GeoIp2\Record\City
*/
protected $city;
/**
* @ignore
*
* @var \GeoIp2\Record\Location
*/
protected $location;
/**
* @ignore
*
* @var \GeoIp2\Record\Postal
*/
protected $postal;
/**
* @ignore
*
* @var array<\GeoIp2\Record\Subdivision>
*/
protected $subdivisions = [];
/**
* @ignore
*
* @param mixed $raw
* @param mixed $locales
*/
public function __construct($raw, $locales = ['en'])
public function __construct(array $raw, array $locales = ['en'])
{
parent::__construct($raw, $locales);
@ -63,29 +70,28 @@ class City extends Country
$this->createSubdivisions($raw, $locales);
}
private function createSubdivisions($raw, $locales)
private function createSubdivisions(array $raw, array $locales): void
{
if (!isset($raw['subdivisions'])) {
return;
}
foreach ($raw['subdivisions'] as $sub) {
array_push(
$this->subdivisions,
$this->subdivisions[] =
new \GeoIp2\Record\Subdivision($sub, $locales)
);
;
}
}
/**
* @ignore
*
* @param mixed $attr
* @return mixed
*/
public function __get($attr)
public function __get(string $attr)
{
if ($attr === 'mostSpecificSubdivision') {
return $this->$attr();
return $this->{$attr}();
}
return parent::__get($attr);
@ -93,10 +99,8 @@ class City extends Country
/**
* @ignore
*
* @param mixed $attr
*/
public function __isset($attr)
public function __isset(string $attr): bool
{
if ($attr === 'mostSpecificSubdivision') {
// We always return a mostSpecificSubdivision, even if it is the
@ -107,7 +111,7 @@ class City extends Country
return parent::__isset($attr);
}
private function mostSpecificSubdivision()
private function mostSpecificSubdivision(): \GeoIp2\Record\Subdivision
{
return empty($this->subdivisions) ?
new \GeoIp2\Record\Subdivision([], $this->locales) :

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Model;
use GeoIp2\Util;
@ -18,16 +20,23 @@ use GeoIp2\Util;
*/
class ConnectionType extends AbstractModel
{
/**
* @var string|null
*/
protected $connectionType;
/**
* @var string
*/
protected $ipAddress;
/**
* @var string
*/
protected $network;
/**
* @ignore
*
* @param mixed $raw
*/
public function __construct($raw)
public function __construct(array $raw)
{
parent::__construct($raw);

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Model;
/**
@ -7,7 +9,7 @@ namespace GeoIp2\Model;
*
* The only difference between the City and Insights model classes is which
* fields in each record may be populated. See
* https://dev.maxmind.com/geoip/geoip2/web-services for more details.
* https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details.
*
* @property-read \GeoIp2\Record\Continent $continent Continent data for the
* requested IP address.
@ -26,24 +28,43 @@ namespace GeoIp2\Model;
* the represented country differs from the country.
* @property-read \GeoIp2\Record\Traits $traits Data for the traits of the
* requested IP address.
* @property-read array $raw The raw data from the web service.
*/
class Country extends AbstractModel
{
/**
* @var \GeoIp2\Record\Continent
*/
protected $continent;
/**
* @var \GeoIp2\Record\Country
*/
protected $country;
/**
* @var array<string>
*/
protected $locales;
/**
* @var \GeoIp2\Record\MaxMind
*/
protected $maxmind;
/**
* @var \GeoIp2\Record\Country
*/
protected $registeredCountry;
/**
* @var \GeoIp2\Record\RepresentedCountry
*/
protected $representedCountry;
/**
* @var \GeoIp2\Record\Traits
*/
protected $traits;
/**
* @ignore
*
* @param mixed $raw
* @param mixed $locales
*/
public function __construct($raw, $locales = ['en'])
public function __construct(array $raw, array $locales = ['en'])
{
parent::__construct($raw);

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Model;
use GeoIp2\Util;
@ -18,16 +20,23 @@ use GeoIp2\Util;
*/
class Domain extends AbstractModel
{
/**
* @var string|null
*/
protected $domain;
/**
* @var string
*/
protected $ipAddress;
/**
* @var string
*/
protected $network;
/**
* @ignore
*
* @param mixed $raw
*/
public function __construct($raw)
public function __construct(array $raw)
{
parent::__construct($raw);

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Model;
/**
@ -7,7 +9,7 @@ namespace GeoIp2\Model;
*
* The only difference between the City and Enterprise model classes is which
* fields in each record may be populated. See
* https://dev.maxmind.com/geoip/geoip2/web-services for more details.
* https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details.
*/
class Enterprise extends City
{

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Model;
/**
@ -7,7 +9,7 @@ namespace GeoIp2\Model;
*
* The only difference between the City and Insights model classes is which
* fields in each record may be populated. See
* https://dev.maxmind.com/geoip/geoip2/web-services for more details.
* https://dev.maxmind.com/geoip/docs/web-services?lang=en for more details.
*/
class Insights extends City
{

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Model;
use GeoIp2\Util;
@ -14,6 +16,12 @@ use GeoIp2\Util;
* address.
* @property-read string|null $isp The name of the ISP associated with the IP
* address.
* @property-read string|null $mobileCountryCode The [mobile country code
* (MCC)](https://en.wikipedia.org/wiki/Mobile_country_code) associated with
* the IP address and ISP.
* @property-read string|null $mobileNetworkCode The [mobile network code
* (MNC)](https://en.wikipedia.org/wiki/Mobile_country_code) associated with
* the IP address and ISP.
* @property-read string|null $organization The name of the organization associated
* with the IP address.
* @property-read string $ipAddress The IP address that the data in the model is
@ -24,25 +32,51 @@ use GeoIp2\Util;
*/
class Isp extends AbstractModel
{
/**
* @var int|null
*/
protected $autonomousSystemNumber;
/**
* @var string|null
*/
protected $autonomousSystemOrganization;
/**
* @var string|null
*/
protected $isp;
/**
* @var string|null
*/
protected $mobileCountryCode;
/**
* @var string|null
*/
protected $mobileNetworkCode;
/**
* @var string|null
*/
protected $organization;
/**
* @var string
*/
protected $ipAddress;
/**
* @var string
*/
protected $network;
/**
* @ignore
*
* @param mixed $raw
*/
public function __construct($raw)
public function __construct(array $raw)
{
parent::__construct($raw);
$this->autonomousSystemNumber = $this->get('autonomous_system_number');
$this->autonomousSystemOrganization =
$this->get('autonomous_system_organization');
$this->isp = $this->get('isp');
$this->mobileCountryCode = $this->get('mobile_country_code');
$this->mobileNetworkCode = $this->get('mobile_network_code');
$this->organization = $this->get('organization');
$ipAddress = $this->get('ip_address');

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2;
interface ProviderInterface
@ -9,12 +11,12 @@ interface ProviderInterface
*
* @return \GeoIp2\Model\Country a Country model for the requested IP address
*/
public function country($ipAddress);
public function country(string $ipAddress): Model\Country;
/**
* @param string $ipAddress an IPv4 or IPv6 address to lookup
*
* @return \GeoIp2\Model\City a City model for the requested IP address
*/
public function city($ipAddress);
public function city(string $ipAddress): Model\City;
}

View File

@ -1,18 +1,20 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Record;
abstract class AbstractPlaceRecord extends AbstractRecord
{
/**
* @var array<string>
*/
private $locales;
/**
* @ignore
*
* @param mixed $record
* @param mixed $locales
*/
public function __construct($record, $locales = ['en'])
public function __construct(?array $record, array $locales = ['en'])
{
$this->locales = $locales;
parent::__construct($record);
@ -21,9 +23,9 @@ abstract class AbstractPlaceRecord extends AbstractRecord
/**
* @ignore
*
* @param mixed $attr
* @return mixed
*/
public function __get($attr)
public function __get(string $attr)
{
if ($attr === 'name') {
return $this->name();
@ -34,28 +36,28 @@ abstract class AbstractPlaceRecord extends AbstractRecord
/**
* @ignore
*
* @param mixed $attr
*/
public function __isset($attr)
public function __isset(string $attr): bool
{
if ($attr === 'name') {
return $this->firstSetNameLocale() === null ? false : true;
return $this->firstSetNameLocale() !== null;
}
return parent::__isset($attr);
}
private function name()
private function name(): ?string
{
$locale = $this->firstSetNameLocale();
// @phpstan-ignore-next-line
return $locale === null ? null : $this->names[$locale];
}
private function firstSetNameLocale()
private function firstSetNameLocale(): ?string
{
foreach ($this->locales as $locale) {
// @phpstan-ignore-next-line
if (isset($this->names[$locale])) {
return $locale;
}

View File

@ -1,17 +1,20 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Record;
abstract class AbstractRecord implements \JsonSerializable
{
/**
* @var array<string, mixed>
*/
private $record;
/**
* @ignore
*
* @param mixed $record
*/
public function __construct($record)
public function __construct(?array $record)
{
$this->record = isset($record) ? $record : [];
}
@ -19,42 +22,45 @@ abstract class AbstractRecord implements \JsonSerializable
/**
* @ignore
*
* @param mixed $attr
* @return mixed
*/
public function __get($attr)
public function __get(string $attr)
{
// XXX - kind of ugly but greatly reduces boilerplate code
$key = $this->attributeToKey($attr);
if ($this->__isset($attr)) {
return $this->record[$key];
} elseif ($this->validAttribute($attr)) {
}
if ($this->validAttribute($attr)) {
if (preg_match('/^is_/', $key)) {
return false;
}
return null;
}
throw new \RuntimeException("Unknown attribute: $attr");
}
public function __isset($attr)
public function __isset(string $attr): bool
{
return $this->validAttribute($attr) &&
isset($this->record[$this->attributeToKey($attr)]);
return $this->validAttribute($attr)
&& isset($this->record[$this->attributeToKey($attr)]);
}
private function attributeToKey($attr)
private function attributeToKey(string $attr): string
{
return strtolower(preg_replace('/([A-Z])/', '_\1', $attr));
}
private function validAttribute($attr)
private function validAttribute(string $attr): bool
{
// @phpstan-ignore-next-line
return \in_array($attr, $this->validAttributes, true);
}
public function jsonSerialize()
public function jsonSerialize(): ?array
{
return $this->record;
}

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Record;
/**
@ -24,6 +26,8 @@ class City extends AbstractPlaceRecord
{
/**
* @ignore
*
* @var array<string>
*/
protected $validAttributes = ['confidence', 'geonameId', 'names'];
}

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Record;
/**
@ -23,6 +25,8 @@ class Continent extends AbstractPlaceRecord
{
/**
* @ignore
*
* @var array<string>
*/
protected $validAttributes = [
'code',

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Record;
/**
@ -29,6 +31,8 @@ class Country extends AbstractPlaceRecord
{
/**
* @ignore
*
* @var array<string>
*/
protected $validAttributes = [
'confidence',

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Record;
/**
@ -37,6 +39,8 @@ class Location extends AbstractRecord
{
/**
* @ignore
*
* @var array<string>
*/
protected $validAttributes = [
'averageIncome',

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Record;
/**
@ -14,6 +16,8 @@ class MaxMind extends AbstractRecord
{
/**
* @ignore
*
* @var array<string>
*/
protected $validAttributes = ['queriesRemaining'];
}

View File

@ -1,5 +1,7 @@
<?php
declare(strict_types=1);
namespace GeoIp2\Record;
/**
@ -21,6 +23,8 @@ class Postal extends AbstractRecord
{
/**
* @ignore
*
* @var array<string>
*/
protected $validAttributes = ['code', 'confidence'];
}

Some files were not shown because too many files have changed in this diff Show More