} } } } $Call = F::Apply('Entity.Form', 'Generate', $Call, ['IX' => 0, 'Data!' => $Call['Data']]); // Вывести $Call = F::Hook('afterCreateGet', $Call); $Call['Output']['Content']['Form Widget']['Action'] = isset($Call['Action']) ? $Call['Action'] : ''; return $Call; }); setFn('POST', function ($Call) { $Call = F::Hook('beforeCreatePost', $Call); // Берём данные из запроса if (isset($Call['Request']['Data'])) { if (isset($Call['Data'])) { $Call['Data'] = F::Merge($Call['Request']['Data'], $Call['Data']); } else { $Call['Data'] = $Call['Request']['Data']; } } // Отправляем в Entity.Create $Result = F::Run('Entity', 'Create', $Call); if (!isset($Result['Errors']) or empty($Result['Errors'])) { $Call['Data'] = $Result; $Call = F::Hook('afterCreatePost', $Call); } else { foreach ($Result['Errors'] as $Name => $Node) { foreach ($Node as $Error) { $Call['Output']['Message'][] = ['Type' => 'Block', 'Class' => 'alert alert-danger', 'Value' => '<l>' . $Call['Entity'] . '.Error:' . $Name . '.' . $Error . '</l>']; } }
// Обходим рой F::Log('Traversing swarm', LOG_INFO); F::Log($Call['Honey'], LOG_INFO); foreach ($Call['Honey'] as $Honey) { // В рое есть и мы if ($Honey == $Call['HTTP']['Host']) { continue; } // Если мы стучим в того, кто стучал к нам, будет плохо if (isset($Call['Request']['Honey']) && $Call['Request']['Honey'] == $Honey) { continue; } F::Log('Traversing ' . $Honey, LOG_INFO); $Response = F::Run('IO', 'Read', ['Storage' => 'Web', 'Where' => ['ID' => $Call['HTTP']['Proto'] . $Honey . '/swarm']]); F::Log($Response, LOG_INFO); if (empty($Response)) { } else { foreach ($Response as $cResponse) { $Call['Honey'] = F::Merge($Call['Honey'], jd($cResponse, true)['Honey']); } } } // Если нам принесли медок if (isset($Call['Request']['Honey']) && !isset($Call['Honey'][sha1($Call['Request']['Honey'])])) { $Call['Honey'][sha1($Call['Request']['Honey'])] = $Call['Request']['Honey']; // Медок в горшок! F::Run('IO', 'Write', ['Storage' => 'Swarm', 'Scope' => $Call['HTTP']['Host'], 'Where' => ['ID' => $Call['Swarm']['ID']], 'Data' => $Call['Honey']]); } $Call['Output']['Content']['Honey'] = $Call['Honey']; return $Call; });
<?php /* Codeine * @author bergstein@trickyplan.com * @description * @package Codeine * @version 8.x */ setFn('Do', function ($Call) { $Message['Scope'] = $Call['To']; // FIXME $Message['ID'] = $Call['Subject']; $Message['Data'] = F::Run('View', 'Load', $Call, ['Scope' => $Call['Entity'], 'ID' => 'Show/EMail']); $Message['Headers'] = array('Content-type:' => ' text/html; charset="utf-8"'); F::Run('Code.Run.Delayed', 'Run', ['Run' => F::Merge($Call['Sender'], ['Call' => $Message])]); return $Call; });
$Widget['Entity'] = $Call['Entity']; $Widget['Label'] = $Call['Entity'] . '.Entity:' . $Name; $Widget['Node'] = $Name; $Widget['Name'] = 'Filter'; if (strpos($Name, '.') !== false) { $Slices = explode('.', $Name); foreach ($Slices as $Slice) { $Widget['Name'] .= '[' . $Slice . ']'; } } else { $Widget['Name'] .= '[' . $Name . ']'; } $Widget['Key'] = $Name; $Widget['ID'] = strtr($Name, '.', '_'); $Widget['Context'] = $Call['Context']; $Widget = F::Merge($Node, $Widget); if (isset($Call['Data'])) { $Widget['Data'] = $Call['Data']; } if (isset($Widget['Options'])) { $Widget['Options'] = F::Live($Widget['Options'], $Call); } else { $Widget['Options'] = []; } /* if($ic == 0) $Widget['Autofocus'] = true;*/ // Если есть значение, добавляем if (isset($Call['Data'])) { if (($Widget['Value'] = F::Dot($Call['Data'], $Name)) === null) { if (isset($Node['Default'])) { $Widget['Value'] = F::Live($Node['Default']);
<?php /* Codeine * @author bergstein@trickyplan.com * @description * @package Codeine * @version 8.x */ setFn('Make', function ($Call) { $Call['Radios'] = ''; foreach ($Call['Options'] as $Key => $Value) { if (isset($Call['Localized']) && $Call['Localized']) { if (!isset($Call['Values Locale'])) { $Call['Values Locale'] = $Call['Entity'] . '.Entity:' . $Call['Key']; } $lValue = '<l>' . $Call['Values Locale'] . '.' . $Value . '</l>'; } else { $lValue = $Value; } if (isset($Call['Keys as values']) && $Call['Keys as values']) { $lValue = $Value; $Value = $Key; } $Call['Radios'] .= F::Run('View', 'Load', ['Scope' => $Call['View']['HTML']['Widget Set'] . '/Widgets', 'ID' => 'Form/Radio', 'Data' => F::Merge($Call, ['Label' => $lValue, 'Value' => $Value, 'Checked' => $Value == $Call['Value'] ? 'checked' : ''])]); } return $Call; });
<?php /* Codeine * @author bergstein@trickyplan.com * @description * @package Codeine * @version 8.x */ setFn('Title', function ($Call) { if (preg_match_all('@<subtitle>(.*)<\\/subtitle>@SsUu', $Call['Output'], $Pockets)) { $Call['View']['HTML']['Title'] = F::Merge($Call['View']['HTML']['Title'], $Pockets[1]); $Call['Output'] = str_replace($Pockets[0], '', $Call['Output']); } return $Call; }); setFn('Keywords', function ($Call) { if (preg_match_all('@<keyword>(.*)<\\/keyword>@SsUu', $Call['Output'], $Pockets)) { $Call['View']['HTML']['Keywords'] = F::Merge($Call['View']['HTML']['Keywords'], $Pockets[1]); $Call['Output'] = str_replace($Pockets[0], '', $Call['Output']); } return $Call; }); setFn('Description', function ($Call) { if (preg_match_all('@<description>(.*)<\\/description>@SsUu', $Call['Output'], $Pockets)) { $Call['View']['HTML']['Description'] = F::Merge($Call['View']['HTML']['Description'], $Pockets[1]); $Call['Output'] = str_replace($Pockets[0], '', $Call['Output']); } return $Call; });
/* Codeine * @author bergstein@trickyplan.com * @description * @package Codeine * @version 8.x */ setFn('Do', function ($Call) { if (is_array($Call['Project']['Hosts'][F::Environment()])) { $Hosts = $Call['Project']['Hosts'][F::Environment()]; } else { $Hosts = [$Call['Project']['Hosts'][F::Environment()]]; } // Select Default Host if (isset($_SERVER['HTTP_HOST'])) { if (in_array($_SERVER['HTTP_HOST'], $Hosts)) { $Call['HTTP']['Host'] = $_SERVER['HTTP_HOST']; } } if (isset($Call['HTTP']['Host'])) { F::Log('Host is determined: *' . $Call['HTTP']['Host'] . '*', LOG_INFO); } else { $Call['HTTP']['Host'] = $Hosts[0]; F::Log('Host is not determined, default selected', LOG_WARNING); } if (isset($Call['Project']['Active Hosts'][$Call['HTTP']['Host']])) { $Call = F::Merge($Call, $Call['Project']['Active Hosts'][$Call['HTTP']['Host']]); F::Log('Active host loaded: *' . $Call['HTTP']['Host'] . '*', LOG_INFO); } return $Call; });
<?php /* Codeine * @author bergstein@trickyplan.com * @description: * @package Codeine * @version 8.x * @date 31.08.11 * @time 6:17 */ setFn('beforeRoute', function ($Call) { if (isset($Call['Routing']['Extension']) && is_string($Call['Run'])) { foreach ($Call['Routing']['Extension'] as $Extension => $ExtensionMixin) { $Pattern = '/\\.' . $Extension . '$/'; if (preg_match($Pattern, $Call['Run'])) { $Call['Extension Call'] = $ExtensionMixin; $Call['Run'] = preg_replace($Pattern, '', $Call['Run']); F::Log('.' . $Extension . ' extension detected', LOG_INFO); break; } } } return $Call; }); setFn('afterRoute', function ($Call) { if (isset($Call['Extension Call'])) { $Call['Run'] = F::Merge($Call['Run'], $Call['Extension Call']); } return $Call; });
<?php /* Codeine * @author bergstein@trickyplan.com * @description * @package Codeine * @version 8.x */ setFn('Do', function ($Call) { $Call['Layouts'][] = ['Scope' => 'IO', 'ID' => 'Overview']; return $Call; }); setFn('Storages', function ($Call) { $Call['Layouts'][] = ['Scope' => 'IO', 'ID' => 'Storages']; $IO = F::loadOptions('IO'); foreach ($IO['Storages'] as $Name => $Storage) { $Storage['Status'] = F::Run('IO', 'Open', $Call, ['Storage' => $Name]) !== null; $Storage['Size'] = F::Run('IO', 'Execute', $Call, ['Execute' => 'Size', 'Storage' => $Name]); $Call['Output']['Content'][] = ['Type' => 'Template', 'Scope' => 'IO', 'ID' => 'Control/Show/Short', 'Data' => F::Merge(['Name' => $Name], $Storage)]; } return $Call; });
<?php /* Codeine * @author bergstein@trickyplan.com * @description * @package Codeine * @version 7.1 */ setFn('Check', function ($Call) { if (F::isCall($Call['Run'])) { $Call = F::Merge($Call, $Call['Run']); } unset($Call['Decision'], $Call['Weight']); switch (F::Run('Security.Access', 'Check', $Call)) { case true: F::Log('Access to Application ' . self::hashCall($Call['Run']) . ' allowed', LOG_NOTICE, 'Security'); $Call = F::Hook('Access.Allowed', $Call); break; default: F::Log('Access to Application ' . self::hashCall($Call['Run']) . ' denied', LOG_NOTICE, 'Security'); $Call = F::Hook('Access.Denied', $Call); break; } return $Call; });
if (isset($Call['Where'])) { $Call['Where'] = F::Live($Call['Where'], $Call); } else { $Call['Where'] = []; } // FIXME User Faceting if ($Results['hits']['total'] > 0) { foreach ($Results['hits']['hits'] as $Hit) { $Hit['_source']['Scope'] = $Call['Scope']; $Call['Where']['ID'] = $Hit['_id']; $Data = F::Run('Entity', 'Read', ['Entity' => $Call['Scope'], 'One' => true, 'Fields' => $Call['Show fields'], 'Where' => $Call['Where']]); if (empty($Data)) { } else { $IX++; if (isset($Call['Default'])) { $Data = F::Merge($Call['Default'], $Data); } $Data['Snippet'] = isset($Hit['highlight'][$Call['Highlight']][0]) ? $Hit['highlight'][$Call['Highlight']][0] : ''; $Data['Provider'] = '<l>' . $Call['Scope'] . '.Control:Title</l>'; // FIXME $SERP[$Hit['_id']] = ['Score' => $Hit['_score'], 'Type' => 'Template', 'Scope' => $Call['Scope'], 'ID' => 'Show/Search', 'Data' => $Data]; } } $Results['hits']['total'] = $IX; } else { $SERP = null; } $Meta = ['Hits' => [$Call['Scope'] => $Results['hits']['total']]]; return ['Meta' => $Meta, 'SERP' => $SERP]; }); setFn('Remove', function ($Call) {
<?php /* Codeine * @author bergstein@trickyplan.com * @description * @package Codeine * @version 8.x */ setFn('Process', function ($Call) { if (isset($Call['Node']['Required']) && $Call['Node']['Required'] && !isset($Call['Node']['Nullable'])) { if (isset($Call['Current'][0])) { $Produced = F::Merge($Call['Current'][0], $Call['Data']); } else { $Produced = $Call['Data']; } if (F::Dot($Produced, $Call['Name']) === null) { F::Log('Required key ' . $Call['Entity'] . '.' . $Call['Name'] . ' not defined', LOG_ERR); return 'Required'; } } return true; });
unset($Call['HTTP']['Headers']['HTTP/1.1']); if (isset($Call['HTTP']['Headers'])) { foreach ($Call['HTTP']['Headers'] as $Key => $Value) { $Headers .= $Key . ' ' . $Value . PHP_EOL; } } $Call['Output'] = $Headers . PHP_EOL . time(); fwrite($Client, $Call['Output']); } fclose($Client); } } } else { F::Log('Server creating error', LOG_ERR); } return $Call; }); setFn('Protocol', function ($Call) { if (isset($Call['Project']['Hosts'][F::Environment()])) { if (preg_match('/(\\S+)\\.' . $Call['Project']['Hosts'][F::Environment()] . '/', $_SERVER['HTTP_HOST'], $Subdomains) && isset($Call['Subdomains'][$Subdomains[1]])) { $Call = F::Merge($Call, $Call['Subdomains'][$Subdomains[1]]); F::Log('Active Subdomain detected: ' . $Subdomains[1], LOG_INFO); } $Call['HTTP']['Host'] = $Call['Project']['Hosts'][F::Environment()]; } F::Log('Protocol is *' . $Call['HTTP']['Proto'] . '*', LOG_INFO); F::Log('RHost is *' . $Call['HTTP']['Host'] . '*', LOG_INFO); F::Log('Host is *' . $Call['HTTP']['Host'] . '*', LOG_INFO); $Call = F::loadOptions($Call['HTTP']['Host'], null, $Call); return $Call; });
<?php /* Codeine * @author bergstein@trickyplan.com * @description * @package Codeine * @version 8.x */ setFn('Make', function ($Call) { $Call['HTML'] = ''; for ($IC = 1; $IC <= $Call['Stars']; $IC++) { $StarData = ['Num' => $IC]; if (isset($Call['Value']) && $Call['Value'] == $IC) { $StarData['Checked'] = 'checked'; } $Call['HTML'] .= F::Run('View', 'Load', ['Scope' => $Call['View']['HTML']['Widget Set'] . '/Widgets', 'ID' => 'Form/Star', 'Data' => F::Merge($Call, $StarData)]); } $Call['Value'] = $Call['HTML']; return $Call; });
$Call['Output'][$Provider] = []; $ProviderCall = $Call['Providers'][$Provider]; if (isset($ProviderCall['Non-vertical']) && $ProviderCall['Non-vertical']) { if (in_array($Provider, $Call['Provider'])) { } else { continue; } } $ProviderCall['Method'] = 'Query'; $Results = F::Live($ProviderCall, $Call); if (isset($Results['Meta'])) { $Call = F::Merge($Call, $Results['Meta']); } if (isset($Results['SERP']) && !empty($Results['SERP'])) { $Call['Output']['Content'] = F::Merge($Call['Output']['Content'], $Results['SERP']); $Call['Output'][$Provider] = F::Merge($Call['Output'][$Provider], $Results['SERP']); } $Call['Hits']['All'] += $Results['Meta']['Hits'][$Provider]; } } $Call['Output']['Content'] = F::Sort($Call['Output']['Content'], 'Score', SORT_DESC); } $Call['Empty Query'] = empty($Call['Query']); if ($Call['Hits']['All'] == 0) { $Call['Output']['Content'] = [['Type' => 'Template', 'Scope' => 'Search', 'ID' => 'Empty']]; } else { $Call['Output']['Content'] = F::Sort($Call['Output']['Content'], 'Score', SORT_DESC); } $Call = F::Hook('afterSearchQuery', $Call); return $Call; });
* @author bergstein@trickyplan.com * @description * @package Codeine * @version 8.x */ setFn('Check', function ($Call) { // Определить право foreach ($Call['Rights'] as $RID => $Right) { if (F::Diff($Right, $Call) === null) { $Call['Right'] = $RID; break; } } // Определить роль if (isset($Call['Session']['User']['Role'])) { $Call['Role'] = F::Merge($Call['Role'], $Call['Session']['User']['Role']); } // Проверить, если доступно if (isset($Call['Right'])) { foreach ($Call['Role'] as $Role) { if (isset($Call['Roles'][$Role])) { if (isset($Call['Roles'][$Role]['Rights'][$Call['Right']])) { $Call['Decision'] = $Call['Roles'][$Role]['Rights'][$Call['Right']]; } else { F::Log('Permission for ' . $Call['Right'] . ' not configured', LOG_WARNING); } } else { F::Log('Unknown role', LOG_WARNING); } } } else {
<?php /* Codeine * @author bergstein@trickyplan.com * @description * @package Codeine * @version 8.x */ setFn('Make', function ($Call) { $Call['Checks'] = ''; $Call['Name'] .= '[]'; foreach ($Call['Options'] as $Key => $Value) { if (isset($Call['Localized']) && $Call['Localized']) { $lValue = '<l>' . $Call['Entity'] . '.Entity:' . $Call['Key'] . '.' . $Value . '</l>'; } else { $lValue = $Value; } $Checked = $Key == $Call['Value'] || $Value == $Call['Value'] || is_array($Call['Value']) && in_array($Value, $Call['Value']); $Call['Checks'] .= F::Run('View', 'Load', ['Scope' => $Call['View']['HTML']['Widget Set'] . '/Widgets', 'ID' => 'Form/Checkgroup/Checkbox', 'Data' => F::Merge($Call, ['Value' => $Value, 'Checked' => $Checked, 'Label' => $lValue, 'Checked' => $Checked ? 'checked' : ''])]); } return $Call; });
/** * @author bergstein@trickyplan.com * @time 5:17 */ include 'Core.php'; $Opts = []; foreach ($argv as $arg) { if (preg_match('/^--([^=]+)\\=(.+)$/Ssu', $arg, $Pockets)) { $Opts = F::Dot($Opts, strtr($Pockets[1], '_', ' '), $Pockets[2]); F::Log($Pockets[1] . ' = ' . $Pockets[2], LOG_INFO); } else { $Opts[] = $arg; } } if (isset($Opts[1]) && file_exists($Opts[1])) { if ($Opts = F::Merge(jd(file_get_contents($Opts[1]), true), $Opts)) { F::Log('JSON CLI parameters loaded from ' . $Opts[1], LOG_INFO); } } if (file_exists('/etc/default/codeine')) { define('Root', file_get_contents('/etc/default/codeine')); } !defined('Root') ? define('Root', getcwd()) : false; F::Log('Root folder: ' . Root, LOG_INFO); if (empty($Opts)) { F::Log('Empty CLI parameters', LOG_INFO); } else { if (isset($Opts['Service'])) { if (isset($Opts['Method'])) { } else { $Opts['Method'] = 'Do';
if (file_exists($Call['Morpher Lock'])) { if (filectime($Call['Morpher Lock']) < time() - 86400) { if (unlink($Call['Morpher Lock'])) { F::Log('Morpher lockfile deleted', LOG_INFO); } } else { F::Log('Morpher lockfile found', LOG_INFO); $Lock = true; } } if ($Lock) { F::Log('Morpher Locked', LOG_INFO); } else { $Query = ['s' => $Call['Value']]; if (isset($Call['MorpherRu']['Auth'])) { $Query = F::Merge($Query, $Call['MorpherRu']['Auth']); } $WebResult = F::Run('IO', 'Read', ['Storage' => 'Web', 'Where' => 'http://api.morpher.ru/WebService.asmx/GetXml', 'Format' => 'Formats.XML', 'Data' => $Query]); $WebResult = array_pop($WebResult); F::Run('IO', 'Write', ['Storage' => 'Morpher Ru Cache', 'Where' => ['ID' => sha1($Call['Value'])], 'Data' => $WebResult]); } } if (isset($WebResult['error']) && $WebResult['error']['code'] == 1) { F::Log('Morpher quota exceeded. Lockfile added.', LOG_INFO); touch($Call['Morpher Lock']); } else { $Result = $Call['Value']; switch ($Call['Case']) { case 'Nominativus': break; case 'Genitivus':
} return $Call['Link']->getMulti($Call['Where']['ID']); } else { if (($Result = $Call['Link']->get($Call['Scope'] . $Call['Where']['ID'])) !== false) { return [$Result]; } else { return null; } } }); setFn('Write', function ($Call) { if (isset($Call['Where'])) { if (null === $Call['Data']) { $Call['Link']->delete($Call['Scope'] . $Call['Where']['ID']); } else { $Call['Data'] = F::Merge(F::Run(null, 'Read', $Call)[0], $Call['Data']); $Call['Link']->set($Call['Scope'] . $Call['Where']['ID'], $Call['Data'], $Call['TTL']); } } else { $Call['Link']->set($Call['Scope'] . $Call['Data']['ID'], $Call['Data'], $Call['TTL']); } return $Call['Data']; }); setFn('Close', function ($Call) { return true; }); setFn('Execute', function ($Call) { return true; }); setFn('Exist', function ($Call) { return $Call['Link']->get($Call['Scope'] . $Call['Where']['ID']);
F::Log('Rule *' . $Name . '* matched', LOG_DEBUG); if (isset($Call['Routing']['Rule']['Mixin']) && $Call['Routing']['Rule']['Mixin']) { $Call['Mixin'] = $Call['Routing']['Rule']; $Call['Run'] = str_replace($Matches[0], '', $Call['Run']); F::Log('Regex *mixin* *' . $Name . '* applied *' . $Call['Run'] . '*', LOG_INFO); } else { $Weight = $Call['Routing']['Rule']['Weight']; $Decision = $Call['Routing']['Rule']; $Selected = $Name; } /*if (isset($Call['Routing']['Rule']['Last']) && $Call['Routing']['Rule']['Last']) break;*/ } } } } else { F::Log('Routes table corrupted', LOG_CRIT); } // FIXME if (isset($Selected)) { F::Log('Rule *' . $Selected . '* selected after ' . ($ix . ' of ' . sizeof($Call['Regex'])), LOG_INFO); } else { F::Log('Rule not selected', LOG_INFO); } $Call['Run'] = $Decision; if (isset($Call['Mixin'])) { $Call['Run'] = F::Merge($Call['Run'], $Call['Mixin']); } unset($Call['Regex']); return $Call; });
* @version 7.4 */ setFn('Load', function ($Call) { if (!isset($Call['Entity'])) { F::Log('Entity not defined.', LOG_ERR); return null; } $Call['Nodes'] = $Call['Default Nodes']; $Call = F::Hook('beforeEntityLoad', $Call); $Model = F::loadOptions($Call['Entity'] . '.Entity'); // FIX Validate if (!empty($Model)) { if (!isset($Model['EV'])) { $Model['EV'] = 1; } $Call = F::Merge($Call, $Model); } else { F::Log('Model for ' . $Call['Entity'] . ' not found', LOG_CRIT); } if (isset($Call['Nodes'])) { $Call['Nodes'] = F::Sort($Call['Nodes'], 'Weight', SORT_DESC); } else { F::Log('Nodes not loaded', LOG_WARNING); } $Call = F::Hook('afterEntityLoad', $Call); $Call['entity'] = strtr(strtolower($Call['Entity']), '.', '/'); // Hm. return $Call; }); setFn('Create', function ($Call) { $Data = [];
<?php /* Codeine * @author bergstein@trickyplan.com * @description * @package Codeine * @version 8.x */ setFn('Process', function ($Call) { if (isset($Call['Current'])) { $Call['Data'] = F::Merge($Call['Current'], $Call['Data']); } return $Call; });
* @version 8.x */ setFn('Do', function ($Call) { $Call = F::Hook('beforeReset', $Call); return F::Run(null, $Call['HTTP']['Method'], $Call); }); setFn('ByID', function ($Call) { $Call['User'] = F::Run('Entity', 'Read', $Call, ['Entity' => 'User', 'One' => true]); if (empty($Call['User'])) { $Call['Output']['Content'][] = ['Type' => 'Template', 'Scope' => 'User', 'ID' => 'Reset/404']; } else { $Call['User']['Password'] = F::Live($Call['Reset']['Generator']); $Password = $Call['User']['Password']; $Call['User'] = F::Run('Entity', 'Update', ['Entity' => 'User', 'Purpose' => 'Reset', 'One' => true, 'Where' => $Call['User']['ID'], 'Data' => $Call['User']]); $VCall = $Call; $VCall['Layouts'] = [['Scope' => 'Project', 'ID' => 'Zone', 'Context' => 'mail']]; $VCall['Output']['Content'][] = ['Type' => 'Template', 'Scope' => 'User/Reset', 'ID' => 'EMail', 'Data' => F::Merge($Call['User'], ['Password' => $Password])]; $VCall = F::Run('View', 'Render', $VCall, ['Context' => 'mail']); F::Run('IO', 'Write', $VCall, ['Storage' => $Call['Reset']['Send To'], 'Where' => 'Восстановление пароля', 'Scope' => $Call['User']['EMail'], 'Data' => $VCall['Output']]); F::Log('User reset password ' . $Call['User']['ID'], LOG_INFO, 'Security'); $Call['Output']['Content'][] = ['Type' => 'Template', 'Scope' => 'User', 'ID' => 'Reset/Success']; } return $Call; }); setFn('POST', function ($Call) { return F::Run(null, 'ByID', $Call, ['Where' => ['EMail' => $Call['Request']['EMail']]]); }); setFn('GET', function ($Call) { $Call['Output']['Content'][] = ['Type' => 'Template', 'Scope' => 'User', 'ID' => 'Reset/Form']; return $Call; });
$Call['Layouts'][] = ['Scope' => $Call['Bundle'], 'ID' => 'Control']; $Navigation = []; F::Log('Control Panel Navigation', LOG_NOTICE); if (isset($Call['Bundles'])) { foreach ($Call['Bundles'] as $Group => $Bundles) { if (in_array($Call['Bundle'], $Bundles)) { $Call['Group'] = $Group; } $GroupOptions = []; foreach ($Bundles as $Bundle) { $Options = ['ID' => $Bundle, 'Bundle' => strtr($Bundle, '.', '/'), 'URL' => '/control/' . $Bundle, 'Title' => '<l>' . $Bundle . '.Control:Title</l>', 'Group' => $Group, 'Status' => 'default']; if (isset($Call['Icons'][$Bundle])) { $Options['Icon'] = $Call['Icons'][$Bundle]; } if (($BundleOptions = F::Run($Bundle . '.Control', 'Menu', ['Bundle' => $Bundle])) !== null) { $Options = F::Merge($Options, $BundleOptions); } $GroupOptions[] = $Options; } if (count($GroupOptions) > 0) { $Navigation[] = $Group; $Navigation = array_merge($Navigation, $GroupOptions); } } if (isset($Call['Sidebar']) && is_array($Call['Sidebar'])) { $Actions = []; foreach ($Call['Sidebar'] as &$Sidebar) { $Call['Run'] = ['Service' => 'Control.Panel', 'Method' => 'Do', 'Call' => ['Bundle' => $Call['Bundle'], 'Option' => $Sidebar]]; $Actions[] = ['ID' => $Sidebar, 'URL' => '/control/' . $Call['Bundle'] . '/' . $Sidebar, 'Title' => '<l>' . $Call['Bundle'] . '.Control:Options.' . $Sidebar . '</l>']; } $Call['Output']['Sidebar'][] = ['Type' => 'Navlist', 'Scope' => 'Navlist', 'Options!' => $Actions, 'Value' => $Call['Option']];
} else { $Call = F::Hook('onTestNotFound', $Call); } return $Call; }); setFn('Do', function ($Call) { $Paths = F::getPaths(); $Options = []; if (isset($Call['Test']['Name'])) { F::Log('Test *' . $Call['Test']['Name'] . '* selected', LOG_INFO); $VCall = F::Apply(null, 'Run', ['Test' => $Call['Test']['Name']], $Call); $Call['Test']['Report'] = F::Merge($Call['Test']['Report'], $VCall['Test']['Report']); } else { F::Log('Running all tests!', LOG_INFO); foreach ($Paths as $Path) { if (is_dir($Path . '/Tests')) { $Directory = new RecursiveDirectoryIterator($Path . '/Tests'); $Iterator = new RecursiveIteratorIterator($Directory); $Regex = new RegexIterator($Iterator, '@Tests/(.+).json$@', RecursiveRegexIterator::GET_MATCH); $Options = array_merge($Options, iterator_to_array($Regex)); } } sort($Options); foreach ($Options as $Option) { $VCall = F::Apply(null, 'Run', $Call, ['Test' => ['Name' => $Option[1]]]); $Call['Test']['Report'] = F::Merge($Call['Test']['Report'], $VCall['Test']['Report']); } } $Call['Output']['Content'][] = ['Type' => 'Table', 'Value' => $Call['Test']['Report']]; return $Call; });
} } } // Вывести $Call['Output']['Content']['Form Widget']['Action'] = isset($Call['Action']) ? $Call['Action'] : ''; } $Call = F::Hook('afterVerifyGet', $Call); return $Call; }); setFn('POST', function ($Call) { if (isset($Call['Request']['Data'])) { $Call['Data'] = $Call['Request']['Data']; } else { $Call['Data'] = []; } $Call = F::Hook('beforeVerifyPost', $Call); // Отправляем в Entity.Verify $Call['Data'] = F::Merge(F::Run('Entity', 'Read', $Call, ['Time' => microtime(true)]), F::Apply('Entity', 'Update', $Call)); // Выводим результат if (empty($Call['Errors'])) { $Call = F::Hook('afterVerifyPost', $Call); } else { foreach ($Call['Errors'] as $Name => $Node) { foreach ($Node as $Error) { $Call['Output']['Message'][] = ['Type' => 'Block', 'Class' => 'alert alert-danger', 'Value' => '<l>' . $Call['Entity'] . '.Error:' . $Name . '.' . $Error . '</l>']; } } $Call = F::Apply(null, 'GET', $Call); } return $Call; });
<?php /* Codeine * @author bergstein@trickyplan.com * @description * @package Codeine * @version 7.4 */ setFn('Do', function ($Call) { $Call = F::Merge(F::loadOptions('Entity.' . $Call['Entity']), $Call); // FIXME $Call['Layouts'][] = ['Scope' => $Call['Entity'], 'ID' => 'Catalog', 'Context' => $Call['Context']]; $Call['Fields'] = [$Call['Key']]; $Call = F::Hook('beforeCatalog', $Call); if (isset($Call['No Catalog Entity'])) { $Elements = F::Run('Entity', 'Read', $Call, ['Entity' => $Call['Entity'], 'Fields' => [$Call['Key']], 'Distinct' => true]); $Elements = F::Extract($Elements, $Call['Key']); } else { $Elements = F::Run('Entity', 'Read', ['Entity' => $Call['Key'], 'Where' => []]); $Elements = F::Extract($Elements, 'ID'); } $Values = []; if (count($Elements) > 0) { foreach ($Elements as $Element) { $Value = F::Run('Entity', 'Count', ['Entity' => $Call['Entity'], 'Where' => [$Call['Key'] => $Element]]); if ($Value > 0) { $Values[$Element] = $Value; } } arsort($Values); $Call['Output']['Content'][] = ['Type' => 'TagCloud', 'Value' => $Values, 'Context' => $Call['Context'], 'Minimal' => $Call['Minimal'], 'Entity' => $Call['Entity'], 'Key' => $Call['Key']];
}); setFn('GET', function ($Call) { $Call['Layouts'][] = ['Scope' => 'Parser', 'ID' => 'URL']; return $Call; }); setFn('POST', function ($Call) { $Call['URL'] = $Call['Request']['Data']['URL']; $Call['Data'] = F::Run('Parser.URL', 'Parse', $Call); $Call['Output']['Content'][] = ['Type' => 'Block', 'Value' => j($Call['Data'])]; return $Call; }); setFn('Parse', function ($Call) { if ($Call['Schema'] = F::Run('Parser', 'Discovery', $Call)) { F::Log('Schema is ' . $Call['Schema'], LOG_INFO); $Schema = F::loadOptions('Parser/' . $Call['Schema']); $Call = F::Merge($Call, $Schema); $Result = F::Live($Call['Parser']['URL']['Backend'], ['Where' => ['ID' => $Call['URL']]]); $Result = array_pop($Result); $Call = F::Run('Parser', 'Do', $Call, ['Markup' => $Result]); $Slices = explode('/', $Call['Schema']); $Call['Entity'] = array_pop($Slices); $Call['Data']['Source'] = $Call['URL']; if (isset($Call['Parser']['Create']['Auto']) && $Call['Parser']['Create']['Auto']) { $Call['Data'] = F::Run('Entity', 'Create', $Call, ['One' => true]); } if (isset($Call['Data']['ID'])) { $Call = F::Run('System.Interface.HTTP', 'Redirect', $Call, ['Redirect' => '/control/' . $Call['Entity'] . '/Show/' . $Call['Data']['ID']]); } } else { $Call['Data'] = null; }
<?php /* Codeine * @author bergstein@trickyplan.com * @description * @package Codeine * @version 8.x */ setFn('Do', function ($Call) { $DayStart = new DateTime('midnight today'); $DayFinish = new DateTIme('midnight tomorrow'); return F::Merge($Call['Where'], [$Call['Selector']['Day']['Key'] => ['$gte' => $DayStart->getTimestamp() + $Call['Selector']['Day']['Increment'] * 86400, '$lt' => $DayFinish->getTimestamp() + $Call['Selector']['Day']['Increment'] * 86400]]); });