Beispiel #1
0
 /**
  * Calculate the sum of integer values (values can be any length)
  */
 function Summation($A)
 {
     $Arguments = func_get_args();
     if (is_array($A)) {
         $Arguments = Flatten($Arguments);
     }
     $MaxLengthArray = array_map('strlen', $Arguments);
     $MaxLength = max($MaxLengthArray);
     foreach ($Arguments as $Index => $Value) {
         settype($Value, 'string');
         $Arguments[$Index] = str_pad($Value, $MaxLength, '0', STR_PAD_LEFT);
     }
     //$Result = array_fill(0, $MaxLength, 0);
     for ($i = $MaxLength - 1; $i >= 0; $i--) {
         if (!isset($Result[$i])) {
             $Result[$i] = 0;
         }
         foreach ($Arguments as $Value) {
             $Result[$i] += (int) $Value[$i];
         }
         $Sum = strval($Result[$i]);
         $Length = strlen($Sum);
         for ($n = $Length - 1; $n >= 0; $n--) {
             $k = $i - ($Length - $n - 1);
             $Result[$k] = $Sum[$n];
         }
     }
     ksort($Result);
     $Result = implode('', $Result);
     return $Result;
 }
 function CombineArrays()
 {
     $Arrays = func_get_args();
     $Result = Flatten($Arrays);
     $Result = array_values(array_unique($Result));
     return $Result;
 }
 public function HeadModule_BeforeToString_Handler($Head)
 {
     $Configuration =& $this->Configuration;
     $Tags = $Head->Tags();
     usort($Tags, array('HeadModule', 'TagCmp'));
     // BeforeToString fires before sort
     $CombinedJavascript = array('library' => array());
     $CombinedCss = array();
     $RemoveIndex = array();
     $AllInOne = ArrayValue('AllInOne', $Configuration);
     $DeferJavaScript = ArrayValue('DeferJavaScript', $Configuration);
     foreach ($Tags as $Index => &$Tag) {
         // JavaScript (script tag)
         if (GetValue(HeadModule::TAG_KEY, $Tag) == 'script') {
             if (!isset($JsTag)) {
                 $JsTag = $Tag;
             }
             $CachedFilePath = $this->GetCachedFilePath($Tag, 'src', $FilePath);
             if ($CachedFilePath === False) {
                 if ($DeferJavaScript) {
                     $this->DeferJavaScriptFiles[] = $Tag['src'];
                     $RemoveIndex[] = $Index;
                 }
                 continue;
             }
             if (!file_exists($CachedFilePath)) {
                 if (!isset($Snoopy)) {
                     $Snoopy = Gdn::Factory('Snoopy');
                 }
                 $Snoopy->Submit('http://marijnhaverbeke.nl/uglifyjs', array('code_url' => '', 'download' => '', 'js_code' => file_get_contents($FilePath)));
                 file_put_contents($CachedFilePath, trim($Snoopy->results));
             }
             if (!$AllInOne) {
                 $GroupName = self::GetGroupName($FilePath);
                 if ($GroupName == 'js' || $GroupName == 'themes') {
                     $GroupName = 'library';
                 } elseif (!in_array($GroupName, array('plugins', 'applications', 'library'))) {
                     // Unknown group, move it to application group.
                     $GroupName = 'applications';
                 }
                 $CombinedJavascript[$GroupName][$Index] = $CachedFilePath;
             } else {
                 $CombinedJavascript[$Index] = $CachedFilePath;
             }
         } elseif (GetValue(HeadModule::TAG_KEY, $Tag) == 'link' && GetValue('rel', $Tag) == 'stylesheet') {
             $CachedFilePath = $this->GetCachedFilePath($Tag, 'href', $FilePath);
             if ($CachedFilePath === False) {
                 continue;
             }
             if (!file_exists($CachedFilePath)) {
                 $Css = file_get_contents($FilePath);
                 $CssText = self::ProcessImportCssText($Css, $FilePath);
                 if ($CssText === False) {
                     $CssText = $Css;
                 }
                 if (GetValue('MinifyCss', $Configuration, True)) {
                     $CssText = self::MinifyCssText($CssText);
                 }
                 self::ChangeBackgroundUrl($CssText, $FilePath);
                 // TODO: COMBINE CSS (WE MUST CHECK MEDIA)
                 // style.css + custom.css, admin.css + customadmin.css
                 // TODO: MORE EFFECTIVE COMBINE colorbox.css + custom-colorbox.css
                 file_put_contents($CachedFilePath, $CssText);
             }
             if (!$AllInOne) {
                 $GroupName = self::GetGroupName($FilePath);
                 // combine in two group applications and plugins
                 // TODO: REMOVE if (!isset($CssTag)) $CssTag = $Tag;
                 if (!isset($CssTag)) {
                     $CssTag = $Tag;
                 }
                 if (!in_array($GroupName, array('plugins', 'applications'))) {
                     $GroupName = 'applications';
                 }
                 $CombinedCss[$GroupName][$Index] = $CachedFilePath;
             } else {
                 $CombinedCss[$Index] = $CachedFilePath;
             }
         }
     }
     if ($AllInOne == 2) {
         // Js
         unset($CombinedJavascript['library']);
         foreach ($CombinedJavascript as $Index => $Src) {
             $NewSrc = Asset($Src, False, False);
             if ($DeferJavaScript) {
                 $RemoveIndex[] = $Index;
                 $this->DeferJavaScriptFiles[] = $NewSrc;
             } else {
                 $Tags[$Index]['src'] = $NewSrc;
             }
         }
         // Css
         foreach ($CombinedCss as $Index => $Src) {
             $Tags[$Index]['href'] = Asset($Src, False, False);
         }
     } elseif ($AllInOne) {
         $RemoveIndex[] = array_keys($CombinedCss);
         // Css
         $CombinedCss = array_unique($CombinedCss);
         $CachedFilePath = 'cache/ps/style.' . self::HashSumFiles($CombinedCss) . '.css';
         if (!file_exists($CachedFilePath)) {
             $Combined = '';
             //$IncludeBasename = Gdn::Session()->CheckPermission('Garden.Admin.Only');
             foreach ($CombinedCss as $File) {
                 //if ($IncludeBasename) $Combined .= '/*' . basename($File) . "*/\n";
                 $Combined .= file_get_contents($File) . "\n";
             }
             file_put_contents($CachedFilePath, $Combined);
         }
         $Tags[] = array(HeadModule::TAG_KEY => 'link', 'rel' => 'stylesheet', 'type' => 'text/css', 'href' => Asset($CachedFilePath, False, False), 'media' => 'all', HeadModule::SORT_KEY => 98);
         // Js
         unset($CombinedJavascript['library']);
         $RemoveIndex[] = array_keys($CombinedJavascript);
         $CombinedJavascript = array_unique($CombinedJavascript);
         $CachedFilePath = 'cache/ps/functions.' . self::HashSumFiles($CombinedJavascript) . '.js';
         if (!file_exists($CachedFilePath)) {
             $Combined = '';
             foreach ($CombinedJavascript as $File) {
                 $Combined .= file_get_contents($File) . ";\n";
             }
             file_put_contents($CachedFilePath, $Combined);
         }
         $Src = Asset($CachedFilePath, False, False);
         // Defer loading of JavaScript
         if ($DeferJavaScript) {
             $this->DeferJavaScriptFiles[] = $Src;
         } else {
             $Tags[] = array(HeadModule::TAG_KEY => 'script', 'type' => 'text/javascript', 'src' => $Src, HeadModule::SORT_KEY => 99);
         }
         //d($RemoveIndex, Flatten($RemoveIndex), @$CombinedCss, @$CombinedJavascript);
     } else {
         if (count($CombinedCss) > 0) {
             foreach ($CombinedCss as $Group => $Files) {
                 $RemoveIndex[] = array_keys($Files);
                 $Files = array_unique($Files);
                 $Hash = self::HashSumFiles($Files);
                 $CachedFilePath = "cache/ps/{$Group}.{$Hash}.css";
                 if (!file_exists($CachedFilePath)) {
                     $Combined = '';
                     foreach ($Files as $Index => $File) {
                         $Combined .= '/*' . basename($File) . "*/\n" . file_get_contents($File) . "\n";
                     }
                     file_put_contents($CachedFilePath, $Combined);
                 }
                 $CssTag[HeadModule::SORT_KEY] += 1;
                 // This is not works...
                 // $CssTag['href'] = Asset($CachedFilePath);
                 // $Tags[] = $CssTag;
                 // This works...
                 $Tags[] = array_merge($CssTag, array('href' => Asset($CachedFilePath, False, False)));
             }
         }
         // TODO: IF ONE FILE IN GROUP NO NEED TO PARSE/COMBINE IT
         if (count($CombinedJavascript) > 1) {
             // TODO: array_unique
             foreach ($CombinedJavascript as $Group => $Files) {
                 $RemoveIndex[] = array_keys($Files);
                 $Files = array_unique($Files);
                 $Hash = self::HashSumFiles($Files);
                 $CachedFilePath = "cache/ps/{$Group}.{$Hash}.js";
                 if (!file_exists($CachedFilePath)) {
                     $Combined = '';
                     foreach ($Files as $Index => $File) {
                         $Combined .= '//' . basename($File) . "\n" . file_get_contents($File) . ";\n";
                     }
                     file_put_contents($CachedFilePath, $Combined);
                 }
                 $Src = Asset($CachedFilePath, False, False);
                 if ($DeferJavaScript) {
                     $this->DeferJavaScriptFiles[] = $Src;
                 } else {
                     $JsTag['src'] = $Src;
                     $JsTag[HeadModule::SORT_KEY] += 1;
                     $Tags[] = $JsTag;
                 }
             }
         }
     }
     if (count($RemoveIndex) > 0) {
         $Tags = self::RemoveKeyFromArray($Tags, Flatten($RemoveIndex));
     }
     $Head->Tags($Tags);
 }
Beispiel #4
0
         $PluginManager->CallEventHandlers($Handler, 'Tick', $Event);
         //K('#'.$Event, (int)K('#'.$Event) + 1);
     } catch (Exception $Exception) {
     }
     Console::Message('Tick: %s', $Event);
     $Events[] = $Event;
 }
 $Event = $Events[1] . '_' . date('l');
 try {
     $PluginManager->CallEventHandlers($Handler, 'Tick', $Event);
     //K('#'.$Event, (int)K('#'.$Event) + 1);
 } catch (Exception $Exception) {
 }
 Console::Message('Tick: %s', $Event);
 $Events[] = $Event;
 $Range = Flatten(array(range(1, 99, 1), range(100, 999, 5)));
 foreach ($Range as $i) {
     foreach ($Ticks as $Second => $Name) {
         $Suffix = $i == 1 ? '' : 's';
         if ($YearSeconds % $Second == 0 && $YearSeconds / $Second % $i == 0) {
             $Event = 'Every_' . $i . '_' . $Name . $Suffix;
             $Events[] = $Event;
             try {
                 $PluginManager->CallEventHandlers($Handler, 'Tick', $Event);
                 //K('#'.$Event, (int)K('#'.$Event) + 1);
             } catch (Exception $Exception) {
             }
             Console::Message('Tick: %s', $Event);
         }
     }
 }