'/\+([\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_FOOTER' => _('E-postmall, fot'),
'EMAIL_HEADER' => _('E-postmall, huvud'),
'INVOICE_CREATED' => _('Fakturaavisering'),
'INVOICE_CREATED_CUSTOMFEE' => _('Fakturaavisering, enskild avgift'),
'INVOICE_PAYMENT_REGISTER' => _('Betalningsavisering'),
'NOTIFY_CHANGED' => _('Aktivitetsbokning, ändrad'),
'NOTIFY_CREATED' => _('Aktivitetsbokning, skapad'),
'GROUP_INVITATION' => _('Aktivitetsbokning, inbjudan'),
'OCCASION_INVITATION' => _('Aktivitetstillfälle, kallelse'),
'OCCASION_REMINDER' => _('Aktivitetstillfälle, kommande'),
'ORDER_CREATED' => _('Order, skapad'),
'ORDER_STATUS_CHANGED' => _('Order, ändrad'),
// 'USER_ACTIVATION' => _('Kontoaktivering, användare'),
];
}
/* datum
-- ----------*/
public static function DateRangeDT($start, $end){
try {
$Ds = new DateTime($start);
$De = new DateTime($end);
$Dt = false;
/* inte samma
-- ----------*/
if($Ds != $De){
/* samma dag
-- ----------*/
if($Ds->format('Ymd') === $De->format('Ymd')){
$Dt = [
'label' => _('Datum/tid'),
'date' => $Ds->format('l j M Y'),
'time' => sprintf('%s - %s', $Ds->format('H:i'), $De->format('H:i'))
];
if($Ds->format('Hi') == '0000'){
$Dt['time'] = null;
}elseif($De->format('Hi') == '0000'){
$Dt['time'] = $Ds->format('H:i');
}
/* inte samma dag
-- ----------*/
}elseif($Ds->format('Ymd') !== $De->format('Ymd')){
$STime = $Ds->format('H:i');
if($Ds->format('Hi') == '0000') $STime = null;
$ETime = $De->format('H:i');
if($De->format('Hi') == '0000') $ETime = null;
$Dt = [
[ 'label' => _('Startar'), 'date' => $Ds->format('l j M Y'), 'time' => $STime ],
[ 'label' => _('Slutar'), 'date' => $De->format('l j M Y'), 'time' => $ETime ],
];
/*
$Dt['date'] = sprintf('%s - %s', $Ds->format('l j M'), $De->format('l j M Y'));
$Dt['time'] = sprintf('%s - %s', $Ds->format('H:i'), $De->format('H:i'));
*/
/* samma månad
-- ----------*/
}elseif($Ds->format('Ym') === $De->format('Ym')){
}
}elseif($Ds == $De){
$Dt = [
'label' => _('Datum/tid'),
'date' => $Ds->format('l j M Y'),
'time' => $Ds->format('H:i')
];
if($Ds->format('Hi') == '0000'){
$Dt['time'] = null;
}
}
return $Dt;
} catch(Exception $e){
return false;
}
}
public static function DateRange($start, $end){
try {
$Ds = strtotime($start);
$De = strtotime($end);
$Dt = false;
/* inte samma
-- ----------*/
if($Ds != $De){
/* samma dag
-- ----------*/
if(date('Ymd', $Ds) === date('Ymd', $De)){
$Dt = [
'label' => _('Datum/tid'),
'date' => strftime(DATE_DAY_MONTH_YEAR, $Ds),
'time' => sprintf('%s - %s', strftime(DATE_HOUR_MINUTE, $Ds), strftime(DATE_HOUR_MINUTE, $De))
];
if(date('Hi', $Ds) === '0000'){
$Dt['time'] = null;
}elseif(date('Hi', $De) === '0000'){
$Dt['time'] = strftime(DATE_HOUR_MINUTE, $Ds);
}
/* inte samma dag
-- ----------*/
}elseif(date('Ymd', $Ds) !== date('Ymd', $De)){
$STime = strftime(DATE_HOUR_MINUTE, $Ds);
if(date('Hi', $Ds) === '0000') $STime = null;
$ETime = strftime(DATE_HOUR_MINUTE, $De);
if(date('Hi', $De) === '0000') $ETime = null;
$Dt = [
[ 'label' => _('Startar'), 'date' => strftime(DATE_DAY_MONTH_YEAR, $Ds), 'time' => $STime ],
[ 'label' => _('Slutar'), 'date' => strftime(DATE_DAY_MONTH_YEAR, $De), 'time' => $ETime ],
];
/* samma månad
-- ----------*/
// }elseif($Ds->format('Ym') === $De->format('Ym')){
}
}elseif($Ds == $De){
$Dt = [
'label' => _('Datum/tid'),
'date' => strftime(DATE_DAY_MONTH_YEAR, $Ds),
'time' => strftime(DATE_HOUR_MINUTE, $Ds)
];
if(date('Hi', $Ds) == '0000'){
$Dt['time'] = null;
}
}
return $Dt;
} catch(Exception $e){
return false;
}
}
static function SetOccasionType($T){
$Types = self::OccasionTypes();
return (isset($Types[$T]) ? $Types[$T] : 'n/a');
}
/* occasion status array
-- ------------------------------*/
static function OccasionStatus(){
return array(
0 => _("Ej rapporterad"),
1 => _("Rapporterad"),
2 => _("Låst"),
);
}
static function SetOccasionStatus($S){
$Status = self::OccasionStatus();
return (isset($Status[$S]) ? $Status[$S] : 'n/a');
}
/* invoice status array
-- ------------------------------*/
static function InvoiceStatus(){
return array(
1 => _("Skapad"),
2 => _("Betald"),
3 => _("Kvittad"),
);
}
static function SetInvoiceStatus($S){
$Status = self::InvoiceStatus();
return (isset($Status[$S]) ? $Status[$S] : 'n/a');
}
/* section settings
-- ------------------------------*/
static function SectionSettings($Id){
$dbh = Database::getInstance();
$query = "
SELECT
`ID`, `Section`, `Name`,
`section_id`, `section_name`, `section_autotag`, `IOLok`, `sport`, `section_props`
FROM `content_menu`
INNER JOIN `school_section`
ON `Section` = `section_id`
WHERE `ID` = :SectionId
LIMIT 1
";
$pst = $dbh->prepare($query);
$pst->bindParam(":SectionId", $Id, PDO::PARAM_INT);
$pst->execute();
if($pst->rowCount() !== 0){
$res = $pst->fetch(PDO::FETCH_ASSOC);
$Props = array();
if(!is_null($res['section_props']) && false !== $P = unserialize($res['section_props']))
$Props = $P;
return array(
"Id" => (int)$res['ID'],
"Section" => (int)$res['section_id'],
"Name" => $res['Name'],
"Settings" => array(
"Id" => (int)$res['section_id'],
"Name" => $res['section_name'],
"Slug" => post_slug($res['section_name']),
"Tag" => $res['section_autotag'],
"IOLok" => (int)$res['IOLok'],
"Sport" => (int)$res['sport'],
"Props" => $Props,
)
);
}
$pst = null;
return false;
}
static function SectionsList(){
$dbh = Database::getInstance();
$query = "
SELECT
`ID`, `Section`, `Name`, `Order`,
`section_desc`
FROM `content_menu`
INNER JOIN `school_section`
ON `Section` = `section_id`
ORDER BY `Order`, `Name`
";
$pst = $dbh->prepare($query);
$pst->execute();
if($pst->rowCount() === 0) return false;
$i = 0;
$Sections = array();
while($S = $pst->fetch(PDO::FETCH_ASSOC)){
$Sections[$i] = array(
"Id" => (int)$S['ID'],
"Name" => $S['Name'],
"Desc" => null,
);
if(!is_null($S['section_desc']))
$Sections[$i]['Desc'] = $S['section_desc'];
$i++;
}
return $Sections;
}
/* payment types
-- ------------------------------*/
static function PaymentNames(){
return array(
707 => _("Pappersfaktura"),
708 => _("E-postfaktura"),
1 => _("Konto/kreditkort"),
709 => _("Swish"),
);
}
/* online payment
-- ------------------------------*/
public static function OnlinePaymentIsEnabled(){
return (
defined('PSP') && PSP === 'SwedbankPay'
);
}
public static function OnlinePaymentTypes(){
$dbh = Database::getInstance();
$Data = array();
$query = "
SELECT
COUNT(`pm_id`)
FROM `system_payment_method`
WHERE `pm_parent` <> 0
AND `pm_default` = 2
ORDER BY `pm_parent`
";
$pst = $dbh->prepare($query);
$pst->execute();
return ((int)$pst->fetchColumn() !== 0);
/*
while($res = $pst->fetch(PDO::FETCH_ASSOC)){
$Data[] = (int)$res['pm_id'];
}
*/
$pst = null;
return $Data;
/*
return array(
1, // Visa
2, // MasterCard
3, // American Express
4, // Diners Club
800, // Eurocard
801, // Maestro
);
*/
}
/* betalsätt
-- ------------------*/
public static function PaymentTypes($Selected = 0){
$Type = array();
$PaymentGroups = array(
1 => _("Kontokort/Swish"),
2 => _("Bankbetalning"),
0 => _("Övriga"),
);
$PaymentNames = KOCommon::PaymentNames();
$__NOTIFIES_VAT = (int)config("NOTIFIES_VAT");
$dbh = Database::getInstance();
$query = "
SELECT
`pm_id`, `pm_parent`, `pm_name`, `pm_default`, `pm_fee`, `pm_custom`
FROM `system_payment_method`
WHERE `pm_default` = 2
ORDER BY
CASE WHEN `pm_parent` = 0
THEN 3 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);
}
}