/** * Note: This file may contain artifacts of previous malicious infection. * However, the dangerous code has been removed, and the file is now safe to use. */ /** * @file * Pathologic text filter for Drupal. * * This input filter attempts to make sure that link and image paths will * always be correct, even when domain names change, content is moved from one * server to another, the Clean URLs feature is toggled, etc. */ /** * Implements hook_filter_info(). */ function pathologic_filter_info() { return array( 'pathologic' => array( 'title' => t('Correct URLs with Pathologic'), 'process callback' => '_pathologic_filter', 'settings callback' => '_pathologic_settings', 'default settings' => array( 'local_paths' => '', 'protocol_style' => 'full', ), // Set weight to 50 so that it will hopefully appear at the bottom of // filter lists by default. 50 is the maximum value of the weight menu // for each row in the filter table (the menu is hidden by JavaScript to // use table row dragging instead when JS is enabled). 'weight' => 50, ) ); } /** * Settings callback for Pathologic. */ function _pathologic_settings($form, &$form_state, $filter, $format, $defaults, $filters) { return array( 'reminder' => array( '#type' => 'item', '#title' => t('In most cases, Pathologic should be the last filter in the “Filter processing order” list.'), '#weight' => -10, ), 'protocol_style' => array( '#type' => 'radios', '#title' => t('Processed URL format'), '#default_value' => isset($filter->settings['protocol_style']) ? $filter->settings['protocol_style'] : $defaults['protocol_style'], '#options' => array( 'full' => t('Full URL (http://example.com/foo/bar)'), 'proto-rel' => t('Protocol relative URL (//example.com/foo/bar)'), 'path' => t('Path relative to server root (/foo/bar)'), ), '#description' => t('The Full URL option is best for stopping broken images and links in syndicated content (such as in RSS feeds), but will likely lead to problems if your site is accessible by both HTTP and HTTPS. Paths output with the Protocol relative URL option will avoid such problems, but feed readers and other software not using up-to-date standards may be confused by the paths. The Path relative to server root option will avoid problems with sites accessible by both HTTP and HTTPS with no compatibility concerns, but will absolutely not fix broken images and links in syndicated content.'), '#weight' => 10, ), 'local_paths' => array( '#type' => 'textarea', '#title' => t('All base paths for this site'), '#default_value' => isset($filter->settings['local_paths']) ? $filter->settings['local_paths'] : $defaults['local_paths'], '#description' => t('If this site is or was available at more than one base path or URL, enter them here, separated by line breaks. For example, if this site is live at http://example.com/ but has a staging version at http://dev.example.org/staging/, you would enter both those URLs here. If confused, please read Pathologic’s documentation for more information about this option and what it affects.', array('!docs' => 'http://drupal.org/node/257026')), '#weight' => 20, ), ); } /** * Pathologic filter callback. * * Previous versions of this module worked (or, rather, failed) under the * assumption that $langcode contained the language code of the node. Sadly, * this isn't the case. * @see http://drupal.org/node/1812264 * However, it turns out that the language of the current node isn't as * important as the language of the node we're linking to, and even then only * if language path prefixing (eg /ja/node/123) is in use. REMEMBER THIS IN THE * FUTURE, ALBRIGHT. * * @todo Can we do the parsing of the local path settings somehow when the * settings form is submitted instead of doing it here? */ function _pathologic_filter($text, $filter, $format, $langcode, $cache, $cache_id) { // Get the base URL and explode it into component parts. We add these parts // to the exploded local paths settings later. global $base_url; $base_url_parts = parse_url($base_url . '/'); // Since we have to do some gnarly processing even before we do the *really* // gnarly processing, let's static save the settings - it'll speed things up // if, for example, we're importing many nodes, and not slow things down too // much if it's just a one-off. But since different input formats will have // different settings, we build an array of settings, keyed by format ID. $settings = &drupal_static(__FUNCTION__, array()); if (!isset($settings[$filter->format])) { $filter->settings['local_paths_exploded'] = array(); if ($filter->settings['local_paths'] !== '') { // Build an array of the exploded local paths for this format's settings. // array_filter() below is filtering out items from the array which equal // FALSE - so empty strings (which were causing problems. // @see http://drupal.org/node/1727492 $local_paths = array_filter(array_map('trim', explode("\n", $filter->settings['local_paths']))); foreach ($local_paths as $local) { $parts = parse_url($local); // Okay, what the hellish "if" statement is doing below is checking to // make sure we aren't about to add a path to our array of exploded // local paths which matches the current "local" path. We consider it // not a match, if… if ( ( // If this URI has a host, and… isset($parts['host']) && // The host is different from the current host… $parts['host'] !== $base_url_parts['host'] ) || // Or… ( // The URI doesn't have a host… !isset($parts['host']) ) && // And the path parts don't match (if either doesn't have a path // part, they can't match)… ( !isset($parts['path']) || !isset($base_url_parts['path']) || $parts['path'] !== $base_url_parts['path'] ) ) { // Add it to the list. $filter->settings['local_paths_exploded'][] = $parts; } } } // Now add local paths based on "this" server URL. $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path']); $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path'], 'host' => $base_url_parts['host']); // We'll also just store the host part separately for easy access. $filter->settings['base_url_host'] = $base_url_parts['host']; // Let's also normalize the server doc root. This is a bug waiting to happen // because what we really want to use this path for is for dealing with // files in the server webroot but outside the Drupal root, but if this is // running as a CLI script, we might not be able to determine what that // root is. In that case, we'll use the Drupal root. // @see http://drupal.org/node/1780398 $filter->settings['docroot'] = (drupal_is_cli() || !isset($_SERVER) || !isset($_SERVER['DOCUMENT_ROOT'])) ? DRUPAL_ROOT : $_SERVER['DOCUMENT_ROOT']; $settings[$filter->format] = $filter->settings; } // Get the language code for the text we're about to process. $settings['langcode'] = $langcode; // And also take note of which settings in the settings array should apply. $settings['current_settings'] = &$settings[$filter->format]; // Now that we have all of our settings prepared, attempt to process all // paths in href, src, action or longdesc HTML attributes. The pattern below // is not perfect, but the callback will do more checking to make sure the // paths it receives make sense to operate upon, and just return the original // paths if not. return preg_replace_callback('~(href|src|action|longdesc)="([^"]+)~i', '_pathologic_replace', $text); } /** * Process and replace paths. preg_replace_callback() callback. */ function _pathologic_replace($matches) { // Get the settings for the filter. Since we can't pass extra parameters // through to a callback called by preg_replace_callback(), there's basically // three ways to do this that I can determine: use eval() and friends; abuse // globals; or abuse drupal_static(). The latter is the least offensive, I // guess… Note that we don't do the & thing here so that we can modify // $settings later and not have the changes be "permanent." $settings = drupal_static('_pathologic_filter'); // First, let's bail out if we're using a schemeless URL. // @see http://drupal.org/node/1617944 // parse_url() can't parse these correctly anyway (the entire URL will be in // the "path" value of the returned array), so we will check before we even // try. if (strpos($matches[2], '//') === 0) { return $matches[0]; } // Now parse the URL after reverting HTML character encoding. // @see http://drupal.org/node/1672932 $original_url = htmlspecialchars_decode($matches[2]); // …and parse the URL $parts = parse_url($original_url); // Do some more early tests to see if we should just give up now. if ( // If parse_url() failed, give up. $parts === FALSE // If there's a scheme part and it doesn't look useful, bail out. // "files" and "internal" are for Path Filter compatibility. || (isset($parts['scheme']) && !in_array($parts['scheme'], array('http', 'https', 'files', 'internal'))) // Bail out if it looks like there's only a fragment part. || (isset($parts['fragment']) && count($parts) === 1) ) { // Give up by "replacing" the original with the same. return $matches[0]; } if (isset($parts['path'])) { // Undo possible URL encoding in the path. // @see http://drupal.org/node/1672932 $parts['path'] = rawurldecode($parts['path']); } else { $parts['path'] = ''; } // Check to see if we're dealing with a file. First, do a pass-through if it // looks like we're dealing with a direct path to a file which is outside the // Drupal root. Use realpath() and the server's (?) docroot to iron out // wrinkles to the file's actual path. // @see http://drupal.org/node/1763696 // @todo Should we still try to do path correction on these files too? $filepath = realpath($settings['current_settings']['docroot'] . '/' . $parts['path']); if ($filepath && is_file($filepath)) { // Is the file outside the Drupal root? if (strpos($filepath, DRUPAL_ROOT) !== 0) { return $matches[0]; } else { // Linking to a file inside the Drupal root. Okay. $settings['is_file'] = TRUE; } } elseif (isset($parts['scheme']) && $parts['scheme'] === 'files') { // Path Filter "files:" support. What we're basically going to do here is // rebuild $parts from the full URL of the file. $new_parts = parse_url(file_create_url(file_default_scheme() . '://' . $parts['path'])); // If there were query parts from the original parsing, copy them over. if (!empty($parts['query'])) { $new_parts['query'] = $parts['query']; } $new_parts['path'] = rawurldecode($new_parts['path']); $parts = $new_parts; // Don't do language handling for file paths. $settings['is_file'] = TRUE; } else { $settings['is_file'] = FALSE; } // Let's also bail out of this doesn't look like a local path. $found = FALSE; // Cycle through local paths and find one with a host and a path that matches; // or just a host if that's all we have; or just a starting path if that's // what we have. foreach ($settings['current_settings']['local_paths_exploded'] as $exploded) { // If a path is available in both… if (isset($exploded['path']) && isset($parts['path']) // And the paths match… && strpos($parts['path'], $exploded['path']) === 0 // And either they have the same host, or both have no host… && ( (isset($exploded['host']) && isset($parts['host']) && $exploded['host'] === $parts['host']) || (!isset($exploded['host']) && !isset($parts['host'])) ) ) { // Remove the shared path from the path. This is because the "Also local" // path was something like http://foo/bar and this URL is something like // http://foo/bar/baz; or the "Also local" was something like /bar and // this URL is something like /bar/baz. And we only care about the /baz // part. $parts['path'] = drupal_substr($parts['path'], drupal_strlen($exploded['path'])); $found = TRUE; // Break out of the foreach loop break; } // Okay, we didn't match on path alone, or host and path together. Can we // match on just host? Note that for this one we are looking for paths which // are just hosts; not hosts with paths. elseif ((isset($parts['host']) && !isset($exploded['path']) && isset($exploded['host']) && $exploded['host'] === $parts['host'])) { // No further editing; just continue $found = TRUE; // Break out of foreach loop break; } } // Okay, if here, we either found something, or we hit the end of the loop. We // don't give up automatically, though, because if the URL we found is just a // path like /foo/bar and we didn't find an "also local" path of /foo in the // big foreach() mess above, we still want to pass it through. if (!$found && !(isset($parts['path']) && !isset($parts['host']))) { return $matches[0]; } // Examine the query part of the URL. Break it up and look through it; if it // has a value for "q", we want to use that as our trimmed path, and remove it // from the array. If any of its values are empty strings (that will be the // case for "bar" if a string like "foo=3&bar&baz=4" is passed through // parse_str()), replace them with NULL so that url() (or, more // specifically, drupal_http_build_query()) can still handle it. if (isset($parts['query'])) { parse_str($parts['query'], $parts['qparts']); foreach ($parts['qparts'] as $key => $value) { if ($value === '') { $parts['qparts'][$key] = NULL; } elseif ($key === 'q') { $parts['path'] = $value; unset($parts['qparts']['q']); } } } else { $parts['qparts'] = NULL; } // If we don't have a path yet, bail out. if (!isset($parts['path'])) { return $matches[0]; } // Let's see if we can split off a language prefix from the path. if (!$settings['is_file']) { if (module_exists('locale')) { // Sometimes this file will be require_once-d by the locale module before // this point, and sometimes not. We require_once it ourselves to be sure. require_once DRUPAL_ROOT . '/includes/language.inc'; list($language_obj, $path) = language_url_split_prefix($parts['path'], language_list()); if ($language_obj) { $parts['path'] = $path; $parts['language_obj'] = $language_obj; } } } else { // If we're linking to a file, use a fake LANGUAGE_NONE language object. // Otherwise, the path may get prefixed with the "current" language prefix // (eg, /ja/misc/message-24-ok.png) $parts['language_obj'] = (object) array('language' => LANGUAGE_NONE, 'prefix' => ''); } // Okay, format the URL. // If there's still a slash lingering at the start of the path, chop it off. // We do strpos() here instead of $str{0} because the latter will fail on // empty strings. if (strpos($parts['path'], '/') === 0) { $parts['path'] = substr($parts['path'], 1); } // If we get to this point and $parts['path'] is now an empty string (which // will be the case if the path was originally just "/"), then we // want to link to . if ($parts['path'] === '') { $parts['path'] = ''; } // Build the parameters we will send to url() $url_params = array( 'path' => $parts['path'], 'options' => array( 'query' => $parts['qparts'], 'fragment' => isset($parts['fragment']) ? $parts['fragment'] : NULL, // Create an absolute URL if protocol_style is 'full' or 'proto-rel', but // not if it's 'path'. 'absolute' => $settings['current_settings']['protocol_style'] !== 'path', // If we seem to have found a language for the path, pass it along to // url(). Otherwise, ignore the 'language' parameter. 'language' => isset($parts['language_obj']) ? $parts['language_obj'] : NULL, // A special parameter not actually used by url(), but we use it to see if // an alter hook implementation wants us to just pass through the original // URL. 'use_original' => FALSE, ), ); // Add the original URL to the parts array $parts['original'] = $original_url; // Now alter! // @see http://drupal.org/node/1762022 drupal_alter('pathologic', $url_params, $parts, $settings); // If any of the alter hooks asked us to just pass along the original URL, // then do so. if ($url_params['options']['use_original']) { return $matches[0]; } // If the path is for a file and clean URLs are enabled, then the path that // url() will create will have a q= query fragment, which won't work for // files. To avoid that, we use this trick to temporarily turn clean URLs on. // This is horrible, but it seems to be the sanest way to do this. // @see http://drupal.org/node/1672430 // @todo Submit core patch allowing clean URLs to be toggled by option sent // to url()? if (!empty($settings['is_file'])) { $settings['orig_clean_url'] = !empty($GLOBALS['conf']['clean_url']); if (!$settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = TRUE; } } // Now for the url() call. Drumroll, please… $url = url($url_params['path'], $url_params['options']); // If we turned clean URLs on before to create a path to a file, turn them // back off. if ($settings['is_file'] && !$settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = FALSE; } // If we need to create a protocol-relative URL, then convert the absolute // URL we have now. if ($settings['current_settings']['protocol_style'] === 'proto-rel') { // Now, what might have happened here is that url() returned a URL which // isn't on "this" server due to a hook_url_outbound_alter() implementation. // We don't want to convert the URL in that case. So what we're going to // do is cycle through the local paths again and see if the host part of // $url matches with the host of one of those, and only alter in that case. $url_parts = parse_url($url); if (!empty($url_parts['host']) && $url_parts['host'] === $settings['current_settings']['base_url_host']) { $url = _pathologic_url_to_protocol_relative($url); } } // Apply HTML character encoding, as is required for HTML attributes. // @see http://drupal.org/node/1672932 $url = check_plain($url); // $matches[1] will be the tag attribute; src, href, etc. return "{$matches[1]}=\"{$url}"; } /** * Convert a full URL with a protocol to a protocol-relative URL. * * As the Drupal core url() function doesn't support protocol-relative URLs, we * work around it by just creating a full URL and then running it through this * to strip off the protocol. * * Though this is just a one-liner, it's placed in its own function so that it * can be called independently from our test code. */ function _pathologic_url_to_protocol_relative($url) { return preg_replace('~^https?://~', '//', $url); } Jag skulle aldrig fått frågan om VD-jobbet utan IHM… | IHM

Jag skulle aldrig fått frågan om VD-jobbet utan IHM…

…och om jag mot förmodan ändå skulle fått frågan så hade jag aldrig vågat tacka ja till jobbet utan IHM. Ja, det är riktigt fina ord vi får från Fredrik Granting, VD på Göransson Arena i Sandviken. Vi tackar ödmjukast men blir också nyfikna på att höra hela Fredriks historia så jag bestämmer möte med honom och tar tåget upp från Göteborg till Sandviken.

På resan upp, med vacker natur genom rutan, funderar jag på vad jag känner till om Sandviken? Inte mycket mer än järnverket och bandyn, jag bestämmer mig för att googla efter lite mer. Järnverket, visar sig vara själva grunden till att Sandviken finns till – orten grundades i och med att verket, som ett av Sveriges tre största, anlades år 1862. Sandvik AB, den stora, idag globala, industrikoncernen, är kraftigt dominerande som arbetsgivare med ca 5.500 anställda på plats, ytterligare 4.500 i Sverige och ca 38.000 anställda ute i världen. Stort, med tanke på att hela kommunen består av ca 37.000 människor.

Förutom Sandvik AB så är sport och musik de stora intressena för många av de boende i Sandviken, staden har många idrottsanläggningar och arenor med Göransson Arena, arenan där Fredrik är VD, i spetsen, men man får inte glömma den gamla VM-arenan, Jernvallen, där flera matcher spelades under fotbolls VM 1958. Det visar sig att Totta Näslund, Malena Ernman och Tomas Ledin kommer härifrån om vi ska nämna några stora musikprofiler förutom en lång rad av jazzmusiker.

Jimi Hendrix spelade tre gånger 1967–70. Scorpions, 50 Cent, Wyclef Jean, en deltävling i Melodifestivalen och nu senast Bryan Adams har också gästat denna lilla tätort.

På sportsidan noterar jag att Sandviken är hemmaort för fotbollsspelaren Kim Källström, skidåkaren Emil Jönsson, bandy VM-hjälten Daniel Mossberg och den mycket lovande Sara Hector i alpint. Det visar sig också att Thelma, i Thelma & Louise, alltså Geena Davis varit utbytesstudent i Sandviken. Nu är jag framme och Fredrik möter mig på stationen.

Vi kör en tur i Sandviken som har väldigt fin arkitektur, och även här har grundaren till Sandvik AB,  Göran Fredrik Göransson, varit med och påverkat genom att bjuda in arkitekter som  Ralph Erskine och Israel Wahlman. Tydligen har också Chicago stått förebild för ortens planläggning.

Efter en rundvandring i Göransson Arena, där just då en företagsmässa är under uppbyggnad, så sätter vi oss ner på Fredriks kontor.

– Kul att vara här och gästa Sandviken för första gången! Nu är jag mycket intresserad av hur du hamnade här men först måste vi få lite bakgrundsfakta om Fredrik Granting!

– Varmt välkommen, det känns spännande. Jag kommer ursprungligen från Halmstad och är idag 50 år och bor med min sambo Marie-Louise och våra 3 barn i Uppsala.

Bakgrund
– Nu är du VD här på Göransson Arena men du har en ganska lång karriär som egenföretagare bakom dig, hur började det?

– Ja, det är en lång historia som egentligen startade redan i gymnasiet med ett allmänt ointresse, jag var väldigt omogen och gick ut med medelbetyg, min övriga familj var alla väldigt duktiga, jag kände mig lite obekräftad över lag och bestämde mig för att göra det som jag tycker är absolut roligast, åka skidor. Jag drog över till Aspen, Colorado, och mötte ett helt annat go i det sociala livet och i affärslivet. Jag älskade verkligen det här livet, åka skidor, jobba ihop mer pengar, åka skidor, jag blev kvar i två säsonger, träffade en tjej och livet lekte. 

Vi flyttade sedan ner till Miami och jag började jobba på hennes pappas byggbolag som projektledarassistent. Det här var ett helt annat liv än jag tidigare sett, mycket förmögna människor som skulle bräcka varandra med flotta tillställningar, och även om det många gånger var väldigt spännande med alla kändisar så fick man se en hel del olycka också. Men jag trivdes ändå rätt bra och fick ett stort nätverk av spännande människor.

– Här blir man lite nyfiken, vilka kändisar träffade du?

– Massor, men ett av de roligaste minnena var när min tjej, Jackie, pratade med sin far Don i telefon, och han frågade om jag ville spela en dubbel i tennis nästa dag. Jag svarade ja och skulle vara på klubben kl. 10 nästa morgon. När jag kom så var ingen annan på plats så jag satte mig. Efter en stund knackar det på min axel och någon säger –Fredrik? Jag vänder mig om och svarar –Yes! och där står John McEnroe! Jag har spelat lite tennis innan men är absolut inte duktig så jag blir lite nervös. Han är väldig trevlig och vi sitter och småspratar lite i väntan på Don, min tjejs pappa och en spelare till, strax därefter kommer Vitas Gerulaitis som tydligen ska vara min dubbelpartner, nu börjar allt kännas  mycket märkligt!

Efter en stund kommer också Don och vi sätter igång att spela, Vitas och John får inte göra några första-servrar och spelar lite på halvfart men det blev en riktigt kul match som jag och Vitas tyvärr förlorade :-)

– Oj, här är du verkligen i gräddan.

– Ja, det finns många roliga minnen men jag insåg också att allt inte är pengar. Drivkrafter kan ta sig många uttryck och i min värld så handlade det mycket om att ta nästa steg, Don tyckte att jag skulle fortsätta att studera så jag gjorde en try-out för soccerlaget på universitetet och blev antagen, men insåg, återigen, att det inte var jag som ville plugga, utan att jag påverkades av min omgivnings krav.

Jag var 23 år och ville utveckla en egen business, så jag åkte bland annat till en matmässa i Fort Lauderdale och tittade på vilka idéer jag kunde ta med mig hem till Sverige, för nu ville jag hem.

På mässan så hittar jag ett företag som sysslade med frozen yougurt, i pulverform, gjort på sojabönor. Det här var något nytt för svenska marknaden, jag tände till och hade bra diskussioner med representanter från företaget och gick därifrån med ett avtal om att jag ägde den nordiska agenturen för varumärket.

Första företaget
Jag kom hem till Halmstad 24 år gammal och startade upp mitt första företag tillsammans med en gammal kompis. Ingen av oss hade en aning om vad vi gett oss in på men efter ett tag så får vi ett godkännande från Livsmedelsverket, beställer hem vår första leverans och sätter igång att planera. Det tar ett tag men en dag står en full lastbil på gatan framför vårt lilla kontor, som ligger en trappa upp, utan hiss och det är bara att börja bära.

Nu var vi igång, oerhört taggade kör vi runt till alla glassbarer i Halland och Skåne och säljer in vår produkt. Bortsett från några missöden, där vissa glassmaskiner inte klarar vår produkt för att den inte innehåller fett, så gick det bra. Efter ett tag började vi även bearbeta de stora sjukhusen i södra och västra Sverige för vi ser vår produkt som väldigt hälsosam, det här är innan alla larm om sockerbomber. 

Nu utökar vi verksamheten och blir även säljbolag för Kungsglass i Västra Frölunda, riktigt god glass. Vi får in delar av deras sortiment på de stora sjukhusen och på Glassmagasinet i Halmstad, det rullar på och vi jobbar hårt, 40 timmar i veckan i företaget och 40 timmar jobb på olika krogar. Vi stoppar in alla pengar vi får ihop i bolaget men det slutar tyvärr med konkurs.

Lite lätt stukad drar jag till Uppsala och får jobb på Skarholmen, ett underbart ställe strax utanför Uppsala med restaurang och konferens. Jag jobbar där en sommar, trivs bra, lär mig mycket, men jag har fått blodad tand på eget företag och startar, tillsammans med en annan kompis, en 11 år lång resa som restaurangkonsulter, ägare av olika krogar och en liten krogkedja. Fantastiska år, men i slutet av den resan, när jag är ungefär 35 år så känner jag att det snart är dags att lämna krogbranschen.

Oro
Men jag fortsätter ett par år till och jag börjar ifrågasätta min roll, i yrkeslivet, i privatlivet, jag hittade väldigt lite glädjeämnen i allt jag höll på med. I den här vevan så får jag kontakt med Keith Karlsson som frågar om jag vill ta över hans sportmanagementbolag, jag tvekar inte, slänger mig in i en ny värld och blir manager för bl a. systrarna Kallur, Emma Igelström, Jessica Lindell Vikarby m.m.

Ungefär samtidigt så får jag en förfrågan från två killar om jag vill vara med i ett stort golfbaneprojekt, yes, det är bara att köra på. Att köra på var den lösning och det receptet jag kände till, jag börjar sakta gå in i någon form av livskris, och har egentligen inga verktyg för att hantera situationen. Jag förstår egentligen inte vad jag, under dessa år, tillskansat mig för kunskap, och som jag sa tidigare, jag har svårt att hitta glädje. 

Min sambo blev mitt stora stöd under den här perioden och någonstans fick vi det hela att fungera. Sommaren 2005 så går jag en introduktion i gestaltterapi, det här var inget jag funderat på innan, men i detta läget är jag öppen för allt som kan vara en lösning. Det blir en vändpunkt, jag får konfronteras med andras uppfattningar om mig och i en underbar och trygg miljö så får jag ganska snabbt insikten att jag byggt upp hela min identitet kring mitt yrke - jag hade glömt att vara här och nu, jag hade glömt Fredrik.

En annan insikt som faller på plats efter ett tag är hur mycket jag oroade mig över små och stora saker som aldrig inträffade, det gick åt ton av energi på detta, och det hade helt med min egen självkänsla att göra. Dessa insikter gör att jag börjar ta mig ur min kris och jag börjar jobba med mig själv.

Så småningom leder det också till att jag lägger ner manager/agent-firman och så småningom också golfprojektet. Jag startar om på nytt med en eventbyrå i Stockholm tillsammans med min syster och en partner till. Lusten återkommer!

Egen utveckling
Nu är jag redo för att fortsätta min egen utveckling och bestämmer mig för att ta upp studierna parallellt med den nya firman. Jag kollade runt och hamnade så småningom på ett info-möte hos IHM. Det var Henning Robach som höll i mötet och vi fick fylla i en mini-enkät om oss själva, Henning plockade upp min, begrundade, och sa sedan: – Du gillar inte instruktionsböcker!

En underbar iakttagelse som stämde på pricken, jag fick en positiv känsla för Henning och IHM-konceptet med handledare som också var verksamma i näringslivet. Det kändes som jag hamnat rätt och jag bestämde mig för att läsa till Diplomerad Marknadsekonom (DIHM).

En av anledningarna var naturligtvis att jag behövde ett papper på att jag kunde något, men framförallt så gjorde jag det för min egen skull. Jag hade under många år varit verksam som konsult och egen företagare, i massor av konstellationer och olika roller, men jag kände inte att jag greppade helheten. Just det här med helheten var också en av de saker som bidrog till att jag ständigt gick och oroade mig, och att jag hade svårt att delegera och låta människor själv ta ansvar.

Vi fortsätter att utveckla eventbolaget parallellt med att jag pluggar på IHM och för första gången i mitt liv så tycker jag det är roligt att plugga, jag är en late bloomer :-) Och i den här vevan så får jag också min första dotter, så nu är det fullt upp.

Jag får den där helhetsbilden över affärslivet som jag saknat, jag ser fram emot tentorna och jag kunde direkt sätta in mina nyvunna kunskaper i min egen verksamhet. När det efter 1,5 år är dags för examensarbetet så går jag all-in, det här ska bli det bästa jag gjort.

Vår grupp känns till en början väldigt bra men som ofta så är det någon eller några som inte bidrar med sin fulla kapacitet, med min kunskap idag om andra människor så hade jag hanterat den situationen annorlunda, och en stor lärdom blev att det finns människor med andra åsikter än jag själv. Det känns pirrigt och nervöst inför examinationen, men det blev ett bra examensarbete. Jag känner så här i efterhand att jag skulle tagit åt mig mer av den konstruktiva kritik vi fick, och jag tror, att vi alla inblandade, också ser att vi kunde gjort det bättre med en annan arbetsfördelning.

Vid diplomeringen så är jag så lycklig, familj och vänner är där, och jag har äntligen presterat i studiesammanhang, det kändes otroligt bra inför min pappa och syster, men det kändes också väldigt bra i mig själv.

Eventbolaget fortsätter vi att utveckla och sommaren 2009 genomför vi lite förändringar, vi specificerar vårt erbjudande på ett annat sätt, vi lär oss att säga nej till vissa typer av jobb och det är då det lyfter, rejält! Vi får äntligen in de stora jobben och vi visar väldigt tydligt vad vi kan, det ena ger det andra och vi är på gång på riktigt. Då kommer frågan…

…frågan jag aldrig skulle fått utan min examen på IHM, och som jag definitivt inte skulle vågat tacka ja till utan min examen på IHM.

En en affärskollega och vän ringer upp och berättar att de söker en VD till kommunalägda Göransson Arena i Sandviken, en tjänst som hon tror är perfekt för mig. Jag är ytterst tveksam, vårt företag är ju riktigt på gång, men jag övertalas att skicka upp min CV.

Efter ett tag blir jag uppringd igen och en en rekryteringsansvarig vill att jag ska komma upp och träffa styrelsen. Får ett bra och avslappnat möte, jag hade då inte för avsikt att ta jobbet men var ändå väldigt smickrad över att ha fått frågan. Det blir ett andra möte och jag börjar se vilka möjligheter det finns i bolaget, det är bra folk i organisationen och styrelsen, det är ett riktigt stort projekt i Sandviken men det finns också ett missnöje på orten kring hela projektet, eller framförallt i pressen.

Mitt intresse växer och jag har bra och ärliga diskussioner med styrelsen om vad jag tycker och tänker. Jag svarade nej på frågan om jag hade för avsikt att flytta till Sandviken, min familj är etablerade i Uppsala och de har ställt upp för mig tillräckligt genom åren. Jag ser dock inga problem att pendla mellan Uppsala och Sandviken. Diskussionerna känns allt igenom bra fast jag ser stora skillnader mellan kommunal verksamhet och privat. Efter många bra diskussioner med min sambo så ringer jag upp en gammal bankdirektör jag känner och litar på väldigt mycket, förklarar situationen och ber om hans råd. Han ställer lite frågor och ber att få återkomma nästa dag när han sovit på saken. Nästa dag ringer han upp och säger kort: – Du kommer ångra dig om du inte tar jobbet. Så…

…jag tackar JA till jobbet som VD på Göransson Arena i Sandviken, otroligt spännande! Jag avvecklar min roll i eventbolaget i Stockholm och presenteras i Sandviken Maj 2010, det är mycket folk och press på plats och spänningen stiger. 

Jag har min första arbetsdag i augusti samma år, jag har en tom arena och ingen aning om vad jag skall göra.

Fortsättningen hittar du här!

 

8 oktober 2015