'/\+([\d]+)\s([\d]+)\s([\d\s]+)/',
function($m) {
return sprintf('%s-%s-%s', $m[1], $m[2], preg_replace('/[^0-9]+/', '', $m[3]));
},
$phoneUtil->format($No, \libphonenumber\PhoneNumberFormat::INTERNATIONAL)
);
}
throw new KOCommonException($Msg, 0);
return false;
} catch (\libphonenumber\NumberParseException $e) {
throw new KOCommonException($Msg, 0);
return false;
}
}
/* validate email
-- ------------------------------*/
public static function IsValidEmail($Email = ""){
global $__AdmPath;
if(false === (bool)Swift_Validate::email($Email)){
throw new KOCommonException(_("E-postadressen är ogiltig."), 0);
}
return true;
}
/* email missing
-- ------------------------------*/
public static function IsEmailMissing($Email = ""){
if(strlen($Email) === 0){
throw new KOCommonException(_("E-postadress saknas."), 0);
}
return true;
}
/* currency field
-- ------------------------------*/
public static function CurrencyField($Params = ""){
global $__CURRENCY;
$Curr = $__CURRENCY[SYSTEM_CURRENCY];
$Item = sprintf('
', $Curr['Symbol']);
if($Curr['SymbolBefore'] !== false)
$Item = sprintf('
', $Curr['Symbol']);
return sprintf($Item, $Params);
}
/* activity state array
-- ------------------------------*/
static function ArrActivityState(){
return array(
1 => _("Öppen för bokning"),
2 => _("Stängd"),
3 => _("Öppen med förtur"),
4 => _("Öppen med prova-på"),
);
}
static function SetGroupStatus($S){
$Status = self::ArrActivityState();
return (isset($Status[$S]) ? $Status[$S] : 'n/a');
}
/* gender array
-- ------------------------------*/
static function Gender(){
return array(
1 => _("Man"),
2 => _("Kvinna"),
);
}
/* yes/no array
-- ------------------------------*/
static function ArrYesNo(){
return array(
1 => _("Nej"),
2 => _("Ja"),
);
}
/* weekdays array
-- ------------------------------*/
static function Weekdays(){
return array(
1 => _("måndag"),
2 => _("tisdag"),
3 => _("onsdag"),
4 => _("torsdag"),
5 => _("fredag"),
6 => _("lördag"),
0 => _("söndag"),
);
}
/* weekdays short / sv array
-- ------------------------------*/
static function WeekdaysSv(){
return array(
1 => _("mån"),
2 => _("tis"),
3 => _("ons"),
4 => _("tor"),
5 => _("fre"),
6 => _("lör"),
7 => _("sön"),
);
}
/* weekdays short array
-- ------------------------------*/
static function WeekdaysAbbr(){
return array(
_('sön'),
_('mån'),
_('tis'),
_('ons'),
_('tor'),
_('fre'),
_('lör'),
);
}
/* months array
-- ------------------------------*/
static function Monthnames(){
return array(
_('januari'),
_('februari'),
_('mars'),
_('april'),
_('maj'),
_('juni'),
_('juli'),
_('augusti'),
_('september'),
_('oktober'),
_('november'),
_('december'),
);
}
/* occasion type array
-- ------------------------------*/
static function OccasionTypes(){
return array(
1 => _("Träning"),
11 => _("Landträning"),
2 => _("Match/Tävling/Cup"),
21 => _("Hemmamatch"),
22 => _("Bortamatch"),
3 => _("Möte"),
4 => _("Utbildning"),
5 => _("Läger"),
6 => _("Övrigt"),
7 => _("Årsmöte"),
8 => _("Styrelsemöte"),
9 => _("Kommittémöte"),
);
}
public static function EmailTemplates(){
return [
'ACCOUNT_ACTIVATION' => _('Kontoaktivering/glömt lösenord'),
'ACCOUNT_CREATE' => _('Välkomstmail/nytt konto'),
'ATTENDANCE_REMINDER' => _('Aktivitetstillfälle, orapporterad'),
'BLANK' => _('Tom mall'),
'COMPETITION_NOTIFY' => _('Tävlingsanmälan, bekräftelse'),
'COMPETITION_NOTIFY_CANCEL' => _('Tävlingsanmälan, avanmälan'),
'CONTACT_US' => _('Kontakta oss'),
'EMAIL_F=> 2000, 'height' => 800 ],
'news' => [ 'width' => 1200, 'height' => 630 ],
'school_level' => [ 'width' => 1200, 'height' => 630 ],
// 'coverphoto' => [ 'width' => 1920, 'height' => 630 ]
];
/* local api
-- -----------*/
if(!defined("KO_LOCAL_API_USER")) define("KO_LOCAL_API_USER", "KanslietAPI");
if(!defined("KO_LOCAL_API_PASS")) define("KO_LOCAL_API_PASS", "MyJD7a@s&x8zgF");
/* app
-- -----------*/
if(!defined('KO_APP_URI')) define("KO_APP_URI", "https://app.kanslietonline.se");
if(!defined('WU_APP_URI')) define("WU_APP_URI", "https://prod.weunite.app");
define("KO_FIREBASE_KEY", 'AAAAuyVcS40:APA91bHgP_l5wXTpfBgh8uqUSfMOOFMBznweD4VLpfN0xScbMHX0Wz0gVSBlr7ZuiX9mcblax7cU6gEPU3cCMMycryncZhtwQwLtkOF4RPUxRabFEp-FzSVIBB0rRXMODOnm7IEVnKKd'); // depricated
define('KO_FIREBASE_MESSAGE_URL', '192.168.137.70:8083/api/v1/firebase-msg/by-device');
/* e-post
-- -----------*/
define("KO_MAIL_FROM", "svara-ej@epost.kanslietonline.se");
define("KO_MAIL_HOST", "epost.kanslietonline.se:465");
define("KO_MAIL_AUTH", true);
define("KO_MAIL_USER", "svara-ej@epost.kanslietonline.se");
define("KO_MAIL_PASS", "arBiS&Wc5^KA7De2Z%J^C");
define("KO_MAIL_METH", "smtp");
define("KO_MAIL_SECURE", "tls");
/* newsletter
-- -----------*/
define("KO_NEWSLETTER_URI", "https://nyhetsbrev.kanslietonline.se");
define("KO_DRIFT_URL", "https://drift.kanslietonline.se/");
define("KO_CDN_URL", "https://cdn.kanslietonline.se/");
/* ocr
-- -----------*/
define('OCR_ACTIVATION_PASSWD', 'SkaffaOCRNU2015');
/* eventor
-- -----------*/
define('EVENTOR_API_KEY', '9a7ccda282b1483aa76d9f06b99ad7ad');
/* help desk
-- -----------*/
/* gamla
-- -----
define('LA_URL','https://support.weunite.club/');
define('LA_APIv1','UKCYheyViJFD3ZTkmyDZvbPbXZ5t02Cw');
define('LA_APIv3','9vlp9wsbsmhosz1wufa4e4yki99arurq');
define('LA_SSO','l4rwep68tjyvncwce9po35enixml3dvf');
define('LA_CHAT_ID', 'aemlexf1');
*/
/* nya
-- -----*/
define('LA_URL','https://support.weunite.club/'); // https://weunite.ladesk.com/
define('LA_APIv1','FHuajSGFxvQC5gHOX1Qb8Qrc3REFwPJS');
define('LA_APIv3','iwj09c8flz4scdisk0da9skbhmei45gp');
define('LA_SSO','jdf0xarg9y5uy13os02u0fa9sw7up2r8');
define('LA_CHAT_ID', 'cgo9pg9j');
//define('KO_HELPDESK','Kayako');
if(!defined('KO_HELPDESK')) define('KO_HELPDESK','LiveAgent');
/* bokningsbara resurser
-- ----------------------*/
$__global_resource_types = [
1 => 'Motorbåt',
2 => 'Segelbåt',
3 => 'Kanot',
];
$__Pensum_Gymn = [
'C' => 'Träning - fria volter oavsett redskap - ej tävling',
'TG' => 'Truppgymnastik',
'SA' => 'Aerobic Gymnastics',
'AG' => 'Artistisk Gymnastik',
'DR' => 'Drill',
'HR' => 'Hopprep',
'PK' => 'Parkour/tricking Tävling',
'RG' => 'Rytmisk Gymnastik',
'TM' => 'Trampolin',
];
$__IOSports = [
54 =>
array (
'name' => 'Akademisk Idrott',
'children' =>
array (
),
),
68 =>
array (
'name' => 'Amerikansk Fotboll',
'children' =>
array (
445 => 'Blank tills hösten 2021 (BB)',
448 => 'Blank tills hösten 2021 (SB)',
446 => 'Idrott Amerikansk fotboll ',
444 => 'Idrott Flaggfotboll',
447 => 'Idrott Landhockey',
),
),
1 =>
array (
'name' => 'Badminton',
'children' =>
array (
),
),
5 =>
array (
'name' => 'Bandy',
'children' =>
array (
),
),
26 =>
array (
'name' => 'Bangolf',
'children' =>
array (
),
),
55 =>
array (
'name' => 'Baseboll och Softboll',
'children' =>
array (
),
),
10 =>
array (
'name' => 'Basket',
'children' =>
array (
),
),
57 =>
array (
'name' => 'Biljard',
'children' =>
array (
),
),
9 =>
array (
'name' => 'Bilsport',
'children' =>
array (
),
),
8 =>
array (
'name' => 'Bordtennis',
'children' =>
array (
),
),
66 =>
array (
'name' => 'Boule',
'children' =>
array (
),
),
7 =>
array (
'name' => 'Bowling',
'children' =>
array (
),
),
15 =>
array (
'name' => 'Boxning',
'children' =>
array (
),
),
158 =>
array (
'name' => 'Bridge',
'children' =>
array (
),
),
16 =>
array (
'name' => 'Brottning',
'children' =>
array (
),
),
23 =>
array (
'name' => 'Budo & Kampsport',
'children' =>
array (
291 => 'Aikido',
414 => 'Allstyle',
388 => 'Armsport',
292 => 'Brasiliansk Jiu-Jitsu',
293 => 'Bujinkan',
294 => 'Capoeira',
413 => 'Defendo',
295 => 'Filippinska Kamparter',
296 => 'Glima',
343 => 'HEMA',
297 => 'Iaido',
298 => 'Jodo',
299 => 'Jujutsu',
421 => 'Kamponst',
396 => 'Kempo',
300 => 'Kendo',
301 => 'Kickboxning',
302 => 'Krav Maga',
303 => 'Kyokushin',
304 => 'Kyudo',
305 => 'MMA',
306 => 'Muaythai',
307 => 'Naginata',
345 => 'Sambo',
346 => 'Savate',
309 => 'Shorinjikempo',
310 => 'Submission Wrestling',
347 => 'Sumo',
344 => 'Systema',
311 => 'Taido',
312 => 'Wushu',
),
),
6 =>
array (
'name' => 'Bågskytte',
'children' =>
array (
321 => '3D',
367 => 'Arc-Trap',
366 => 'Beridet Bågskytte',
319 => 'Fält',
320 => 'Svensk Jakt',
317 => 'Tavla inne',
318 => 'Tavla ute',
),
),
13 =>
array (
'name' => 'Casting',
'children' =>
array (
),
),
422 =>
array (
'name' => 'Cheerleading',
'children' =>
array (
),
),
348 =>
array (
'name' => 'Cricket',
'children' =>
array (
),
),
11 =>
array (
'name' => 'Curling',
'children' =>
array (
355 => 'Rullstolscurlare',
),
),
19 =>
array (
'name' => 'Cykel',
'children' =>
array (
359 => 'BMX',
358 => 'Bancykel',
360 => 'Cykelcross',
361 => 'Landsväg',
362 => 'Mountainbike',
363 => 'Paracykel',
364 => 'Trial Cykel',
),
),
63 =>
array (
'name' => 'Danssport',
'children' =>
array (
322 => 'BRR',
397 => 'Disco',
398 => 'HipHop',
325 => 'Linedance',
323 => 'TIO',
),
),
97 =>
array (
'name' => 'Dart',
'children' =>
array (
),
),
67 =>
array (
'name' => 'Draghundsport',
'children' =>
array (
),
),
17 =>
array (
'name' => 'Dragkamp',
'children' =>
array (
),
),
41 =>
array (
'name' => 'Dövidrott',
'children' =>
array (
),
),
56 =>
array (
'name' => 'Flygsport',
'children' =>
array (
108 => 'Ballongflyg',
109 => 'Fallskärmshoppning',
106 => 'Hängflyg',
110 => 'Konstflyg',
85 => 'Modellflyg',
107 => 'Motorflyg',
400 => 'Multipla Flygsporter',
84 => 'Segelflyg',
88 => 'Skärmflyg',
),
),
2 =>
array (
'name' => 'Fotboll',
'children' =>
array (
426 => 'BeachSoccer',
425 => 'Futsal ( SvFF )',
),
),
21 =>
array (
'name' => 'Friidrott',
'children' =>
array (
),
),
46 =>
array (
'name' => 'Frisbee',
'children' =>
array (
390 => 'Allround',
393 => 'Discgolf',
394 => 'Ultimate',
),
),
24 =>
array (
'name' => 'Fäktning',
'children' =>
array (
),
),
18 =>
array (
'name' => 'Golf',
'children' =>
array (
),
),
25 =>
array (
'name' => 'Gymnastik',
'children' =>
array (
282 => 'Aerobic gymnastics',
406 => 'Alla kan gympa',
409 => 'Annan gymnastikverksamhet',
275 => 'Bamsegympa (licensierad)',
278 => 'Barn3 END ASC, `pm_parent`, `pm_order`
";
$query = "
SELECT
`pm_id`, `pm_parent`, `pm_name`, `pm_fee`
FROM `system_payment_method`
WHERE `pm_default` = 2
";
if((false === defined('PSP')) || (defined('PSP') && PSP === false)){
$query .= "
AND `pm_parent` = 0
";
}
/*
$query .= "
ORDER BY CASE
WHEN `pm_id` = 709 THEN 1
WHEN `pm_id` = 1 THEN 2
END ASC,
`pm_order`
";
*/
$query .= "
ORDER BY `pm_parent` DESC, `pm_order`
";
// echo sprintf('%s
', str_replace("\t","",$query));
$pst = $dbh->prepare($query);
$pst->execute();
if($pst->rowCount() !== 0){
$i = 0;
$i = 0;
$Parent = null;
$Data = array();
while($res = $pst->fetch(PDO::FETCH_ASSOC)){
$Data[$i] = array(
"Id" => (int)$res['pm_id'],
"Parent" => (int)$res['pm_parent'],
"Name" => $res['pm_name'],
"Fee" => 0,
);
if((int)$res['pm_fee'] !== 0)
$Data[$i]['Fee'] = $res['pm_fee'] + ($res['pm_fee'] * ($__NOTIFIES_VAT / 100));
$i++;
/*
if((false === defined('PSP') || (true === defined('PSP') && PSP === false)) && (int)$res['pm_parent'] !== 0) continue;
if($Parent != $res['pm_parent']){
if($Parent != null) $i++;
$Name = $PaymentGroups[$res['pm_parent']];
$Type[$res['pm_parent']]['Name'] = $Name;
}
if(!is_null($res['pm_custom']) && $res['pm_custom'] !== PSP) continue;
$Name = $res['pm_name'];
if(isset($PaymentNames[$res['pm_id']]))
$Name = $PaymentNames[$res['pm_id']];
$Type[$res['pm_parent']]['Types'][] = array(
"Id" => (int)$res['pm_id'],
"Parent" => (int)$res['pm_parent'],
"Name" => $Name . ($res['pm_fee'] != 0 ? " (+" . moneyFormat((string)$res['pm_fee'] + ($res['pm_fee'] * ($__NOTIFIES_VAT / 100))) . ")" : ""),
"Class" => post_slug($res['pm_name']),
"Selected" => ($res['pm_id'] == $Selected ? " selected" : "")
);
$Parent = $res['pm_parent'];
*/
}
return $Data;
}
$pst = null;
return false;
}
/* country list
-- ------------------------------*/
public static function Countries(){
$dbh = Database::getInstance();
$Data = array();
global $currentLanguage,$Phrases;
$query = "
SELECT
`area_code`, `iso_code`, `name`, `name_en`, IF(`iso_code` IN ('SE','DK','FI','NO'), 1, 0) `Scandinavia`
FROM `system_country`
ORDER BY CASE
WHEN `Scandinavia` = 1 THEN 0 ELSE 1 END,
CONVERT(`name` USING `latin1`) COLLATE `latin1_swedish_ci` ASC
";
$pst = $dbh->query($query);
if($pst->rowCount() === 0) return array();
$i = 0;
$Curr = -1;
while($res = $pst->fetch(PDO::FETCH_ASSOC)){
if($Curr !== (int)$res['Scandinavia']){
if($Curr !== -1) $i++;
$y = 0;
$Data[$i] = array(
"Label" => $Phrases[sprintf("LBL_COUNTRY_REGION_%d", $res['Scandinavia'])],
"List" => array(),
);
}
$Data[$i]['List'][$y] = array(
"iso" => $res['iso_code'],
"name" => $res['name'],
"code" => (int)$res['area_code'],
);
if($currentLanguage['Code'] !== 'sv')
$Data[$i]['List'][$y]['name'] = $res['name_en'];
$Curr = (int)$res['Scandinavia'];
$y++;
}
$pst = null;
return $Data;
}
/* country list 'flat'
-- ------------------------------*/
public static function CountriesFlat(){
$dbh = Database::getInstance();
$Data = array();
$query = "
SELECT
`area_code`, `iso_code`, `name`, `name_en`
FROM `system_country`
ORDER BY
CONVERT(`name` USING `latin1`) COLLATE `latin1_swedish_ci` ASC
";
$pst = $dbh->query($query);
if($pst->rowCount() === 0) return array();
$i = 0;
while($res = $pst->fetch(PDO::FETCH_ASSOC)){
$Data[$res['iso_code']] = $res['name'];
}
$pst = null;
return $Data;
}
/* roller
-- ------------------------------*/
public static function Roles(){
$dbh = Database::getInstance();
$Data = [];
$RFRoleTypeCatMapping = [ 0 => 12, 1 => 7 ];
$query = "SELECT `ID`, `Staff`, `Name`, `MemberFee`, `License`, `Invoice`, `Color`, `Props`, `Order` FROM `roles` ORDER BY `Staff`, `Order`";
foreach($dbh->query($query, PDO::FETCH_ASSOC) as $res){
$Removed = 0;
$RFRoleTypeCatId = $RFRoleTypeCatMapping[$res['Staff']];
if(!is_null($res['Props']) && false !== $P = @unserialize($res['Props'])){
if(isset($P['RFRoleTypeCategoryId'])) $RFRoleTypeCatId = $P['RFRoleTypeCategoryId'];
if(isset($P['Removed'])) $Removed = 1;
}
$Data[$res['Staff']][] = [ 'id' => (int)$res['ID'], 'staff' => (int)$res['Staff'] === 1, 'rf_role_type_cat_id' => $RFRoleTypeCatId, 'name' => $res['Name'], 'memberfee' => ((int)$res['MemberFee'] === 1), 'license' => ((int)$res['License'] === 1), 'invoice' => ((int)$res['Invoice'] === 1), 'color' => $res['Color'], 'order' => (int)$res['Order'], 'Removed' => $Removed ];
}
return $Data;
}
public static function IsSerialized($data){
// if it isn't a string, it isn't serialized
if ( !is_string( $data ) )
return false;
$data = trim( $data );
if ( 'N;' == $data )
return true;
if ( !preg_match( '/^([adObis]):/', $data, $badions ) )
return false;
switch ( $badions[1] ) {
case 'a' :
case 'O' :
case 's' :
if ( preg_match( "/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data ) )
return true;
break;
case 'b' :
case 'i' :
case 'd' :
if ( preg_match( "/^{$badions[1]}:[0-9.E-]+;\$/", $data ) )
return true;
break;
}
return false;
}
/* options
-- ----------*/
public static function get_option($option_name){
$dbh = Database::getInstance();
$pst = $dbh->prepare("SELECT `option_value` FROM `content_options` WHERE `option_name` = ?");
$pst->execute(array($option_name));
if($pst->rowCount() !== 0){
return @unserialize($pst->fetchColumn());
}
$pst = null;
return false;
}
public static function set_option($option_name, $data){
$dbh = Database::getInstance();
if(is_array($data) || is_object($data)){
if(false === $D = @serialize($data)) return false;
$option_data = $D;
}elseif(is_int($data)){
$option_data = (int)$data;
}elseif(is_null($data)){
$option_data = null;
}else{
$option_data = (string)$data;
}
$pst = $dbh->prepare("
INSERT INTO `content_options`
(`option_name`, `option_value`)
VALUES (:name, :content)
ON DUPLICATE KEY UPDATE
`option_value` = :content
");
$pst->execute(array(':name' => $option_name, ':content' => $option_data));
return $pst->rowCount() !== 0;
$pst = null;
}
}
Class KOCommonException extends Exception {
public function __construct($Msg) {
/* call the super class Exception constructor */
parent::__construct($Msg, 0);
}
}
/* tags system
-- -------------------*/
Class SectionTags {
/* lista
-- -------*/
public static function TagList($Selected = array()){
$dbh = Database::getInstance();
$Data = array(
array(
"MenuId" => 0,
"Section" => 0,
"Name" => _('Huvudsida'),
)
);
$pst = $dbh->prepare("
SELECT
`ID`, `Section`, `Name`
FROM `content_menu`
ORDER BY `Order` ASC
");
$pst->execute();
if($pst->rowCount() === 0) return false;
while($res = $pst->fetch(PDO::FETCH_ASSOC))
$Data[] = array(
"MenuId" => (int)$res['ID'],
"Section" => (int)$res['Section'],
"Name" => $res['Name'],
);
return $Data;
$pst = null;
}
/* hämta id
-- -------*/
public static function GetIds($Type = 'news', $Parent = 0){
$dbh = Database::getInstance();
$pst = $dbh->prepare("
SELECT
`SectionId`
FROM `content_tag`
WHERE `Type` = ?
AND `Parent` = ?
");
$pst->execute(array($Type, $Parent));
if($pst->rowCount() === 0) array();
$Data = array();
while($res = $pst->fetch(PDO::FETCH_ASSOC))
$Data[] = (int)$res['SectionId'];
return $Data;
$pst = null;
}
/* hämta name
-- -------*/
public static function GetNames($Type = 'news', $Parent = 0){
$dbh = Database::getInstance();
$pst = $dbh->prepare("
SELECT
IFNULL(`section_name`, 'Huvudsida') `section_name`
FROM `content_tag`
LEFT JOIN `school_section`
ON `SectionId` = `section_id`
WHERE `Type` = ?
AND `Parent` = ?
ORDER BY CONVERT(`section_name` USING `latin1`) COLLATE `latin1_swedish_ci`
");
$pst->execute(array($Type, $Parent));
if($pst->rowCount() === 0) return false;
$Data = array();
while($res = $pst->fetch(PDO::FETCH_ASSOC))
$Data[] = $res['section_name'];
return $Data;
$pst = null;
}
/* spara
-- -------*/
public static function Save($SectionIds = array(), $Type = 'news', $Parent = 0){
$dbh = Database::getInstance();
$pst = $dbh->prepare("
DELETE FROM `content_tag`
WHERE `Type` = ?
AND `Parent` = ?
");
$pst->execute(array($Type, $Parent));
$i = 0;
$pst = $dbh->prepare("
INSERT INTO `content_tag`
(`SectionId`, `Type`, `Parent`)
VALUES (?, ?, ?)
");
foreach($SectionIds as $Id){
// if((int)$Id === 0) continue;
$pst->execute(array($Id, $Type, $Parent));
$i += $pst->rowCount();
}
return ($i !== 0);
}
}