/** * 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); } Blogginlägg | IHM

Blogginlägg

Glädjande är att allt fler media börjat upptäcka denna "trend" att skapa en bättre Möteskultur. Det ringer ett par journalister i veckan, de flesta gör företagstidningar och skall ha "effektiva möten" eller Möteskultur som tema. Även Travel manager tidsskrifter ringer flitigt. De flesta frågar om "5-tips".SVT2 sände hela Möteskulturdagen live förra året. (finns på svtplay) Det finns dock inga "5-tips" eller short cut. Det är precis som namnet säger en KULTUR som skall förändras och förbättras. En möteskultur som vuxit fram under 100-tals år och som de senaste 200 åren haft sitt ursprung i det industri och ingenjör samhälle vi en gång var. I produktionen, oavsett av varor eller tjänster, har vi en kultur av ständiga förbättringar. Ibland kan vi tro att det är Toyota som uppfunnit detta( dock en mycket bra process!!!) men alla företag har ju arbetat med ständiga förbättringar ända sedan företaget startade. Om företaget bildades på 1800-talet så har det försökt effektivisera, bli mer l...

Ska anställda få lov att använda sociala medier som Facebook och Twitter på arbetstid? Under senaste året har debatten stundtals varit het, och många företag har infört förbud. Men i takt med att den professionella användningen av sociala medier ökar, kan sådana förbud dels leda till problem, t ex försvårad kund­kommunikation och missade marknadsföringsmöjligheter, dels begränsa möjligheten att locka kvalificerad personal som redan har för vana att jobba online i nätverk.   Att många företag är tvehågsna inför sociala nätverk är förståeligt. Utvecklingen inom området ger fantastiska möjligheter att skapa en fördjupad kunddialog. Samtidigt finns det många och djupa fallgropar, vilket flera företag blivit varse på mer eller mindre brutala sätt. Att formulera tydliga riktlinjer är ett sätt att skapa förutsättningar för att dra nytta av möjligheterna och minimera riskerna. Trots detta saknar de flesta svenska företag en policy för social media. En undersökning från Manpower visar att ba...

Vad investerar din organisation i mötestid? Enl. Mötesbarometern 2009 (www.3s.se) 2009 så tillbringar vi drygt 20% av arbetstiden i möten. I många företag och organisationer är det bettydlig mer. Lägger vi till den tid vi sitter med e-post så blir det mellan 30-40% av arbetstiden. När jag/ vi pratar Möteskultur så lägger vi in e-posten då många informella möten har ersatts av mail idag. Återkommer om detta i kommande blogg inlägg. Kan bara konstatera att många organisationer håller på mailbombas sönder idag. Av den egna organisationen! En enkel uträkning är alltså att ta vad en anställd kostar på ett år, multiplicerar detta med 0,25 (vi leker med tanken att mötestid och e-post tid uppgår till 25% vilket är lågt räknat) och multiplicerar detta med antalet anställda i din organisation. Då får du den summa som din organisation investerar i möten varje år. Varje år! Mäter ni effekten av detta? Analyserar ni detta? Reviderar ni detta? Vilken annan investering skulle ni hantera på detta v...

Jag hade utbildat mig till Statsvetare och hunnit jobba några år inom offentlig sektor. Men jag kände att jag ville mer och ville få möjlighet att kombinera mitt intresse för kommunikation med public affairs och CSR.  Jag sökte mig därför till IHM och valde utbildningen KY-utbildningen Marknads- och kommunikationskoordinator. Under min ena period av Lärande i arbete, LiA, gjorde jag min praktik på Vattenfalls avdelning för Public Affairs. Dit hade jag sökt mig för att jag också är intresserad av energifrågor. Där fick jag i uppdrag att hjälpa dem att ta fram en strategi för att nå unga opinionsbildare. Att det blev fokus på webben och på sociala medier var naturligt och jag skrev rapporten ”Vattenfall på Facebook” hösten 2008.  Klicka här för att ladda ned rapporten. Jag jobbade med rapporten under stora delar av min praktik. När den var klar höll jag en dragning för den avdelning på Vattenfall där jag varit. Och de var så nöjda att jag fick komma tillbaka flera gånger efter att min...

Har ekonomi och ekonomisk uppföljning något med ledarskap att göra? Absolut, hävdar jag! I ett sunt och friskt företag där företaget har en klar målsättning och vision och där alla vet vad som förväntas av varje medarbetare finns också ett gott ledarskap. Jag tror inte att det räcker att företaget har en VD som är en god ledare. Jag tror att det krävs att VDn också rekryterar kunniga medarbetare som är duktiga ledare även på varje enhet i företaget. Att en ekonomichef skall kunna räkna är en självklarhet men är det lika självklart att efterfråga dugligheten som ledare när du rekryterar en ekonomichef? Tyvärr tror jag fortfarande att det många gånger glöms bort. Utbildning, erfarenhet och gärna uppvisade ekonomiska resultat gör att du blir anställd. Att vid en rekrytering falla på att dina referenser angående ditt ledarskap är dåliga eller i vissa fall till och med negativa är inte lika vanligt. Just för att förståelsen för att ledarskap och ekonomi hör ihop många gånger saknas. I mi...

Det går inte en dag utan att man hör orden dyrt eller billigt. Och det går heller inte en dag utan att man hör orden användas fel. Är en lunch med handrullade köttbullar, äkta potatismos, gräddsås och rårörda lingon för 89 kronor dyr? Är det billigt med fabriksgjorda köttbullar, pulvermos, redd brunsås och lingonextrakt för 49 kronor? Visst, det är en prisskillnad på 40 kronor som naturligtvis ska ställas mot ens privata ekonomi och det är egentligen inte det jag vänder mig emot. Jag blir bara så trött på att kvalitétsbegreppet verkar försvinna mer och mer. Detta gäller inte bara köttbullar och kvällstidningarnas priskoll på matkassen där man ofta jämför äpplen och päron. Det gäller nästan allt från dagens lunch, klippning, tvättmaskiner och utbildningar till resor och inköp av bil. Och det är egentligen inte så konstigt, för tidningarna har pumpat ut ”billigt, billigt” i 25 års tid nu. Nästan all reklam i våra brevlådor fokuserar enbart på pris och det har blivit smart att handla b...

Lisa Ekströms ledarskap är en förening av starkt driv och ett stort hjärta, kryddad med en intensiv vilja att vinna. Med de ingredienserna lyckades hon förvandla en krisstämplad avdelning på SAS till en attraktiv arbetsplats. Det gjorde henne också till vinnare av Framgångsstipendiet. Juryns motivering Lisa Ekström, framgångsrik ledare.Bland 2 500 andra tävlande, som var och en skrivit ihop ett PM över sina meriter, sticker hon ut i terrängen som ett blommigt kaktusfikon, modigt , målmedvetet och näringsrikt. Juryn har uttryckt saken på följande sätt: “Lisa har visat prov på ett starkt interaktivt ledarskap som har fått medarbetarna att känna glädje, motivation och delaktighet. Lisas sätt att lösa utmaningen har betydligt förbättrat affärskritiska nyckeltal, och enhetens framgångsresa har haft positiv inverkan på andra enheter och inspirerat till nya kundlösningar.” - Det var väldigt roligt att få stipendiet, jag ser det som en framgång för hela gruppen. Vi har gjort den här resan t...

Calill Odqvist är alltid på väg, har alltid en idé på gång. För bara några år sedan startade hon företaget Light My Fire tillsammans med sin pappa. Då var det ett litet skånskt företag med stark drivkraft och stora visioner. I dag har det vuxit till ett globalt företag med försäljning i 38 länder. Stressad och försenad kommer jag till mötet med Calill Odqvist, vd på Light My Fire i Malmö. Jag ursäktar mig.- Det gör inget, nu fick jag tid att ta tag i en juridisk tvist med en leverantör. Kolla här! Vi har fått plastförpackningar för 400 000 kronor som spricker och han säger att det är vårt fel fast att han fått måtten på produkten. Trots kontroversen med leverantören och en senkommen reporter är det inga sura miner hos Calill. Hela hennes uppenbarelse är positiv och full av överskottsenergi. Snabbt hämtar hon vatten, som vi dricker i hjärtat av kontoret. Sedan presenterar hon mig för pappa Miche och mamma Lillan som båda arbetar på Light My Fire. Brorsan Caspar bor i Skottland och ar...

IHM Business School utvecklar företagsutbildningar efter kundernas önskemål. Volvo Cars Business School har idag 35 utbildningar i IHM:s regi - ett samarbete som sträcker sig 20 år tillbaka i tiden. - Skönt att släppa ansvaret till dem som vi vet genomför uppdragen bra, säger Tommy Sigvardsson, kompetensutvecklingsansvarig på Volvo Personbilar Sverige i Göteborg. För att kunna ta fram nya kurser och utbildningar, måste de utbildningsansvariga vara väl insatta i Volvoaffären.- Det är de. Sex personer på IHM arbetar åt oss. De är otroligt kundorienterade och omsorgsfulla eftersom de verkligen vill leverera hög kvalitet. Tommy Sigvardsson tycker att konceptet med att köpa hela utbildningspaket fungerar bra.- IHM tar ett stort ansvar. Vi behöver inte övervaka dem. Vi är mest med vid starten, bollar idéer och följer upp att det blir ekonomi i projekten.När utbildningarna är genomförda görs uppföljningar så att både Volvo Personbilar och IHM får en måttstock på genomförandet. Lärarna vask...

Vad är det man brukar säga - unga och hungriga? De här tre killarna vågade ta ett bett i kunskapens frukt och har nu avancerat på arbetsplatsen på AGA Gas. Efter några år på samma arbetsplats och utan akademisk utbildning kan det vara svårt att avancera. Så var det för Mikael, Peter och Jesper på gastillverkaren AGA Gas AB. Därför beslutade de sig för att höja sin kompetens genom att gå DIHM-utbildningen på IHM Business School.- Efter utbildningen har vi avancerat flera steg där både AGA och vi själva kunnat dra fördel av våra kunskaper inom marknadsföring, säger Jesper Hess. Mikael har arbetat på AGA sedan 1997 och började som säljare.- Jag sökte mig till AGA eftersom jag ville arbeta med försäljning. Jag har tidigare drivit en egen bensinstation och även arbetat som kock i USA. Jesper har arbetat på AGA sedan 1995 efter att tidigare varit aktiv inom försvarsmakten med bland annat FN-tjänster. Han har tidigare även arbetat som reparatör och mekaniker på Liseberg.- Av en slump satt ...

Alla kan bli bättre menar affärsutvecklaren Stefan Sebö. Genom en positiv attityd har du potential att utvecklas i ditt arbete. Spärrvakt eller vd, spelar ingen roll. Låt inte någon lura i dig att du inte kan utvecklas, det är föreläsaren Stefan Sebös budskap. - Alla har en potential att bli bättre än de är, säger han.   Det är klart att det finns begränsningar. Det sticker han inte under stol med.- Men folk gör felet att de fokuserar på dem istället för att försöka se sina möjligheter, säger Stefan Sebö.Han framför sitt budskap bra och det är svårt att inte ryckas med, men det handlar inte om ett snävt lönsamhetsbudskap. I hans värld kan alla bli lite bättre. Vi kan mer än vi tror. Stefan Sebö är ute efter en personlig utveckling - stor eller liten. Att vi inte ska stanna upp och bli liknöjda.- Det finns ett citat som lyder så här: Den dagen du slutar att bli bättre, då slutar du också att vara bra. Lätt att säga för den som har ett jobb som går att utveckla. Men spärrvakten på tun...

Sidor