コード例 #1
0
ファイル: Create.php プロジェクト: trickyplan/codeine
                }
            }
        }
    }
    $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>'];
            }
        }
コード例 #2
0
ファイル: Swarm.php プロジェクト: trickyplan/codeine
    // Обходим рой
    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;
});
コード例 #3
0
ファイル: Send.php プロジェクト: trickyplan/codeine
<?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;
});
コード例 #4
0
ファイル: Filter.php プロジェクト: trickyplan/codeine
 $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']);
コード例 #5
0
ファイル: Radiogroup.php プロジェクト: trickyplan/codeine
<?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;
});
コード例 #6
0
ファイル: Scan.php プロジェクト: trickyplan/codeine
<?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;
});
コード例 #7
0
ファイル: ProjectBased.php プロジェクト: trickyplan/codeine
/* 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;
});
コード例 #8
0
ファイル: Extension.php プロジェクト: trickyplan/codeine
<?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;
});
コード例 #9
0
ファイル: Control.php プロジェクト: trickyplan/codeine
<?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;
});
コード例 #10
0
ファイル: Access.php プロジェクト: trickyplan/codeine
<?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;
});
コード例 #11
0
ファイル: Elastic.php プロジェクト: trickyplan/codeine
    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) {
コード例 #12
0
ファイル: Required.php プロジェクト: trickyplan/codeine
<?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;
});
コード例 #13
0
ファイル: Server.php プロジェクト: trickyplan/codeine
                    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;
});
コード例 #14
0
ファイル: Stars.php プロジェクト: trickyplan/codeine
<?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;
});
コード例 #15
0
ファイル: OldSearch.php プロジェクト: trickyplan/codeine
                $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;
});
コード例 #16
0
ファイル: Role.php プロジェクト: trickyplan/codeine
 * @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 {
コード例 #17
0
ファイル: Checkgroup.php プロジェクト: trickyplan/codeine
<?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;
});
コード例 #18
0
ファイル: CLI.php プロジェクト: trickyplan/codeine
/**
 * @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';
コード例 #19
0
ファイル: MorpherRu.php プロジェクト: trickyplan/codeine
     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':
コード例 #20
0
ファイル: Memcached.php プロジェクト: trickyplan/codeine
        }
        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']);
コード例 #21
0
ファイル: Regex.php プロジェクト: trickyplan/codeine
                    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;
});
コード例 #22
0
ファイル: Entity.php プロジェクト: trickyplan/codeine
 * @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 = [];
コード例 #23
0
ファイル: Updated.php プロジェクト: trickyplan/codeine
<?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;
});
コード例 #24
0
ファイル: Reset.php プロジェクト: trickyplan/codeine
 * @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;
});
コード例 #25
0
ファイル: Panel.php プロジェクト: trickyplan/codeine
 $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']];
コード例 #26
0
ファイル: Test.php プロジェクト: trickyplan/codeine
    } 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;
});
コード例 #27
0
ファイル: Verify.php プロジェクト: trickyplan/codeine
                }
            }
        }
        // Вывести
        $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;
});
コード例 #28
0
ファイル: Catalog.php プロジェクト: trickyplan/codeine
<?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']];
コード例 #29
0
ファイル: URL.php プロジェクト: trickyplan/codeine
});
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;
    }
コード例 #30
0
ファイル: Day.php プロジェクト: trickyplan/codeine
<?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]]);
});