Запись [f:admin/_main.php] < dev.sky.1.001

Версия 1.001

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
<?php eval($me) or die;
 
# For Licence and Disclaimer of this code, see http://coresky.net/license
 
'INFO_' == substr($PVAL05) && phpinfo($sky->traced constant($PVAL)) && exit;
 
$server_ip $_SERVER['SERVER_ADDR'];
$submenu = array('Summary''phpinfo()''Settings''Menu''Cache''Guard''Reserved''X-tracing''Log CRON''Log ERROR');
$SUBMENU = array();
$allow_submenu == $user->pid '11111111111' '11000001111';
foreach ($submenu as $k => $v) if (!$k || DEBUG || $allow_submenu[$k]) $SUBMENU[$k] = $v;
 
$TOP sprintf("<b>$TOP &gt; %s</b> : "$name == $PVAL 'Development settings' : @$SUBMENU[$PVAL intval($PVAL)]);
$title .= " > $name";
define('TPL_MENU'"?$me=$PVAL&id=%d");
$main substr(TPL_MENU0, -2) . ($WVAL intval($WVAL));
$production sprintf(span_r'Submenu not allowed in production mode!');
$no_html false;
 
if (!DEBUG && $PVAL && !$allow_submenu[$PVAL]) $TOP .= $production; else switch ($PVAL):
case 0# Summary
    $menu = array(=> 'SKY memory''Objects''Functions''Variables''Constants');
    $TOP .= DEBUG || $allow_submenu[0] ? menu($WVAL$menu) : $production;
    if (DEBUG || !$WVAL || $allow_submenu[0]) switch ($WVAL) {
        case 0# write here code for main page
            $ltime PHP_OS == 'WINNT' shell_exec('date /t & time /t') : shell_exec('date'); # 2do - MAC PC
            $utime PHP_OS == 'WINNT' preg_replace("@^.*?(\d+/\d+/\d{4} \d+:\d+ [A|P]M).*$@s""$1"shell_exec('net stats srv')) : shell_exec('uptime');
            $mailtest PHP_OS == 'WINNT' '-' : ($server_ip == @$s_server_ip 'OK' 'not passed');
            $out = array(
                'Default site title' => $s_title,
                'Primary configuration' => sprintf('DEV = %d, DEBUG = %d, ENC = %s, PHPDIR = %s'DEVDEBUGENCPHP_BINDIR),
                'System' => PHP_OS == 'WINNT' 'WINNT' shell_exec('uname -a'),
                'Server IP' => "$server_ip, PHP Mail test - $mailtest",
                'Server localtime' => $ltime# shell_exec('date');
                'Server uptime' => $utime,    # shell_exec('uptime')
            );
            $ary = array('phpversion' => 'PHP version''zend_version' => 'Zend engine version');
            foreach ($ary as $k => $v$out["$v:"] = $k();
            $out += array(
                'MySQL version:' => sql("+select version()"),
                'HTTP server version' => $_SERVER['SERVER_SOFTWARE'],
                'Visitors online:' => $s_online,
                'PHP NOW, GMT:' => gmdate(DATE_DT),
                'PHP NOW:' => NOW " ($s_php_tz)",
                'SQL NOW:' => sql("+select now()") . " ($s_sql_tz)",
                'Cron layer last tick:' => $s_cron_dt,
                'Backup settings:' => sql("+select dt from memory where id=7"),
                'Timestamp NOW:' => time(),
                'Max timestamp:' => sprintf('%d (PHP_INT_MAX), GMT: %s'PHP_INT_MAXgmdate(DATE_DTPHP_INT_MAX)),
                'Table `memory`, rows:' => sql("+select count(1) from memory"),
                'Table `visitors`, rows:' => sql("+select count(1) from visitors"),
                'Table `users`, rows:' => sql("+select count(1) from users"),
                'E-Mail days count:' => $sky->s_email_cnt,
            );
            break;
        case 1$out $sky->mem['s'][3]; break;
        case 3$out get_defined_functions(); $out print_r($out['user'], true); break;
        case 2: 
        case 4$out = []; $_out get_defined_vars(); array_splice($_out05);
            $_out array_filter($_outcreate_function('$v''global $WVAL; return 4 == $WVAL ^ is_object($v);'));
            $no_html true;
            foreach ($_out as $k => $v) {
                is_string($v) or is_int($v) or $v print_r($vtrue);
                $v html($v);
                if (strlen($v) > 500$v substr($v0500) . sprintf(span_r' cutted...');
                $out[$k] = $v;
            }
            break;
        case 5$list array_keys($ary get_defined_constants(true));
            $g_c = isset($g_c) ? intval($g_c) : array_search('user'$list);
            $out $ary[$list[$g_c]];
            $TOP .= sprintf('<form>%s<select name="c" id="sm-select">%s</select></form>'hidden(array('main' => 0'id' => 5)), option($g_c$list));
            break;
    }
    break;
 
case 1:
    $TOP .= menu($WVAL$menu = array(-=> 'ALL''General''Credits''Configuration''Modules''Environment''Variables''License'));
    printf('<iframe src="?main=INFO_%s" style="width:100%%; height:100%%; border:0"></iframe>'strtoupper($menu[$WVAL]));
    break;
 
case 2:
    $have_users sql("+select count(1) from users");
    if ($_POST) {
        $have_users or $_POST['crypt'] = (int)isset($p_crypt);
        $_POST['trace_prod'] = (int)isset($p_trace_prod);
        $_POST['trace_cli'] = (int)isset($p_trace_cli);
        $_POST['prod_error'] = (int)isset($p_prod_error);
        $_POST['cache_fast'] = (int)isset($p_cache_fast);
        $_POST['trace_root'] = (int)isset($p_trace_root);
        $sky->save($_POST) && jump();
    }
    echo tag(form($sky->mem['s'][3], array(
        'php_tz'        => array('''PHP Timezone''''Europe/Kiev'),
        'sql_tz'        => array('''SQL Timezone''''+2:00'),
        'trace_root'    => array('checkbox''Debug mode on production for `root` profile'), '<br>',
        'trace_cli'     => array('checkbox''CLI (cron) tracing on production to `X-tracing`'), '<br>',
        'trace_prod'    => array('checkbox''Single-click tracing on production to `X-tracing`'), '<br>',
        'prod_error'    => array('checkbox''Collect errors on production to `Log ERROR`'), "",
        '<fieldset><legend>Visitor\'s settings</legend>',
            'c_manda'   => array('radio''Hide all content if no cookies', array('No''Yes')),
            'j_manda'   => array('radio''Hide all content if no javascripts', array('No''Yes')),
            'c_name'    => array('''Cookie name''''sky'),
            'c_upd'     => array('''Cookie updates, minutes'''60),
            'visit'     => array('''One visit break after, off minutes'''5),
            'clear'     => array('''Visitor\'s table cleaning (by cron)''''interval 2 day'),
            'scheme_2'  => array('''Visitor\'s online scheme 2''''100'),
        '</fieldset><br>',
        '<fieldset><legend>Register\'s settings</legend>',
            'crypt'     => array('checkbox''Store passwords crypted'$have_users 'disabled' ''1), "<br>",
            'reg_req'   => array('radio''Required', array('Both''Login''E-mail')),
        '</fieldset><br>',
        '<fieldset><legend>Hard cache settings</legend>',
            'cache_act' => array('radio''Cache active', array('No''Yes')),
            'cache_sec' => array('''Default TTL, seconds'''300),
            'cache_fast' => array('checkbox''Cache mode fast'),
        '</fieldset><br>',
        array('submit''Save'),
    )), 'style="width:75%"');
    break;
 
case 3# Menu
    $WVAL or $WVAL 1;
    $found array_map(create_function('$v''return substr(basename($v), 1, -4);'), glob('admin/_*.php'));
    $found array_merge(array_splice($foundarray_search($me$found), 1), $found);
    $all array_flip($adm->uris) + array_flip($found);
    array_splice($_GET02);
    if ($_POST || $_GET) {
        if ($_GET) {
            $all array_keys($all);
            $id current($_GET);
            $p_rows $adm->rows;
            switch ($act key($_GET)) {
                case 'show'$adm->cr[] = $id$p_rows or $p_rows 1; break;
                case 'hide'array_splice($adm->crarray_search($id$adm->cr), 1); break;
                case 'up': 
                case 'left'$size 'up' == $act $adm->rows$pos array_search($id$adm->cr); array_splice($adm->cr$pos1);
                    $val $size array_splice($adm->cr$pos $size $pos $size count($adm->cr) - 11) : false;
                    $pos $size array_splice($adm->cr$pos $size0$id) : ($adm->cr[] = $id);
                    false == $val or array_splice($adm->cr$pos0$val);
                break;
                case 'add':
                    $s_amenu[0] .= "\t$all[$id]";
                    $s_amenu[-2] .= "\t$all[$id]";
                    $s_amenu[-1] .= "\t" ucfirst($all[$id]);
                break;
                case 'delete':
                    for (; list($i) = each($s_amenu); ) {
                        $ary explode("\t"$s_amenu[$i]);
                        if ($i 0) {
                            $r array_shift($ary);
                            $ary array_filter($arycreate_function('$v''return $v != $GLOBALS["id"];'));
                            $ary array_map(create_function('$v''return $v > $GLOBALS["id"] ? $v - 1 : $v;'), $ary);
                            $WVAL == $i and $adm->cr $ary;
                            array_unshift($ary$r);
                        } else {
                            array_splice($ary$id1);
                        }
                        $s_amenu[$i] = implode("\t"$ary);
                    }
                break;
            }
        } elseif (== $WVAL && $p_ur === array_unique($p_ur)) { #  && val("/^\w*$/", $p_ur)
            if (isset($p_add)) {
                $adm->files array_unique($adm->files);
                $s_amenu[-2] .= "\t" $adm->files[$p_file];
            } else {
                array_pop($p_bt);
                array_pop($p_ur);
            }
            $s_amenu[-1] = implode("\t"$p_bt);
            $s_amenu[0] = implode("\t"$p_ur);
        }
        $sky->s_amenu = [$WVAL => trim("$p_rows\t" implode("\t"$adm->cr))] + $s_amenu;
        jump($main);
    }
    isset($PROFILES) or $PROFILES = array('Anonimous''Admin');
    for ($menu = array(); list($k$v) = each($PROFILES); $k and $menu[$k] = $v); # skip anonimous
    $TOP .= 'Select profile: ' menu($WVAL$menu);
    echo '<form method="post">' th(array('#''FILE''URI''BUTTON'''), 'id="table" style="margin-bottom: 10px"');
    foreach (array('show''hide''up''left''add''delete') as $c) ${"$c"} = a($c"$main&$c=%1\$d");
    == count($allowed) and $left $up '';
    == $WVAL or $add $delete '';
    $adm->rows or $up '';
    for ($i $j 0$cnt count($adm->uris); list($uri) = each($all); $j++) {
        if (false === ($p array_search($uri$adm->uristrue)) && $i >= $cnt && in_array($uri$adm->files)) continue;
        $ok false !== $p && isset($allowed[$p]);
        $file sprintf('_%s.php'$i $cnt $adm->files[$i] : $uri);
        $exists $i >= $cnt || in_array($adm->files[$i], $found) or $file .= sprintf('<br><b>' span_r '</b>''file not found!');
        $button $i $cnt $adm->names[$i] : ucfirst($uri);
        $inp == $WVAL && false !== $p;
        $uri $inp sprintf('?<input value="%s" name="ur[]" class="xi" />'html($uri)) : "?$uri";
        $button $inp sprintf('<input value="%s" name="bt[]" class="xi" />'html($button)) : $button;
        $ctl $ok sprintf("$left $up $hide"$j) : sprintf($exists && false !== $p "$show $delete: ($exists $add $delete), $j);
        echo td(array(pad00(++$i), $file$uri$button$ctl . ($ok ' <img src="pub/img/ok.gif" />' '')));
    }
    if (== $WVAL) echo td(array('',
        sprintf('<select name="file">%s</select>'option(0array_map(create_function('$v''return "_$v.php";'), array_unique($adm->files)))),
        '?<input value="" name="ur[]" class="xi" />',
        '<input value="" name="bt[]" class="xi" />',
        '<label><input type="checkbox" name="add" /> add</label>',
    ));
    printf('</table>Rows: <select name="rows">%s</select> <input type="submit" value="save" /></form>'option($adm->rowsrange(03)));
    break;
 
case 4# Cache
    $TOP .= menu($WVAL, array('APP tables''Hard cache'));
    $no_html true;
    switch ($WVAL) {
        case 0# App tables
            if ($_POST$sky->set_tables(isset($p_id) ? $p_id : array()) && jump();
            $out array_flip(array_filter(fetch(sql('show tables'), 0), create_function('$v''return !DEV || "_dev_" != substr($v, 0, 5);')));
            define('err'sprintf(span_r'Table must NOT exist on production!'));
            $list explode(' '$s_tables_name);
            $map_code '$v = !DEV && "_dev_" == substr($k, 0, 5) ? err : sprintf(TPL_CHECKBOX, $k, in_array($k, $GLOBALS["list"]) ? " checked" : "");';
            array_walk($outcreate_function('&$v,$k'$map_code));
            echo '<h1>MySQL tables structure:</h1>';
            $actions 'Save structure of checked to SKY. memory';
        break;
        case 1:
            if (is_dir($dir 'var/hard')) {
                for ($files array_flip(glob("$dir/*")); list($k$v) = each($files); $files[$k] = date(DATE_DT$s['mtime'])) $s stat($k);
                if (!$files) echo '<h1>Cache dir is empty</h1>';
                else $out $files;
            } else echo '<h1>Cache dir is absent</h1>';
        break;
    }
    break;
 
case 5# Guard
    $TOP .= menu($WVAL, array('Main submenus''.htaccess''index.htm')); # , 'eval($me)'
    $no_html true;
    require 'main/etc.php';
    if ($WVAL) {
        if (isset($p_guard_exc)) $sky->save($_POST) && jump();
        $out array_flip(array_filter(walk_dirs('.'preg_split("/[^\w\/\.]+/", @$s_guard_exc)), create_function('$v''return !DEV || "_" != $v[0];')));
        echo 'Exclude paths: <form method="post"><br>';
        printf('<input name="guard_exc" value="%s" size="75%%" /><input type="submit" value="save" /></form>', @$s_guard_exc);
        echo '<h1>Directories:</h1>';
    }
    switch ($WVAL) {
        case 0# Main submenu
            $map_code 'return intval(in_array($v, $_POST["id"]));';
            if ($_POST$sky->save('allow_submenu'implode(''array_map(create_function('$v'$map_code), array_keys($submenu)))) && jump();
            $out array_flip($submenu);
            $out array_map(create_function('$v''return sprintf(TPL_CHECKBOX, $v, $GLOBALS["s_allow_submenu"][$v] ? " checked" : "");'), $out);
            echo '<h1>Submenu`s buttons for admin menu `Main`:</h1>';
            $actions 'Allow for checked on production';
        break;
        case 1:
        case 2:
            $file == $WVAL '.htaccess' 'index.htm';
            $ok '<img src="pub/img/ok.gif" />';
            foreach ($out as $path => $j) if ('_' == $path[0]) $out[$path] = sprintf(span_r'Dir must NOT exist on production!'); else {
                if ('pub' == substr($path03) && !$WVAL$out[$path] = '--';
                else $out[$path] = is_file("$path/$file") ? $ok sprintf(span_r"$file file not exists");
                if ($ok != $out[$path] && == $WVAL && is_file("$path/index.php")) $out[$path] = $ok;
            }
            # $actions = array('Write .htaccess', 'Delete .htaccess', 'Write index.htm', 'Delete index.htm');
        break;
        case 3: echo "\n\n\n2do - check & fix all PHP files for code: defined('START... or eval(\$me... or die;";
        break;
    }
    break;
 
case 6$TOP .= sprintf(span_r'2do');
    break;
 
case 7: case 8: case 9:
    $cell_id $PVAL + (== $PVAL 0);
    $out sql("+select tmemo from memory where id=$cell_id");
    if (== $user->pid) {
        $TOP .= ' ' a('clear'"?main=$PVAL&clear");
        if ('clear' == $WHATsql("update memory set tmemo='' where id=$cell_id") && jump("?main=$PVAL");
    }
    break;
 
endswitch;
 
if (is_array($out)) {
    echo '<form method="post">' th(array('NAME'in_array($PVAL, array(4,5)) ? '' 'VALUE') + (isset($actions) ? array(=> '') : array()), 'id="table"');
    reset($out);
    for ($i 0; list($k$v) = each($out); ) {
        is_string($v) or is_int($v) or $v print_r($vtrue);
        $no_html or $v html($v);
        echo td(array(array($k'style="min-width:100px"'), $v), eval(zebra));
    }
    echo '</table>';
    if (@$actionsprintf('Action: <input type="submit" name="do" value="%s" /></form>'is_string($actions) ? $actions 'do');
    echo '</form>';
} elseif ($out) echo "<pre>$out</pre>";
 
N1: WRITE FILE: admin/_settings.php
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
<?php eval($me) or die;
 
$SUBMENU = ['General''Articles''Visitors''Users'];
$WVAL intval($WVAL);
$TOP sprintf("<b>$TOP &gt; %s</b> : "$name = @$SUBMENU[$PVAL intval($PVAL)]);
$title .= " > $name";
 
if ($_POST) switch ($PVAL) {
    default:
        $sky->save($_POST) && jump();
}
 
switch ($PVAL) {
    case 0$ary = [
        'title'    => ['''Default title''style="width:55%"'],
        'keywords' => ['''Default keywords''style="width:55%"'],
        'desc'     => ['''Default description''style="width:55%"'],
        'email'    => ['''Notification e-mail''style="width:55%"'],
        'blog_like_new'    => ['''blog_like_new''style="width:55%"'],
        ['submit''Save'],
    ];
    break;
    case 1$ary = [];
    break;
    case 2$ary = [
        't1' => ['date''test''style="width:55%"'],
        'ddd'   => array('date''Site date''''2008-05-17'),
        'ccc'   => array('color''Active color''''#77ff77'), "<br>",
        't2' => ['datetime''test''style="width:55%"'],
        't3' => ['datetime-local''test''style="width:55%"'],
        't4' => ['email''test''style="width:55%"'],
        't5' => ['range''test''style="width:55%"'],
        't6' => ['search''test''style="width:55%"'],
        't7' => ['tel''test''style="width:55%"'],
        't8' => ['time''test''style="width:55%"'],
        't9' => ['url''test''style="width:55%"'],
        't10' => ['month''test''style="width:55%"'],
        't11' => ['week''test''style="width:55%"'],
        ['submit''Save'],
    ];
    break;
    case 3$ary = [
        'ava_min' => ['number''Avatar MIN px''style="width:10%"'],
        'ava_max' => ['number''Avatar MAX px''style="width:10%"'],
        ['submit''Save'],
    ];
    break;
}
 
echo tag(form($sky->mem['s'][3], $ary), 'style="width:75%" class="fl"');
 
N2: WRITE FILE: pub/img/ok.gif
   
N3: WRITE FILE: main/etc.php
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
<?php defined('START') or die;
# 2do: move to 3 wing
$u_svn_skips = array();
 
function list_path($dir$what ''$up false$skip = array()) {
    if ($dir === '/'$dir '.';
    $list $up ? array('..') : array();
    if ($dh = @opendir($dir)) {
        global $u_svn_skips;
        while ($name readdir($dh)) {
            if ($name == '.' || $name == '..') continue;
            $path $dir == '.' $name "$dir/$name";
            if (!$what || $what($path)) {
                if (in_array($name$u_svn_skips)) continue;
                foreach ($skip as $s) if (preg_match("|^$s$|"$path)) continue 2;
                array_push($list$path);
            }
        }
        closedir($dh);
    }
    return $list;
}
 
function walk_dirs($dir$skip) {
    if ($dir === '/'$dir '.';
    if (file_exists($dir)) $out = array($dir); else return array();
    foreach (list_path($dir'is_dir'false$skip) as $path$out array_merge($outwalk_dirs($path$skip));
    return $out;
}