self::getHash($key,$v), 'key'=>$key, ]; } static function getItems($block_id,$isAssoc = true){ $block_id = intval($block_id); $res = null; if($block_id) { $res = Item::select([ \Query::WHERE => new \Where(\Where::_operator(Item::$BLOCK,'=',$block_id)), \Query::SORT => [Item::$POS=>'ASC'], ],$isAssoc); } return $res; } public static function getName($v, array $options = []): string { $block_name = trim($v[self::$NAME]); $type = intval($v[self::$TYPE]); if(!$block_name){ $block_name = eVcardBlockType::getArray()[$type]['def']; } return (string)$block_name; //return parent::getName($v, $options); // TODO: Change the autogenerated stub } static function format($v,$options=[]){ $items= []; $form = []; $block_id = intval($v[self::$ID]); switch ($v[self::$TYPE]) { case eVcardBlockType::SHOP: $items = []; $a = Block::getItems($block_id); foreach ($a as $item){ $items[] = Item::format($item,$options); } break; } switch ($v[self::$TYPE]) { case eVcardBlockType::SHOP: case eVcardBlockType::FORM: $hash = self::generateHash($v); $form = [ 'key' =>$hash['key'], 'hash' =>$hash['hash'], ]; break; } $type = intval($v[self::$TYPE]); /* $block_name = trim($v[self::$NAME]); if(!$block_name){ $block_name = eVcardBlockType::getArray()[$type]['def']; } /**/ return [ 'id' => $block_id, 'name' => self::getName($v), 'pos' => intval($v[self::$POS]), 'type' => $type, 'vis' => boolval($v[self::$VIS]), 'link' => self::formatLink($v), 'settings' => json_decode($v[self::$SETTINGS],true), 'form' => $form, 'items' => $items, 'paid' => false, 'access' => false, ]; } static function getByCard($card_id,$isAssoc = true){ $res = null; $card_id = intval($card_id); if($card_id) { $res = self::select([ \Query::WHERE => new \Where(\Where::_operator(self::$CARD,'=',$card_id)), \Query::SORT => self::$POS ],$isAssoc); } return $res; } static function getForm($values = [], $options = []) :array { return [ self::getCommonFormInputs(), [ Form::VIEW=>Form::ROW, Form::COLS => [ [ Form::VIEW =>Form::INPUT, Form::COL_CLASSES =>'col-12', Form::KEY_VALUE =>self::$NAME, Form::TYPE =>eInputType::TEXT, Form::INPUT_OPT => [ Input::PLACEHOLDER => $c = V::get(Vars::$NAME), Input::LABEL => $c, ], ], ] ], self::getCommonFormSubmits($values), ]; } static function clearLink($x){ $s = substr($x,0,7); if($s!='http://' and $s!='https:/') $x = "http://".$x; return h(strip_tags($x)); } static function parseYoutubeUrl($url){ $res = ''; if ($url){ $result = parse_url($url); if (in_array($result['host'],array('www.youtube.com','youtube.com'))) { if ($result['query']){ $res = preg_replace("/^\w\=/", "", $result['query']); $res = preg_replace("/\&.*/", "", $res); } else { $res = preg_replace("/^\/.*\//", "", $result['path']); } } else if ($result['host'] == 'youtu.be'){ $res = preg_replace("/^\//", "", $result['path']); } } return $res; } static function formatLink($v){ $settings = json_decode($v[self::$SETTINGS],true); $link = $settings['link']; $link = h(str_replace([" ",'javascript:'],"",trim(strip_tags($link)))); switch ($v[self::$TYPE]){ case eVcardBlockType::WHATSAPP: $phone = preg_replace('/[^\d]/','',$link); $text = $settings['text']; return 'https://api.whatsapp.com/send?phone='.$phone.'&text='.h($text); break; case eVcardBlockType::VIBER: //return 'viber://chat?number='.preg_replace('/[^\d]/','',$l[ST_LINK_LINK]).''; return 'viber://add?number='.preg_replace('/[^\d]/','',$link).''; break; case eVcardBlockType::VIBER_BOT: //return 'viber://chat?number='.preg_replace('/[^\d]/','',$l[ST_LINK_LINK]).''; return 'viber://pa/info?uri='.$link.''; break; case eVcardBlockType::VIBER_BOT2: //return 'viber://chat?number='.preg_replace('/[^\d]/','',$l[ST_LINK_LINK]).''; return 'viber://pa/chatURI='.$link.''; break; case eVcardBlockType::GOOGLE_PLAY: //return 'viber://chat?number='.preg_replace('/[^\d]/','',$l[ST_LINK_LINK]).''; return 'https://play.google.com/store/apps/details?id='.$link.''; break; case eVcardBlockType::APP_STORE: $a = array( "https://apps.apple.com/"=>"", "http://apps.apple.com/"=>"", "http://www.apps.apple.com/"=>"", "https://www.apps.apple.com/"=>"", " "=>"", ); return "https://apps.apple.com/".str_replace(array_keys($a),array_values($a),$link); case eVcardBlockType::TELEGRAM: $a = array( "https://t.me/"=>"", "http://t.me/"=>"", "http://www.t.me/"=>"", "https://www.t.me/"=>"", "@"=>"", ); //return "https://web.telegram.org/#/im?p=".str_replace(array_keys($a),array_values($a),$l[ST_LINK_LINK]); //return "https://t.me/".str_replace(array_keys($a),array_values($a),$l[ST_LINK_LINK]); //return "https://t-go.me/".str_replace(array_keys($a),array_values($a),$link); return "https://t.me/".str_replace(array_keys($a),array_values($a),$link); break; case eVcardBlockType::TIK_TOK: $a = array( "https://tiktok.com/"=>"", "http://tiktok.com/"=>"", "http://www.tiktok.com/"=>"", "https://www.tiktok.com/"=>"", "@"=>"", " "=>"", ); return "https://tiktok.com/".str_replace(array_keys($a),array_values($a),$link); break; case eVcardBlockType::FL_RU: $a = array( "https://fl.ru/"=>"", "http://fl.ru/"=>"", "http://www.fl.ru/"=>"", "https://www.fl.ru/"=>"", "@"=>"", "/"=>"", " "=>"", ); return "https://www.fl.ru/users/".str_replace(array_keys($a),array_values($a),$link).'/'; break; case eVcardBlockType::FACEBOOK_MESSENGER: $a = array( "https://m.me/"=>"", "http://m.me/"=>"", "http://www.m.me/"=>"", "https://www.m.me/"=>"", "@"=>"", ); return "https://m.me/".str_replace(array_keys($a),array_values($a),$link); break; case eVcardBlockType::VKONTAKTE_CHAT: $a = array( "https://vk.me/"=>"", "http://vk.me/"=>"", "http://www.vk.me/"=>"", "https://www.vk.me/"=>"", "@"=>"", ); return "https://vk.me/".str_replace(array_keys($a),array_values($a),$link); break; case eVcardBlockType::VKONTAKTE_PAGE: $a = array( "https://vk.com/"=>"", "http://vk.com/"=>"", "http://www.vk.com/"=>"", "https://www.vk.com/"=>"", "https://m.vk.com/"=>"", "http://m.vk.com/"=>"", "http://www.m.vk.com/"=>"", "https://www.m.vk.com/"=>"", "@"=>"", ); return "https://vk.com/".str_replace(array_keys($a),array_values($a),$link); break; case eVcardBlockType::EMAIL: return 'mailto:'.preg_replace('/[^-_a-z0-9.@]/','',$link); break; case eVcardBlockType::PHONE: return 'tel:+'.preg_replace('/[^\d]/','',$link); break; case eVcardBlockType::TWITCH: $link = self::clearLink($link); $x = parse_url($link); //if( !in_array($x['host'],array('twitch.tv','www.twitch.tv'))) $link = ''; return 'https://www.twitch.tv'.$x['path']; break; case eVcardBlockType::INSTAGRAM: $a = array( 'instagramm'=>'instagram', ); $link = str_replace(array_keys($a),array_values($a),$link); $a = array( "https://www.instagram.com/"=>"", "http://www.instagram.com/"=>"", "https://instagram.com/"=>"", "http://instagram.com/"=>"", "instagram.com/"=>"", "www.instagram.com/"=>"", "https://www.m.instagram.com/"=>"", "http://www.m.instagram.com/"=>"", "https://m.instagram.com/"=>"", "http://m.instagram.com/"=>"", "m.instagram.com/"=>"", "www.m.instagram.com/"=>"", "@"=>"", ); return "https://instagram.com/".str_replace(array_keys($a),array_values($a),$link); break; case eVcardBlockType::FACEBOOK: $a = array( "https://fb.com/"=>"", "http://fb.com/"=>"", "https://facebook.com/"=>"", "http://facebook.com/"=>"", "https://www.fb.com/"=>"", "http://www.fb.com/"=>"", "https://www.facebook.com/"=>"", "http://www.facebook.com/"=>"", "https://m.fb.com/"=>"", "http://m.fb.com/"=>"", "https://m.facebook.com/"=>"", "http://m.facebook.com/"=>"", "https://www.m.fb.com/"=>"", "http://www.m.fb.com/"=>"", "https://www.m.facebook.com/"=>"", "http://www.m.facebook.com/"=>"", "@"=>"", ); return "https://fb.com/".str_replace(array_keys($a),array_values($a),$link); break; case eVcardBlockType::SKYPE: //return "skype:".$l[ST_LINK_LINK].'?chat'; return "skype:".$link;//.'?chat'; break; case eVcardBlockType::TWITTER: $link = self::clearLink($link); $x = parse_url($link); if( !in_array($x['host'],array('twitter.com'))) $link = ''; return $link; case eVcardBlockType::PINTEREST: $link = self::clearLink($link); $x = parse_url($link); $x = explode(".",$x['host']); if( !in_array($x[ count($x)-2 ],array('pinterest'))) $link = ''; return $link; case eVcardBlockType::YOUTUBE: $link = self::clearLink($link); $x = parse_url($link); if( !in_array($x['host'],array('youtube.com','www.youtube.com','youtu.be',))) $link = ''; return $link; break; case eVcardBlockType::ITUNES: $link = self::clearLink($link); $x = parse_url($link); if( !in_array($x['host'],array('apple.com','www.apple.com','www.itunes.com','itunes.com'))) $link = ''; return $link; break; case eVcardBlockType::ODNOKLASSINKI: $link = self::clearLink($link); $x = parse_url($link); if( !in_array($x['host'],array('ok.ru','www.ok.ru'))) $link = ''; return $link; break; case eVcardBlockType::YOUTUBE_EMBED: return 'https://www.youtube.com/embed/'.self::parseYoutubeUrl($link); break; case eVcardBlockType::YANDEX_MAPS: $link = self::clearLink($link); $x = parse_url($link); if( !in_array($x['host'],array('yandex.ru','www.yandex.ru'))) $link = ''; return $link; break; case eVcardBlockType::GOOGLE_MAPS: $link = self::clearLink($link); $x = parse_url($link); if( !in_array($x['host'],array('google.ru','www.google.ru','google.com','www.google.com'))) $link = ''; return $link; break; case eVcardBlockType::SITE: case eVcardBlockType::SITE_CUSTOM: return \Site::sectionUrl('away/'.$v[self::$ID].'/',true); default: return self::clearLink($link); } } static function columnInfo() : array { return [ new C([ C::VAR_NAME =>&self::$ID, C::TYPE =>eColumnType::INT, C::AUTO_INCREMENT =>true, C::PRIMARY =>true, C::DEFAULT =>0, C::HIDDEN =>true, C::TH =>V::get(Vars::$ID), ]), new C([ C::VAR_NAME => &self::$NAME, C::TYPE => eColumnType::TEXT, C::DEFAULT => 0, C::TH => V::get(Vars::$NAME), ]), new C([ C::VAR_NAME => &self::$TYPE, C::TYPE => eColumnType::INT, C::DEFAULT => 0, C::TH => V::get(Vars::$TYPE), ]), new C([ C::VAR_NAME => &self::$SETTINGS, C::TYPE => eColumnType::TEXT, C::DEFAULT => '', C::TH => V::get(Vars::$SETTINGS), ]), new C([ C::VAR_NAME => &self::$POS, C::TYPE => eColumnType::INT, C::DEFAULT => time(), C::TH => V::get(Vars::$POS), ]), new C([ C::VAR_NAME => &self::$PROFILE, C::TYPE => eColumnType::INT, C::DEFAULT => intval(PID), C::TH => V::get(Vars::$PROFILE), ]), new C([ C::VAR_NAME => &self::$CARD, C::TYPE => eColumnType::INT, C::DEFAULT => 0, C::TH => V::get(Vars::$CARD), ]), new C([ C::VAR_NAME => &self::$VIS, C::TYPE => eColumnType::TINYINT, C::LENGTH => 1, C::DEFAULT => 1, C::TH => V::get(Vars::$VIS), ]), new C([ C::VAR_NAME => &self::$ACCOUNT, C::TYPE => eColumnType::INT, C::LENGTH => 11, C::TH => V::get(Vars::$ACCOUNT), C::DEFAULT => intval(\Site::$owner_id), c::HIDDEN=>true, c::FUNC_VALUE => function($v){ if($id = $v[self::$ACCOUNT]) { return \Account::getName( \Account::getByID($id) ); } else return '-'; }, ]), new C([ C::VAR_NAME => &self::$CREATED, C::TYPE => eColumnType::INT, C::LENGTH => 11, C::TH => V::get(Vars::$CREATED), C::DEFAULT => time(), c::FUNC_VALUE => function($v){return self::formatDate($v[self::$CREATED]);}, c::HIDDEN=>true, ]), new C([ C::VAR_NAME => &self::$UPDATED, C::TYPE => eColumnType::INT, C::DEFAULT => time(), C::TH => V::get(Vars::$UPDATED), c::FUNC_VALUE => function($v){return self::formatDate($v[self::$UPDATED]);}, c::HIDDEN=>true, ]), ]; } } new Block(); ///