mirror of
https://codeberg.org/streams/streams.git
synced 2024-09-20 17:15:13 +00:00
Merge branch 'master' of https://github.com/habeascodice/red
This commit is contained in:
commit
4529c20ba8
17 changed files with 2544 additions and 307 deletions
|
@ -164,11 +164,11 @@ function dob($dob) {
|
||||||
* id and name of datetimepicker (defaults to "datetimepicker")
|
* id and name of datetimepicker (defaults to "datetimepicker")
|
||||||
*/
|
*/
|
||||||
function datesel($format, $min, $max, $default, $id = 'datepicker') {
|
function datesel($format, $min, $max, $default, $id = 'datepicker') {
|
||||||
return datetimesel($format,$min,$max,$default,$id,true,false);
|
return datetimesel($format,$min,$max,$default,$id,true,false, '','');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* returns a date selector
|
* returns a time selector
|
||||||
* @param $format
|
* @param $format
|
||||||
* format string, e.g. 'ymd' or 'mdy'. Not currently supported
|
* format string, e.g. 'ymd' or 'mdy'. Not currently supported
|
||||||
* @param $h
|
* @param $h
|
||||||
|
@ -179,7 +179,7 @@ function datesel($format, $min, $max, $default,$id = 'datepicker') {
|
||||||
* id and name of datetimepicker (defaults to "timepicker")
|
* id and name of datetimepicker (defaults to "timepicker")
|
||||||
*/
|
*/
|
||||||
function timesel($format, $h, $m, $id='timepicker') {
|
function timesel($format, $h, $m, $id='timepicker') {
|
||||||
return datetimesel($format,mktime(),mktime(),mktime($h,$m),$id,false,true);
|
return datetimesel($format,new DateTime(),new DateTime(),new DateTime("$h:$m"),$id,false,true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -204,31 +204,42 @@ function timesel($format,$h,$m,$id='timepicker') {
|
||||||
* set maximum date from picker with id $maxfrom (none by default)
|
* set maximum date from picker with id $maxfrom (none by default)
|
||||||
*/
|
*/
|
||||||
function datetimesel($format, $min, $max, $default, $id = 'datetimepicker', $pickdate = true, $picktime = true, $minfrom = '', $maxfrom = '') {
|
function datetimesel($format, $min, $max, $default, $id = 'datetimepicker', $pickdate = true, $picktime = true, $minfrom = '', $maxfrom = '') {
|
||||||
|
// Once browser support is better this could probably be replaced with native HTML5 date picker
|
||||||
$o = '';
|
$o = '';
|
||||||
|
|
||||||
$dateformat = '';
|
$dateformat = '';
|
||||||
if($pickdate) $dateformat .= 'YYYY-MM-DD';
|
|
||||||
|
if($pickdate) $dateformat .= 'Y-m-d';
|
||||||
if($pickdate && $picktime) $dateformat .= ' ';
|
if($pickdate && $picktime) $dateformat .= ' ';
|
||||||
if($picktime) $dateformat .= 'HH:mm';
|
if($picktime) $dateformat .= 'H:i';
|
||||||
|
|
||||||
$mindate = $min ? "new Date($min*1000)" : '';
|
$minjs = $min ? ",minDate: new Date({$min->getTimestamp()}*1000), yearStart: " . $min->format('Y') : '';
|
||||||
$maxdate = $max ? "new Date($max*1000)" : '';
|
$maxjs = $max ? ",maxDate: new Date({$max->getTimestamp()}*1000), yearEnd: " . $max->format('Y') : '';
|
||||||
|
|
||||||
$defaultDate = $default ? ", defaultDate: new Date($default*1000)" : '';
|
$input_text = $default ? 'value="' . date($dateformat, $default->getTimestamp()) . '"' : '';
|
||||||
|
$defaultdatejs = $default ? ",defaultDate: new Date({$default->getTimestamp()}*1000)" : '';
|
||||||
|
|
||||||
$pickers = '';
|
$pickers = '';
|
||||||
if(!$pickdate) $pickers .= 'pickDate: false,';
|
if(!$pickdate) $pickers .= ',datepicker: false';
|
||||||
if(!$picktime) $pickers .= 'pickTime: false,';
|
if(!$picktime) $pickers .= ',timepicker: false';
|
||||||
|
|
||||||
$extra_js = '';
|
$extra_js = '';
|
||||||
if($minfrom != '')
|
if($minfrom != '')
|
||||||
$extra_js .= "\$('#$minfrom').on('dp.change',function (e) { \$('#$id').data('DateTimePicker').setMinDate(e.date); });";
|
$extra_js .= "\$('#$minfrom').data('xdsoft_datetimepicker').setOptions({onChangeDateTime: function (currentDateTime) { \$('#$id').data('xdsoft_datetimepicker').setOptions({minDate: currentDateTime})}})";
|
||||||
|
|
||||||
if($maxfrom != '')
|
if($maxfrom != '')
|
||||||
$extra_js .= "\$('#$maxfrom').on('dp.change',function (e) { \$('#$id').data('DateTimePicker').setMaxDate(e.date); });";
|
$extra_js .= "\$('#$maxfrom').data('xdsoft_datetimepicker').setOptions({onChangeDateTime: function (currentDateTime) { \$('#$id').data('xdsoft_datetimepicker').setOptions({maxDate: currentDateTime})}})";
|
||||||
|
|
||||||
$o .= "<div class='date' id='$id'><input type='text' placeholder='$dateformat' name='$id'/></div>";
|
$readable_format = $dateformat;
|
||||||
$o .= "<script type='text/javascript'>\$(function () {\$('#$id').datetimepicker({sideBySide: true, $pickers minDate: $mindate, maxDate: $maxdate, format: '$dateformat', useCurrent: false $defaultDate}); $extra_js});</script>";
|
$readable_format = str_replace('Y','yyyy',$readable_format);
|
||||||
|
$readable_format = str_replace('m','mm',$readable_format);
|
||||||
|
$readable_format = str_replace('d','dd',$readable_format);
|
||||||
|
$readable_format = str_replace('H','HH',$readable_format);
|
||||||
|
$readable_format = str_replace('i','MM',$readable_format);
|
||||||
|
|
||||||
|
$o .= "<div class='date'><input type='text' placeholder='$readable_format' name='$id' id='$id' $input_text />";
|
||||||
|
$o .= '</div>';
|
||||||
|
$o .= "<script type='text/javascript'>\$(function () {var picker = \$('#$id').datetimepicker({step:5,format:'$dateformat' $minjs $maxjs $pickers $defaultdatejs}); $extra_js})</script>";
|
||||||
return $o;
|
return $o;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
306
install/migrate-mypg.php
Normal file
306
install/migrate-mypg.php
Normal file
|
@ -0,0 +1,306 @@
|
||||||
|
<?php
|
||||||
|
function ask_question($menu, $options, $default) {
|
||||||
|
$r=null;
|
||||||
|
while(!$r) {
|
||||||
|
echo $menu;
|
||||||
|
$str = substr(strtolower(fgets(STDIN)),0,-1);
|
||||||
|
if($str == '')
|
||||||
|
$r = $default;
|
||||||
|
else if(in_array($str, $options))
|
||||||
|
$r = $str;
|
||||||
|
}
|
||||||
|
return $r;
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_data($prompt, $regex) {
|
||||||
|
do {
|
||||||
|
echo $prompt;
|
||||||
|
$r = substr(fgets(STDIN), 0, -1);
|
||||||
|
if(!preg_match($regex, $prompt))
|
||||||
|
$r = '';
|
||||||
|
} while($r === '');
|
||||||
|
return $r;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parse_htconfig($file) {
|
||||||
|
if(!file_exists($file))
|
||||||
|
return array();
|
||||||
|
$conf = file_get_contents($file);
|
||||||
|
preg_match_all('/\$db\_(host|port|user|pass|data|type)\s*=\s*\'([[:print:]]+)\'/', $conf, $matches);
|
||||||
|
return array_combine($matches[1], $matches[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_configtype(array $data) {
|
||||||
|
if(!isset($data['host'], $data['user'], $data['pass'], $data['data']))
|
||||||
|
return 'none';
|
||||||
|
if($data['type'] == 1)
|
||||||
|
return 'pgsql';
|
||||||
|
return 'mysql';
|
||||||
|
}
|
||||||
|
|
||||||
|
function phpquote($str) {
|
||||||
|
for($r = '', $x=0, $l=strlen($str); $x < $l; $x++)
|
||||||
|
if($str{$x} == '\'' || $str{$x} == '\\')
|
||||||
|
$r .= '\\' . $str{$x};
|
||||||
|
else
|
||||||
|
$r .= $str{$x};
|
||||||
|
return $r;
|
||||||
|
}
|
||||||
|
|
||||||
|
function run_sql($file, $db, &$err, &$n) {
|
||||||
|
$sql = file_get_contents($file);
|
||||||
|
$sql = explode(';', $sql);
|
||||||
|
$err = 0; $n = 0;
|
||||||
|
$c = count($sql);
|
||||||
|
if(!$c) {
|
||||||
|
echo "Unknown error.\n";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
foreach($sql as $stmt) {
|
||||||
|
if($stmt == '' || $stmt == "\n" || $stmt == "\n\n")
|
||||||
|
continue;
|
||||||
|
$r = $db->exec($stmt);
|
||||||
|
if($r===false) {
|
||||||
|
echo "\nError executing $stmt: ".var_export($db->errorInfo(), true)."\n";
|
||||||
|
$err++;
|
||||||
|
} else {
|
||||||
|
$n++;
|
||||||
|
}
|
||||||
|
if($n % 5 == 0)
|
||||||
|
echo "\033[255DExecuting: $file, $n/$c\033[K";
|
||||||
|
}
|
||||||
|
echo "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$drivers=true;
|
||||||
|
if(!class_exists('PDO'))
|
||||||
|
$drivers=false;
|
||||||
|
if($drivers) {
|
||||||
|
$drivers = PDO::getAvailableDrivers();
|
||||||
|
if(!in_array('pgsql', $drivers) || !in_array('mysql', $drivers))
|
||||||
|
$drivers = false;
|
||||||
|
}
|
||||||
|
if(!$drivers) {
|
||||||
|
echo "Sorry. This migration tool requires both mysql and pgsql PDO drivers.\n";
|
||||||
|
$r = ask_question("If you are on dreamhost you can enable them. This might work on other shared hosts too. Type 'n' to do it yourself.\nWould you like to try (Y/n)? ", array('y', 'n'), 'y');
|
||||||
|
if($r=='y') {
|
||||||
|
$path = $_SERVER['HOME'] . '/.php/5.4';
|
||||||
|
if(!file_exists($path))
|
||||||
|
mkdir($path, 0770, true);
|
||||||
|
|
||||||
|
$rcfile = $path . '/phprc';
|
||||||
|
|
||||||
|
$str = '';
|
||||||
|
$mods = get_loaded_extensions();
|
||||||
|
foreach(array('pdo_mysql','pdo_pgsql','pgsql') as $ext)
|
||||||
|
if(!in_array($ext, $mods))
|
||||||
|
$str .= 'extension=' . $ext . ".so\n";
|
||||||
|
|
||||||
|
file_put_contents($rcfile, $str, FILE_APPEND );
|
||||||
|
echo "drivers enabled.\nNow type: \033[1m/usr/local/bin/php-5.4 install/".basename($argv[0])."\033[0m\n";
|
||||||
|
}
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach(array('install','include','mod','view') as $dir) {
|
||||||
|
if(!file_exists($dir)) {
|
||||||
|
echo "You must execute from inside the webroot like the cron\n";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$cfg = parse_htconfig('.htconfig.php');
|
||||||
|
$type = get_configtype($cfg);
|
||||||
|
if($type != 'mysql') {
|
||||||
|
echo "Error. Must start with standard mysql installation in .htconfig.php.\n";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$cfg['port'])
|
||||||
|
$cfg['port'] = 3306;
|
||||||
|
try {
|
||||||
|
$mydb = new PDO("mysql:host={$cfg['host']};dbname={$cfg['data']};port={$cfg['port']}", $cfg['user'], $cfg['pass']);
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
echo "Error connecting to mysql DB: " . $e->getMessage() . "\n";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!file_exists('.htconfig.php-pgsql')) {
|
||||||
|
echo "Enter postgres server info:\n";
|
||||||
|
$p['host'] = get_data("Hostname: ", '/[\w.]+/');
|
||||||
|
$p['port'] = get_data("Enter port (0 for default): ", '/\d+/');
|
||||||
|
$p['user'] = get_data("Username: ", '/\w+/');
|
||||||
|
$p['pass'] = get_data("Password: ", '/[[:print:]]+/');
|
||||||
|
$p['data'] = get_data("Database name: ", '/\w+/');
|
||||||
|
$old = file_get_contents('.htconfig.php');
|
||||||
|
$new = preg_replace(
|
||||||
|
array(
|
||||||
|
'/^(\$db_host\s*=\s*\')([\w.]+)(\';)$/m',
|
||||||
|
'/^(\$db_port\s*=\s*\')(\d+)(\';)$/m',
|
||||||
|
'/^(\$db_user\s*=\s*\')(\w+)(\';)$/m',
|
||||||
|
'/^(\$db_pass\s*=\s*\')([[:print:]]+)(\';)/m',
|
||||||
|
'/^(\$db_data\s*=\s*\')(\w+)(\';)$/m',
|
||||||
|
'/^(\$db_type\s*=\s*\')(\d)(\';)$/m' // in case they already have it
|
||||||
|
), array(
|
||||||
|
"$1{$p['host']}$3",
|
||||||
|
"\${1}{$p['port']}$3",
|
||||||
|
"$1{$p['user']}$3",
|
||||||
|
"$1{$p['pass']}$3",
|
||||||
|
"$1{$p['data']}$3\n\$db_type = '1';\n", // they probably don't
|
||||||
|
"\${1}1$3"
|
||||||
|
),
|
||||||
|
$old,
|
||||||
|
1,
|
||||||
|
$repl
|
||||||
|
);
|
||||||
|
if($new === false || $repl < 5) {
|
||||||
|
echo "Failed. Please make a postgres config file named .htconfig.php-pgsql - Be sure to add \"\$db_type = '1';\" to your config.\n";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
file_put_contents('.htconfig.php-pgsql', $new);
|
||||||
|
}
|
||||||
|
|
||||||
|
$pcfg = parse_htconfig('.htconfig.php-pgsql');
|
||||||
|
$ptype = get_configtype($pcfg);
|
||||||
|
if($ptype != 'pgsql') {
|
||||||
|
echo "Error. Must have a valid pgsql config named .htconfig.php-pgsql. Be sure to add \"\$db_type = '1';\" to your config.\n";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!$pcfg['port'])
|
||||||
|
$pcfg['port'] = 5432;
|
||||||
|
try {
|
||||||
|
$pgdb = new PDO("pgsql:host={$pcfg['host']};dbname={$pcfg['data']};port={$pcfg['port']}", $pcfg['user'], $pcfg['pass']);
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
echo "Error connecting to pgsql DB: " . $e->getMessage() . "\n";
|
||||||
|
echo "cfg string: " . "pgsql:host={$pcfg['host']};dbname={$pcfg['data']};port={$pcfg['port']}\n";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
$B = "\033[0;34m";
|
||||||
|
$H = "\033[0;35m";
|
||||||
|
$W = "\033[1;37m";
|
||||||
|
$M = "\033[1;31m";
|
||||||
|
$N = "\033[0m";
|
||||||
|
$r = ask_question("Ready to migrate {$W}Red{$M}(#){$W}Matrix$N from mysql db @$B{$cfg['host']}$N/$B{$cfg['data']}$N to postgres db @$B{$pcfg['host']}$N/$B{$pcfg['data']}$N.
|
||||||
|
The site will be disabled during the migration by moving the $H.htconfig.php$N file to $H.htconfig.php-mysql$N.
|
||||||
|
If for any reason the migration fails, you will need to move the config file back into place manually before trying again.
|
||||||
|
|
||||||
|
Are you ready to begin (N/y)? ", array('y','n'), 'n'
|
||||||
|
);
|
||||||
|
|
||||||
|
if($r == 'n')
|
||||||
|
exit();
|
||||||
|
|
||||||
|
rename('.htconfig.php', '.htconfig.php-mysql');
|
||||||
|
|
||||||
|
run_sql('install/schema_postgres.sql', $pgdb, $err, $n);
|
||||||
|
if($err) {
|
||||||
|
echo "There were $err errors creating the pgsql schema. Unable to continue.\n";
|
||||||
|
/* $r = ask_question("There were $err errors (and $n ok) creating the schema. This shouldn't happen and continuing will probably fail.
|
||||||
|
Do you want to continue migration anyway (N/y)? ", array('y','n'), 'n'
|
||||||
|
);
|
||||||
|
if($r == 'n')*/
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "pgsql schema created. $n queries executed successfully.\n";
|
||||||
|
|
||||||
|
$res = $pgdb->query("select relname, attname, pg_type.typname from ((pg_attribute inner join pg_class on attrelid=pg_class.oid) inner join pg_type on atttypid=pg_type.oid) inner join pg_namespace on relnamespace=pg_namespace.oid where nspname='public' and atttypid not in (26,27,28,29) and relkind='r' and attname <> 'item_search_vector';");
|
||||||
|
if($res === false) {
|
||||||
|
echo "Error reading back schema. Unable to continue.\n";
|
||||||
|
var_export($pgdb->errorInfo());
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
$schema = array();
|
||||||
|
while(($row = $res->fetch()) !== false)
|
||||||
|
$schema[$row[0]][$row[1]] = $row[2];
|
||||||
|
|
||||||
|
$err = 0; $n = 0;
|
||||||
|
$reserved = array('ignore','key','with');
|
||||||
|
foreach($schema as $table=>$fields) {
|
||||||
|
$fnames = array_keys($fields);
|
||||||
|
$pfnames = array_keys($fields);
|
||||||
|
|
||||||
|
foreach($fnames as &$fname)
|
||||||
|
if(in_array($fname, $reserved))
|
||||||
|
$fname = '`' . $fname . '`';
|
||||||
|
$fstr = implode(',', $fnames);
|
||||||
|
|
||||||
|
foreach($pfnames as &$pfname)
|
||||||
|
if(in_array($pfname, $reserved))
|
||||||
|
$pfname = '"' . $pfname . '"';
|
||||||
|
$pfstr = implode(',', $pfnames);
|
||||||
|
|
||||||
|
$res = $mydb->query("SELECT count(*) FROM $table;");
|
||||||
|
if($res === false) {
|
||||||
|
echo "Fatal error counting table $table: ".var_export($mydb->errorInfo(), true)."\n";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
$nrows = $res->fetchColumn(0);
|
||||||
|
if(!$nrows) {
|
||||||
|
echo "\nTABLE $table has 0 rows in mysql db.\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$pstr = '';
|
||||||
|
for($x=0, $c=count($fields); $x < $c; $x++)
|
||||||
|
$pstr .= ($x ? ',?' : '?');
|
||||||
|
|
||||||
|
$crow = 0;
|
||||||
|
echo "\033[255DTABLE: $table [$c fields] $crow/$nrows (".number_format(($crow/$nrows)*100,2)."%)\033[K";
|
||||||
|
|
||||||
|
$res = $mydb->query("SELECT $fstr FROM $table;");
|
||||||
|
if($res === false) {
|
||||||
|
echo "Fatal Error importing table $table: ".var_export($mydb->errorInfo(), true)."\n";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
$istmt = $pgdb->prepare("INSERT INTO $table ($pfstr) VALUES ($pstr);");
|
||||||
|
if($istmt === false) {
|
||||||
|
echo "Fatal error preparing query. Aborting.\n";
|
||||||
|
var_export($pgdb->errorInfo());
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
while(($row = $res->fetch(PDO::FETCH_NUM)) !== false) {
|
||||||
|
foreach($row as $idx => &$val)
|
||||||
|
if(array_slice(array_values($fields),$idx,1)[0] == 'timestamp' && $val == '0000-00-00 00:00:00')
|
||||||
|
$istmt->bindParam($idx+1, ($nulldate='0001-01-01 00:00:00'));
|
||||||
|
else if(array_slice(array_values($fields),$idx,1)[0] == 'bytea')
|
||||||
|
$istmt->bindParam($idx+1, $val, PDO::PARAM_LOB);
|
||||||
|
else
|
||||||
|
$istmt->bindParam($idx+1, $val);
|
||||||
|
$r = $istmt->execute();
|
||||||
|
if($r === false) {
|
||||||
|
$err++;
|
||||||
|
echo "\nInsert error: ".var_export(array($pgdb->errorInfo(), $table, $fields, $row), true)."\n";
|
||||||
|
//exit();
|
||||||
|
} else
|
||||||
|
$n++;
|
||||||
|
$crow++;
|
||||||
|
if(($crow % 10) == 0 || $crow == $nrows)
|
||||||
|
echo "\033[255DTABLE: $table [$c fields] $crow/$nrows (".number_format(($crow/$nrows)*100,2)."%)\033[K";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "Done with $err errors and $n inserts.\n";
|
||||||
|
if($err) {
|
||||||
|
echo "Migration had errors. Aborting.\n";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
run_sql('install/migrate_mypg_fixseq.sql', $pgdb, $err, $n);
|
||||||
|
echo "Sequences updated with $err errors and $n inserts.\n";
|
||||||
|
if($err)
|
||||||
|
exit();
|
||||||
|
|
||||||
|
$r = ask_question("Everything successful. Once you connect up the pg database there is no going back. Do you want to make it live (N,y)?", array('y', 'n'), 'n');
|
||||||
|
if($r == 'n') {
|
||||||
|
echo "You can make active by renaming .htconfig.php-pgsql to .htconfig.php, or start over by renaming .htconfig.php-mysql to .htconfig.php\n";
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
rename('.htconfig.php-pgsql', '.htconfig.php');
|
||||||
|
echo "Done. {$W}Red{$M}(#){$W}Matrix$N now running on postgres.\n";
|
||||||
|
|
||||||
|
|
55
install/migrate_mypg_fixseq.sql
Normal file
55
install/migrate_mypg_fixseq.sql
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
SELECT SETVAL('public.abook_abook_id_seq', COALESCE(MAX(abook_id), 1) ) FROM public.abook;
|
||||||
|
SELECT SETVAL('public.account_account_id_seq', COALESCE(MAX(account_id), 1) ) FROM public.account;
|
||||||
|
SELECT SETVAL('public.addon_id_seq', COALESCE(MAX(id), 1) ) FROM public.addon;
|
||||||
|
SELECT SETVAL('public.app_id_seq', COALESCE(MAX(id), 1) ) FROM public.app;
|
||||||
|
SELECT SETVAL('public.attach_id_seq', COALESCE(MAX(id), 1) ) FROM public.attach;
|
||||||
|
SELECT SETVAL('public.channel_channel_id_seq', COALESCE(MAX(channel_id), 1) ) FROM public.channel;
|
||||||
|
SELECT SETVAL('public.chat_chat_id_seq', COALESCE(MAX(chat_id), 1) ) FROM public.chat;
|
||||||
|
SELECT SETVAL('public.chatpresence_cp_id_seq', COALESCE(MAX(cp_id), 1) ) FROM public.chatpresence;
|
||||||
|
SELECT SETVAL('public.chatroom_cr_id_seq', COALESCE(MAX(cr_id), 1) ) FROM public.chatroom;
|
||||||
|
SELECT SETVAL('public.config_id_seq', COALESCE(MAX(id), 1) ) FROM public.config;
|
||||||
|
SELECT SETVAL('public.conv_id_seq', COALESCE(MAX(id), 1) ) FROM public.conv;
|
||||||
|
SELECT SETVAL('public.event_id_seq', COALESCE(MAX(id), 1) ) FROM public.event;
|
||||||
|
SELECT SETVAL('public.fcontact_id_seq', COALESCE(MAX(id), 1) ) FROM public.fcontact;
|
||||||
|
SELECT SETVAL('public.ffinder_id_seq', COALESCE(MAX(id), 1) ) FROM public.ffinder;
|
||||||
|
SELECT SETVAL('public.fserver_id_seq', COALESCE(MAX(id), 1) ) FROM public.fserver;
|
||||||
|
SELECT SETVAL('public.fsuggest_id_seq', COALESCE(MAX(id), 1) ) FROM public.fsuggest;
|
||||||
|
SELECT SETVAL('public.group_member_id_seq', COALESCE(MAX(id), 1) ) FROM public.group_member;
|
||||||
|
SELECT SETVAL('public.groups_id_seq', COALESCE(MAX(id), 1) ) FROM public.groups;
|
||||||
|
SELECT SETVAL('public.hook_id_seq', COALESCE(MAX(id), 1) ) FROM public.hook;
|
||||||
|
SELECT SETVAL('public.hubloc_hubloc_id_seq', COALESCE(MAX(hubloc_id), 1) ) FROM public.hubloc;
|
||||||
|
SELECT SETVAL('public.issue_issue_id_seq', COALESCE(MAX(issue_id), 1) ) FROM public.issue;
|
||||||
|
SELECT SETVAL('public.item_id_id_seq', COALESCE(MAX(id), 1) ) FROM public.item_id;
|
||||||
|
SELECT SETVAL('public.item_id_seq', COALESCE(MAX(id), 1) ) FROM public.item;
|
||||||
|
SELECT SETVAL('public.likes_id_seq', COALESCE(MAX(id), 1) ) FROM public.likes;
|
||||||
|
SELECT SETVAL('public.mail_id_seq', COALESCE(MAX(id), 1) ) FROM public.mail;
|
||||||
|
SELECT SETVAL('public.manage_id_seq', COALESCE(MAX(id), 1) ) FROM public.manage;
|
||||||
|
SELECT SETVAL('public.menu_item_mitem_id_seq', COALESCE(MAX(mitem_id), 1) ) FROM public.menu_item;
|
||||||
|
SELECT SETVAL('public.menu_menu_id_seq', COALESCE(MAX(menu_id), 1) ) FROM public.menu;
|
||||||
|
SELECT SETVAL('public.notify_id_seq', COALESCE(MAX(id), 1) ) FROM public.notify;
|
||||||
|
SELECT SETVAL('public.obj_obj_id_seq', COALESCE(MAX(obj_id), 1) ) FROM public.obj;
|
||||||
|
SELECT SETVAL('public.pconfig_id_seq', COALESCE(MAX(id), 1) ) FROM public.pconfig;
|
||||||
|
SELECT SETVAL('public.photo_id_seq', COALESCE(MAX(id), 1) ) FROM public.photo;
|
||||||
|
SELECT SETVAL('public.poll_elm_pelm_id_seq', COALESCE(MAX(pelm_id), 1) ) FROM public.poll_elm;
|
||||||
|
SELECT SETVAL('public.poll_poll_id_seq', COALESCE(MAX(poll_id), 1) ) FROM public.poll;
|
||||||
|
SELECT SETVAL('public.profdef_id_seq', COALESCE(MAX(id), 1) ) FROM public.profdef;
|
||||||
|
SELECT SETVAL('public.profext_id_seq', COALESCE(MAX(id), 1) ) FROM public.profext;
|
||||||
|
SELECT SETVAL('public.profile_check_id_seq', COALESCE(MAX(id), 1) ) FROM public.profile_check;
|
||||||
|
SELECT SETVAL('public.profile_id_seq', COALESCE(MAX(id), 1) ) FROM public.profile;
|
||||||
|
SELECT SETVAL('public.register_id_seq', COALESCE(MAX(id), 1) ) FROM public.register;
|
||||||
|
SELECT SETVAL('public.session_id_seq', COALESCE(MAX(id), 1) ) FROM public.session;
|
||||||
|
SELECT SETVAL('public.shares_share_id_seq', COALESCE(MAX(share_id), 1) ) FROM public.shares;
|
||||||
|
SELECT SETVAL('public.sign_id_seq', COALESCE(MAX(id), 1) ) FROM public.sign;
|
||||||
|
SELECT SETVAL('public.source_src_id_seq', COALESCE(MAX(src_id), 1) ) FROM public.source;
|
||||||
|
SELECT SETVAL('public.spam_id_seq', COALESCE(MAX(id), 1) ) FROM public.spam;
|
||||||
|
SELECT SETVAL('public.sys_perms_id_seq', COALESCE(MAX(id), 1) ) FROM public.sys_perms;
|
||||||
|
SELECT SETVAL('public.term_tid_seq', COALESCE(MAX(tid), 1) ) FROM public.term;
|
||||||
|
SELECT SETVAL('public.updates_ud_id_seq', COALESCE(MAX(ud_id), 1) ) FROM public.updates;
|
||||||
|
SELECT SETVAL('public.verify_id_seq', COALESCE(MAX(id), 1) ) FROM public.verify;
|
||||||
|
SELECT SETVAL('public.vote_vote_id_seq', COALESCE(MAX(vote_id), 1) ) FROM public.vote;
|
||||||
|
SELECT SETVAL('public.xchat_xchat_id_seq', COALESCE(MAX(xchat_id), 1) ) FROM public.xchat;
|
||||||
|
SELECT SETVAL('public.xconfig_id_seq', COALESCE(MAX(id), 1) ) FROM public.xconfig;
|
||||||
|
SELECT SETVAL('public.xign_id_seq', COALESCE(MAX(id), 1) ) FROM public.xign;
|
||||||
|
SELECT SETVAL('public.xlink_xlink_id_seq', COALESCE(MAX(xlink_id), 1) ) FROM public.xlink;
|
||||||
|
SELECT SETVAL('public.xtag_xtag_id_seq', COALESCE(MAX(xtag_id), 1) ) FROM public.xtag;
|
||||||
|
|
|
@ -1,238 +0,0 @@
|
||||||
/*!
|
|
||||||
* Datetimepicker for Bootstrap v3
|
|
||||||
//! version : 3.1.3
|
|
||||||
* https://github.com/Eonasdan/bootstrap-datetimepicker/
|
|
||||||
*/
|
|
||||||
.bootstrap-datetimepicker-widget {
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
width: 250px;
|
|
||||||
padding: 4px;
|
|
||||||
margin-top: 1px;
|
|
||||||
z-index: 99999 !important;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget.timepicker-sbs {
|
|
||||||
width: 600px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget.bottom:before {
|
|
||||||
content: '';
|
|
||||||
display: inline-block;
|
|
||||||
border-left: 7px solid transparent;
|
|
||||||
border-right: 7px solid transparent;
|
|
||||||
border-bottom: 7px solid #ccc;
|
|
||||||
border-bottom-color: rgba(0, 0, 0, 0.2);
|
|
||||||
position: absolute;
|
|
||||||
top: -7px;
|
|
||||||
left: 7px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget.bottom:after {
|
|
||||||
content: '';
|
|
||||||
display: inline-block;
|
|
||||||
border-left: 6px solid transparent;
|
|
||||||
border-right: 6px solid transparent;
|
|
||||||
border-bottom: 6px solid white;
|
|
||||||
position: absolute;
|
|
||||||
top: -6px;
|
|
||||||
left: 8px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget.top:before {
|
|
||||||
content: '';
|
|
||||||
display: inline-block;
|
|
||||||
border-left: 7px solid transparent;
|
|
||||||
border-right: 7px solid transparent;
|
|
||||||
border-top: 7px solid #ccc;
|
|
||||||
border-top-color: rgba(0, 0, 0, 0.2);
|
|
||||||
position: absolute;
|
|
||||||
bottom: -7px;
|
|
||||||
left: 6px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget.top:after {
|
|
||||||
content: '';
|
|
||||||
display: inline-block;
|
|
||||||
border-left: 6px solid transparent;
|
|
||||||
border-right: 6px solid transparent;
|
|
||||||
border-top: 6px solid white;
|
|
||||||
position: absolute;
|
|
||||||
bottom: -6px;
|
|
||||||
left: 7px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget .dow {
|
|
||||||
width: 14.2857%;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget.pull-right:before {
|
|
||||||
left: auto;
|
|
||||||
right: 6px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget.pull-right:after {
|
|
||||||
left: auto;
|
|
||||||
right: 7px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget > ul {
|
|
||||||
list-style-type: none;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget a[data-action] {
|
|
||||||
padding: 6px 0;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget a[data-action]:active {
|
|
||||||
box-shadow: none;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget .timepicker-hour,
|
|
||||||
.bootstrap-datetimepicker-widget .timepicker-minute,
|
|
||||||
.bootstrap-datetimepicker-widget .timepicker-second {
|
|
||||||
width: 54px;
|
|
||||||
font-weight: bold;
|
|
||||||
font-size: 1.2em;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget button[data-action] {
|
|
||||||
padding: 6px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget table[data-hour-format="12"] .separator {
|
|
||||||
width: 4px;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget .datepicker > div {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget .picker-switch {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget table {
|
|
||||||
width: 100%;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td,
|
|
||||||
.bootstrap-datetimepicker-widget th {
|
|
||||||
text-align: center;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td {
|
|
||||||
height: 54px;
|
|
||||||
line-height: 54px;
|
|
||||||
width: 54px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td.cw {
|
|
||||||
font-size: 10px;
|
|
||||||
height: 20px;
|
|
||||||
line-height: 20px;
|
|
||||||
color: #777777;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td.day {
|
|
||||||
height: 20px;
|
|
||||||
line-height: 20px;
|
|
||||||
width: 20px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td.day:hover,
|
|
||||||
.bootstrap-datetimepicker-widget td.hour:hover,
|
|
||||||
.bootstrap-datetimepicker-widget td.minute:hover,
|
|
||||||
.bootstrap-datetimepicker-widget td.second:hover {
|
|
||||||
background: #eeeeee;
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td.old,
|
|
||||||
.bootstrap-datetimepicker-widget td.new {
|
|
||||||
color: #777777;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td.today {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td.today:before {
|
|
||||||
content: '';
|
|
||||||
display: inline-block;
|
|
||||||
border-left: 7px solid transparent;
|
|
||||||
border-bottom: 7px solid #428bca;
|
|
||||||
border-top-color: rgba(0, 0, 0, 0.2);
|
|
||||||
position: absolute;
|
|
||||||
bottom: 4px;
|
|
||||||
right: 4px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td.active,
|
|
||||||
.bootstrap-datetimepicker-widget td.active:hover {
|
|
||||||
background-color: #428bca;
|
|
||||||
color: #ffffff;
|
|
||||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td.active.today:before {
|
|
||||||
border-bottom-color: #fff;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td.disabled,
|
|
||||||
.bootstrap-datetimepicker-widget td.disabled:hover {
|
|
||||||
background: none;
|
|
||||||
color: #777777;
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td span {
|
|
||||||
display: inline-block;
|
|
||||||
width: 54px;
|
|
||||||
height: 54px;
|
|
||||||
line-height: 54px;
|
|
||||||
margin: 2px 1.5px;
|
|
||||||
cursor: pointer;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td span:hover {
|
|
||||||
background: #eeeeee;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td span.active {
|
|
||||||
background-color: #428bca;
|
|
||||||
color: #ffffff;
|
|
||||||
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td span.old {
|
|
||||||
color: #777777;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget td span.disabled,
|
|
||||||
.bootstrap-datetimepicker-widget td span.disabled:hover {
|
|
||||||
background: none;
|
|
||||||
color: #777777;
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget th {
|
|
||||||
height: 20px;
|
|
||||||
line-height: 20px;
|
|
||||||
width: 20px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget th.picker-switch {
|
|
||||||
width: 145px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget th.next,
|
|
||||||
.bootstrap-datetimepicker-widget th.prev {
|
|
||||||
font-size: 21px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget th.disabled,
|
|
||||||
.bootstrap-datetimepicker-widget th.disabled:hover {
|
|
||||||
background: none;
|
|
||||||
color: #777777;
|
|
||||||
cursor: not-allowed;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget thead tr:first-child th {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget thead tr:first-child th:hover {
|
|
||||||
background: #eeeeee;
|
|
||||||
}
|
|
||||||
.input-group.date .input-group-addon span {
|
|
||||||
display: block;
|
|
||||||
cursor: pointer;
|
|
||||||
width: 16px;
|
|
||||||
height: 16px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget.left-oriented:before {
|
|
||||||
left: auto;
|
|
||||||
right: 6px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget.left-oriented:after {
|
|
||||||
left: auto;
|
|
||||||
right: 7px;
|
|
||||||
}
|
|
||||||
.bootstrap-datetimepicker-widget ul.list-unstyled li div.timepicker div.timepicker-picker table.table-condensed tbody > tr > td {
|
|
||||||
padding: 0px !important;
|
|
||||||
}
|
|
||||||
@media screen and (max-width: 767px) {
|
|
||||||
.bootstrap-datetimepicker-widget.timepicker-sbs {
|
|
||||||
width: 283px;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,5 +0,0 @@
|
||||||
/*!
|
|
||||||
* Datetimepicker for Bootstrap v3
|
|
||||||
//! version : 3.1.3
|
|
||||||
* https://github.com/Eonasdan/bootstrap-datetimepicker/
|
|
||||||
*/.bootstrap-datetimepicker-widget{top:0;left:0;width:250px;padding:4px;margin-top:1px;z-index:99999!important;border-radius:4px}.bootstrap-datetimepicker-widget.timepicker-sbs{width:600px}.bootstrap-datetimepicker-widget.bottom:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);position:absolute;top:-7px;left:7px}.bootstrap-datetimepicker-widget.bottom:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;top:-6px;left:8px}.bootstrap-datetimepicker-widget.top:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.top:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;position:absolute;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget .dow{width:14.2857%}.bootstrap-datetimepicker-widget.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget>ul{list-style-type:none;margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:1.2em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget table[data-hour-format="12"] .separator{width:4px;padding:0;margin:0}.bootstrap-datetimepicker-widget .datepicker>div{display:none}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget td,.bootstrap-datetimepicker-widget th{text-align:center;border-radius:4px}.bootstrap-datetimepicker-widget td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget td.cw{font-size:10px;height:20px;line-height:20px;color:#777}.bootstrap-datetimepicker-widget td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget td.day:hover,.bootstrap-datetimepicker-widget td.hour:hover,.bootstrap-datetimepicker-widget td.minute:hover,.bootstrap-datetimepicker-widget td.second:hover{background:#eee;cursor:pointer}.bootstrap-datetimepicker-widget td.old,.bootstrap-datetimepicker-widget td.new{color:#777}.bootstrap-datetimepicker-widget td.today{position:relative}.bootstrap-datetimepicker-widget td.today:before{content:'';display:inline-block;border-left:7px solid transparent;border-bottom:7px solid #428bca;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget td.active,.bootstrap-datetimepicker-widget td.active:hover{background-color:#428bca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget td.disabled,.bootstrap-datetimepicker-widget td.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:4px}.bootstrap-datetimepicker-widget td span:hover{background:#eee}.bootstrap-datetimepicker-widget td span.active{background-color:#428bca;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget td span.old{color:#777}.bootstrap-datetimepicker-widget td span.disabled,.bootstrap-datetimepicker-widget td span.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget th.picker-switch{width:145px}.bootstrap-datetimepicker-widget th.next,.bootstrap-datetimepicker-widget th.prev{font-size:21px}.bootstrap-datetimepicker-widget th.disabled,.bootstrap-datetimepicker-widget th.disabled:hover{background:0 0;color:#777;cursor:not-allowed}.bootstrap-datetimepicker-widget thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget thead tr:first-child th:hover{background:#eee}.input-group.date .input-group-addon span{display:block;cursor:pointer;width:16px;height:16px}.bootstrap-datetimepicker-widget.left-oriented:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.left-oriented:after{left:auto;right:7px}.bootstrap-datetimepicker-widget ul.list-unstyled li div.timepicker div.timepicker-picker table.table-condensed tbody>tr>td{padding:0!important}@media screen and (max-width:767px){.bootstrap-datetimepicker-widget.timepicker-sbs{width:283px}}
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
1
library/datetimepicker/.gitignore
vendored
Normal file
1
library/datetimepicker/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
index.php
|
19
library/datetimepicker/MIT-LICENSE.txt
Normal file
19
library/datetimepicker/MIT-LICENSE.txt
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
Copyright (c) 2013 http://xdsoft.net
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in
|
||||||
|
all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
THE SOFTWARE.
|
20
library/datetimepicker/README.md
Normal file
20
library/datetimepicker/README.md
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
datetimepicker
|
||||||
|
==============
|
||||||
|
[Documentation][doc]
|
||||||
|
|
||||||
|
|
||||||
|
jQuery Plugin Date and Time Picker
|
||||||
|
|
||||||
|
DateTimePicker
|
||||||
|
|
||||||
|
![ScreenShot](https://raw2.github.com/xdan/datetimepicker/master/screen/1.png)
|
||||||
|
|
||||||
|
DatePicker
|
||||||
|
|
||||||
|
![ScreenShot](https://raw2.github.com/xdan/datetimepicker/master/screen/2.png)
|
||||||
|
|
||||||
|
TimePicker
|
||||||
|
|
||||||
|
![ScreenShot](https://raw2.github.com/xdan/datetimepicker/master/screen/3.png)
|
||||||
|
|
||||||
|
[doc]: http://xdsoft.net/jqplugins/datetimepicker/
|
418
library/datetimepicker/jquery.datetimepicker.css
Normal file
418
library/datetimepicker/jquery.datetimepicker.css
Normal file
|
@ -0,0 +1,418 @@
|
||||||
|
.xdsoft_datetimepicker{
|
||||||
|
box-shadow: 0px 5px 15px -5px rgba(0, 0, 0, 0.506);
|
||||||
|
background: #FFFFFF;
|
||||||
|
border-bottom: 1px solid #BBBBBB;
|
||||||
|
border-left: 1px solid #CCCCCC;
|
||||||
|
border-right: 1px solid #CCCCCC;
|
||||||
|
border-top: 1px solid #CCCCCC;
|
||||||
|
color: #333333;
|
||||||
|
font-family: "Helvetica Neue", "Helvetica", "Arial", sans-serif;
|
||||||
|
padding: 8px;
|
||||||
|
padding-left: 0px;
|
||||||
|
padding-top: 2px;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 9999;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker iframe {
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
top: 0;
|
||||||
|
width: 75px;
|
||||||
|
height: 210px;
|
||||||
|
background: transparent;
|
||||||
|
border:none;
|
||||||
|
}
|
||||||
|
/*For IE8 or lower*/
|
||||||
|
.xdsoft_datetimepicker button {
|
||||||
|
border:none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_noselect{
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-khtml-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
-o-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
.xdsoft_noselect::selection { background: transparent; }
|
||||||
|
.xdsoft_noselect::-moz-selection { background: transparent; }
|
||||||
|
.xdsoft_datetimepicker.xdsoft_inline{
|
||||||
|
display: inline-block;
|
||||||
|
position: static;
|
||||||
|
box-shadow: none;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker *{
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding:0px;
|
||||||
|
margin:0px;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_datepicker, .xdsoft_datetimepicker .xdsoft_timepicker{
|
||||||
|
display:none;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_datepicker.active, .xdsoft_datetimepicker .xdsoft_timepicker.active{
|
||||||
|
display:block;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_datepicker{
|
||||||
|
width: 224px;
|
||||||
|
float:left;
|
||||||
|
margin-left:8px;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_datepicker{
|
||||||
|
width: 256px;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_timepicker{
|
||||||
|
width: 58px;
|
||||||
|
float:left;
|
||||||
|
text-align:center;
|
||||||
|
margin-left:8px;
|
||||||
|
margin-top:0px;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_datepicker.active+.xdsoft_timepicker{
|
||||||
|
margin-top:8px;
|
||||||
|
margin-bottom:3px
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_mounthpicker{
|
||||||
|
position: relative;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker .xdsoft_label i,
|
||||||
|
.xdsoft_datetimepicker .xdsoft_prev,
|
||||||
|
.xdsoft_datetimepicker .xdsoft_next,
|
||||||
|
.xdsoft_datetimepicker .xdsoft_today_button{
|
||||||
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Q0NBRjI1NjM0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6Q0NBRjI1NjQ0M0UwMTFFNDk4NkFGMzJFQkQzQjEwRUIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpDQ0FGMjU2MTQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpDQ0FGMjU2MjQzRTAxMUU0OTg2QUYzMkVCRDNCMTBFQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoNEP54AAAIOSURBVHja7Jq9TsMwEMcxrZD4WpBYeKUCe+kTMCACHZh4BFfHO/AAIHZGFhYkBBsSEqxsLCAgXKhbXYOTxh9pfJVP+qutnZ5s/5Lz2Y5I03QhWji2GIcgAokWgfCxNvcOCCGKqiSqhUp0laHOne05vdEyGMfkdxJDVjgwDlEQgYQBgx+ULJaWSXXS6r/ER5FBVR8VfGftTKcITNs+a1XpcFoExREIDF14AVIFxgQUS+h520cdud6wNkC0UBw6BCO/HoCYwBhD8QCkQ/x1mwDyD4plh4D6DDV0TAGyo4HcawLIBBSLDkHeH0Mg2yVP3l4TQMZQDDsEOl/MgHQqhMNuE0D+oBh0CIr8MAKyazBH9WyBuKxDWgbXfjNf32TZ1KWm/Ap1oSk/R53UtQ5xTh3LUlMmT8gt6g51Q9p+SobxgJQ/qmsfZhWywGFSl0yBjCLJCMgXail3b7+rumdVJ2YRss4cN+r6qAHDkPWjPjdJCF4n9RmAD/V9A/Wp4NQassDjwlB6XBiCxcJQWmZZb8THFilfy/lfrTvLghq2TqTHrRMTKNJ0sIhdo15RT+RpyWwFdY96UZ/LdQKBGjcXpcc1AlSFEfLmouD+1knuxBDUVrvOBmoOC/rEcN7OQxKVeJTCiAdUzUJhA2Oez9QTkp72OTVcxDcXY8iKNkxGAJXmJCOQwOa6dhyXsOa6XwEGAKdeb5ET3rQdAAAAAElFTkSuQmCC);
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker .xdsoft_label i{
|
||||||
|
opacity:0.5;
|
||||||
|
background-position:-92px -19px;
|
||||||
|
display: inline-block;
|
||||||
|
width: 9px;
|
||||||
|
height: 20px;
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker .xdsoft_prev{
|
||||||
|
float: left;
|
||||||
|
background-position:-20px 0px;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_today_button{
|
||||||
|
float: left;
|
||||||
|
background-position:-70px 0px;
|
||||||
|
margin-left:5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker .xdsoft_next{
|
||||||
|
float: right;
|
||||||
|
background-position:0px 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker .xdsoft_next,
|
||||||
|
.xdsoft_datetimepicker .xdsoft_prev ,
|
||||||
|
.xdsoft_datetimepicker .xdsoft_today_button{
|
||||||
|
background-color: transparent;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
border: 0px none currentColor;
|
||||||
|
cursor: pointer;
|
||||||
|
display: block;
|
||||||
|
height: 30px;
|
||||||
|
opacity: 0.5;
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
|
||||||
|
outline: medium none currentColor;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0px;
|
||||||
|
position: relative;
|
||||||
|
text-indent: 100%;
|
||||||
|
white-space: nowrap;
|
||||||
|
width: 20px;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev,
|
||||||
|
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_next{
|
||||||
|
float:none;
|
||||||
|
background-position:-40px -15px;
|
||||||
|
height: 15px;
|
||||||
|
width: 30px;
|
||||||
|
display: block;
|
||||||
|
margin-left:14px;
|
||||||
|
margin-top:7px;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_prev{
|
||||||
|
background-position:-40px 0px;
|
||||||
|
margin-bottom:7px;
|
||||||
|
margin-top:0px;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box{
|
||||||
|
height:151px;
|
||||||
|
overflow:hidden;
|
||||||
|
border-bottom:1px solid #DDDDDD;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div{
|
||||||
|
background: #F5F5F5;
|
||||||
|
border-top:1px solid #DDDDDD;
|
||||||
|
color: #666666;
|
||||||
|
font-size: 12px;
|
||||||
|
text-align: center;
|
||||||
|
border-collapse:collapse;
|
||||||
|
cursor:pointer;
|
||||||
|
border-bottom-width:0px;
|
||||||
|
height:25px;
|
||||||
|
line-height:25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div > div:first-child{
|
||||||
|
border-top-width:0px;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_today_button:hover,
|
||||||
|
.xdsoft_datetimepicker .xdsoft_next:hover,
|
||||||
|
.xdsoft_datetimepicker .xdsoft_prev:hover {
|
||||||
|
opacity: 1;
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_label{
|
||||||
|
display: inline;
|
||||||
|
position: relative;
|
||||||
|
z-index: 9999;
|
||||||
|
margin: 0;
|
||||||
|
padding: 5px 3px;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
background-color: #fff;
|
||||||
|
float:left;
|
||||||
|
width:182px;
|
||||||
|
text-align:center;
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_label:hover>span{
|
||||||
|
text-decoration:underline;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_label:hover i{
|
||||||
|
opacity:1.0;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select{
|
||||||
|
border:1px solid #ccc;
|
||||||
|
position:absolute;
|
||||||
|
right:0px;
|
||||||
|
top:30px;
|
||||||
|
z-index:101;
|
||||||
|
display:none;
|
||||||
|
background:#fff;
|
||||||
|
max-height:160px;
|
||||||
|
overflow-y:hidden;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_monthselect{right:-7px;}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select.xdsoft_yearselect{right:2px;}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover{
|
||||||
|
color: #fff;
|
||||||
|
background: #ff8000;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option{
|
||||||
|
padding:2px 10px 2px 5px;
|
||||||
|
text-decoration:none !important;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current{
|
||||||
|
background: #33AAFF;
|
||||||
|
box-shadow: #178FE5 0px 1px 3px 0px inset;
|
||||||
|
color:#fff;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_month{
|
||||||
|
width:100px;
|
||||||
|
text-align:right;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_calendar{
|
||||||
|
clear:both;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_year{
|
||||||
|
width: 48px;
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_calendar table{
|
||||||
|
border-collapse:collapse;
|
||||||
|
width:100%;
|
||||||
|
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_calendar td > div{
|
||||||
|
padding-right:5px;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_calendar th{
|
||||||
|
height: 25px;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_calendar td,.xdsoft_datetimepicker .xdsoft_calendar th{
|
||||||
|
width:14.2857142%;
|
||||||
|
background: #F5F5F5;
|
||||||
|
border:1px solid #DDDDDD;
|
||||||
|
color: #666666;
|
||||||
|
font-size: 12px;
|
||||||
|
text-align: right;
|
||||||
|
vertical-align: middle;
|
||||||
|
padding:0px;
|
||||||
|
border-collapse:collapse;
|
||||||
|
cursor:pointer;
|
||||||
|
height: 25px;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar td,.xdsoft_datetimepicker.xdsoft_showweeks .xdsoft_calendar th{
|
||||||
|
width:12.5%;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_calendar th{
|
||||||
|
background: #F1F1F1;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_today{
|
||||||
|
color:#33AAFF;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_default,
|
||||||
|
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_current,
|
||||||
|
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current{
|
||||||
|
background: #33AAFF;
|
||||||
|
box-shadow: #178FE5 0px 1px 3px 0px inset;
|
||||||
|
color:#fff;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month,
|
||||||
|
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled,
|
||||||
|
.xdsoft_datetimepicker .xdsoft_time_box >div >div.xdsoft_disabled{
|
||||||
|
opacity:0.5;
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_other_month.xdsoft_disabled{
|
||||||
|
opacity:0.2;
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_calendar td:hover,
|
||||||
|
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div:hover{
|
||||||
|
color: #fff !important;
|
||||||
|
background: #ff8000 !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_calendar td.xdsoft_disabled:hover,
|
||||||
|
.xdsoft_datetimepicker .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_disabled:hover{
|
||||||
|
color: inherit !important;
|
||||||
|
background: inherit !important;
|
||||||
|
box-shadow: inherit !important;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_calendar th{
|
||||||
|
font-weight: 700;
|
||||||
|
text-align: center;
|
||||||
|
color: #999;
|
||||||
|
cursor:default;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_copyright{ color:#ccc !important; font-size:10px;clear:both;float:none;margin-left:8px;}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_copyright a{ color:#eee !important;}
|
||||||
|
.xdsoft_datetimepicker .xdsoft_copyright a:hover{ color:#aaa !important;}
|
||||||
|
|
||||||
|
|
||||||
|
.xdsoft_time_box{
|
||||||
|
position:relative;
|
||||||
|
border:1px solid #ccc;
|
||||||
|
}
|
||||||
|
.xdsoft_scrollbar >.xdsoft_scroller{
|
||||||
|
background:#ccc !important;
|
||||||
|
height:20px;
|
||||||
|
border-radius:3px;
|
||||||
|
}
|
||||||
|
.xdsoft_scrollbar{
|
||||||
|
position:absolute;
|
||||||
|
width:7px;
|
||||||
|
right:0px;
|
||||||
|
top:0px;
|
||||||
|
bottom:0px;
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
.xdsoft_scroller_box{
|
||||||
|
position:relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark{
|
||||||
|
box-shadow: 0px 5px 15px -5px rgba(255, 255, 255, 0.506);
|
||||||
|
background: #000000;
|
||||||
|
border-bottom: 1px solid #444444;
|
||||||
|
border-left: 1px solid #333333;
|
||||||
|
border-right: 1px solid #333333;
|
||||||
|
border-top: 1px solid #333333;
|
||||||
|
color: #cccccc;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box{
|
||||||
|
border-bottom:1px solid #222222;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div{
|
||||||
|
background: #0a0a0a;
|
||||||
|
border-top:1px solid #222222;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label{
|
||||||
|
background-color: #000;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select{
|
||||||
|
border:1px solid #333;
|
||||||
|
background:#000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option:hover{
|
||||||
|
color: #000;
|
||||||
|
background: #007fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label > .xdsoft_select > div > .xdsoft_option.xdsoft_current{
|
||||||
|
background: #cc5500;
|
||||||
|
box-shadow: #b03e00 0px 1px 3px 0px inset;
|
||||||
|
color:#000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_label i,
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_prev,
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_next,
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_today_button{
|
||||||
|
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAeCAYAAADaW7vzAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QUExQUUzOTA0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QUExQUUzOTE0M0UyMTFFNDlBM0FFQTJENTExRDVBODYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpBQTFBRTM4RTQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpBQTFBRTM4RjQzRTIxMUU0OUEzQUVBMkQ1MTFENUE4NiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pp0VxGEAAAIASURBVHja7JrNSgMxEMebtgh+3MSLr1T1Xn2CHoSKB08+QmR8Bx9A8e7RixdB9CKCoNdexIugxFlJa7rNZneTbLIpM/CnNLsdMvNjM8l0mRCiQ9Ye61IKCAgZAUnH+mU3MMZaHYChBnJUDzWOFZdVfc5+ZFLbrWDeXPwbxIqrLLfaeS0hEBVGIRQCEiZoHQwtlGSByCCdYBl8g8egTTAWoKQMRBRBcZxYlhzhKegqMOageErsCHVkk3hXIFooDgHB1KkHIHVgzKB4ADJQ/A1jAFmAYhkQqA5TOBtocrKrgXwQA8gcFIuAIO8sQSA7hidvPwaQGZSaAYHOUWJABhWWw2EMIH9QagQERU4SArJXo0ZZL18uvaxejXt/Em8xjVBXmvFr1KVm/AJ10tRe2XnraNqaJvKE3KHuUbfK1E+VHB0q40/y3sdQSxY4FHWeKJCunP8UyDdqJZenT3ntVV5jIYCAh20vT7ioP8tpf6E2lfEMwERe+whV1MHjwZB7PBiCxcGQWwKZKD62lfGNnP/1poFAA60T7rF1UgcKd2id3KDeUS+oLWV8DfWAepOfq00CgQabi9zjcgJVYVD7PVzQUAUGAQkbNJTBICDhgwYTjDYD6XeW08ZKh+A4pYkzenOxXUbvZcWz7E8ykRMnIHGX1XPl+1m2vPYpL+2qdb8CDAARlKFEz/ZVkAAAAABJRU5ErkJggg==);
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td,
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th{
|
||||||
|
background: #0a0a0a;
|
||||||
|
border:1px solid #222222;
|
||||||
|
color: #999999;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th{
|
||||||
|
background: #0e0e0e;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_today{
|
||||||
|
color:#cc5500;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_default,
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td.xdsoft_current,
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div.xdsoft_current{
|
||||||
|
background: #cc5500;
|
||||||
|
box-shadow: #b03e00 0px 1px 3px 0px inset;
|
||||||
|
color:#000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar td:hover,
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_timepicker .xdsoft_time_box >div >div:hover{
|
||||||
|
color: #000 !important;
|
||||||
|
background: #007fff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_calendar th{
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright{ color:#333 !important;}
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a{ color:#111 !important;}
|
||||||
|
.xdsoft_datetimepicker.xdsoft_dark .xdsoft_copyright a:hover{ color:#555 !important;}
|
||||||
|
|
||||||
|
|
||||||
|
.xdsoft_dark .xdsoft_time_box{
|
||||||
|
border:1px solid #333;
|
||||||
|
}
|
||||||
|
.xdsoft_dark .xdsoft_scrollbar >.xdsoft_scroller{
|
||||||
|
background:#333 !important;
|
||||||
|
}
|
1661
library/datetimepicker/jquery.datetimepicker.js
Normal file
1661
library/datetimepicker/jquery.datetimepicker.js
Normal file
File diff suppressed because one or more lines are too long
|
@ -282,6 +282,7 @@ function dir_parse_query($s) {
|
||||||
|
|
||||||
if($all) {
|
if($all) {
|
||||||
foreach($all as $q) {
|
foreach($all as $q) {
|
||||||
|
if($quoted_string === false) {
|
||||||
if($q === 'and') {
|
if($q === 'and') {
|
||||||
$curr['logic'] = 'and';
|
$curr['logic'] = 'and';
|
||||||
continue;
|
continue;
|
||||||
|
@ -299,18 +300,20 @@ function dir_parse_query($s) {
|
||||||
$curr['logic'] = 'or';
|
$curr['logic'] = 'or';
|
||||||
$curr['field'] = trim(substr($q,0,strpos($q,'=')));
|
$curr['field'] = trim(substr($q,0,strpos($q,'=')));
|
||||||
$curr['value'] = trim(substr($q,strpos($q,'=')+1));
|
$curr['value'] = trim(substr($q,strpos($q,'=')+1));
|
||||||
if(strpos($curr['value'],'"') !== false) {
|
if($curr['value'][0] == '"' && $curr['value'][strlen($curr['value'])-1] != '"') {
|
||||||
$quoted_string = true;
|
$quoted_string = true;
|
||||||
$curr['value'] = substr($curr['value'],strpos($curr['value'],'"')+1);
|
$curr['value'] = substr($curr['value'],1);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$ret[] = $curr;
|
$ret[] = $curr;
|
||||||
$curr = array();
|
$curr = array();
|
||||||
$continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elseif($quoted_string) {
|
}
|
||||||
if(strpos($q,'"') !== false) {
|
else {
|
||||||
|
if($q[strlen($q)-1] == '"') {
|
||||||
$curr['value'] .= ' ' . str_replace('"','',trim($q));
|
$curr['value'] .= ' ' . str_replace('"','',trim($q));
|
||||||
$ret[] = $curr;
|
$ret[] = $curr;
|
||||||
$curr = array();
|
$curr = array();
|
||||||
|
|
|
@ -549,7 +549,6 @@ function events_content(&$a) {
|
||||||
|
|
||||||
$tpl = get_markup_template('event_form.tpl');
|
$tpl = get_markup_template('event_form.tpl');
|
||||||
|
|
||||||
|
|
||||||
$o .= replace_macros($tpl,array(
|
$o .= replace_macros($tpl,array(
|
||||||
'$post' => $a->get_baseurl() . '/events',
|
'$post' => $a->get_baseurl() . '/events',
|
||||||
'$eid' => $eid,
|
'$eid' => $eid,
|
||||||
|
@ -567,11 +566,11 @@ function events_content(&$a) {
|
||||||
'$ftext' => $ftext,
|
'$ftext' => $ftext,
|
||||||
'$ModalCANCEL' => t('Cancel'),
|
'$ModalCANCEL' => t('Cancel'),
|
||||||
'$ModalOK' => t('OK'),
|
'$ModalOK' => t('OK'),
|
||||||
'$s_dsel' => datetimesel($f,mktime(),mktime(0,0,0,0,0,$syear+5),mktime($shour,$sminute,$ssecond,$smonth,$sday,$syear),'start_text'),
|
'$s_dsel' => datetimesel($f,new DateTime(),DateTime::createFromFormat('Y',$syear+5),DateTime::createFromFormat('Y-m-d H:i',"$syear-$smonth-$sday $shour:$sminute"),'start_text'),
|
||||||
'$n_text' => t('Finish date/time is not known or not relevant'),
|
'$n_text' => t('Finish date/time is not known or not relevant'),
|
||||||
'$n_checked' => $n_checked,
|
'$n_checked' => $n_checked,
|
||||||
'$f_text' => t('Event Finishes:'),
|
'$f_text' => t('Event Finishes:'),
|
||||||
'$f_dsel' => datetimesel($f,mktime(),mktime(0,0,0,0,0,$fyear+5),mktime($fhour,$fminute,$fsecond,$fmonth,$fday,$fyear),'finish_text',true,true,'start_text'),
|
'$f_dsel' => datetimesel($f,new DateTime(),DateTime::createFromFormat('Y',$fyear+5),DateTime::createFromFormat('Y-m-d H:i',"$fyear-$fmonth-$fday $fhour:$fminute"),'finish_text',true,true,'start_text'),
|
||||||
'$a_text' => t('Adjust for viewer timezone'),
|
'$a_text' => t('Adjust for viewer timezone'),
|
||||||
'$a_checked' => $a_checked,
|
'$a_checked' => $a_checked,
|
||||||
'$d_text' => t('Description:'),
|
'$d_text' => t('Description:'),
|
||||||
|
|
|
@ -1160,7 +1160,7 @@ function photos_content(&$a) {
|
||||||
//$o = '';
|
//$o = '';
|
||||||
|
|
||||||
$r = q("SELECT `resource_id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s'
|
$r = q("SELECT `resource_id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s'
|
||||||
and ((photo_flags = %d) or (photo_flags & %d)) $sql_extra GROUP BY `resource_id`",
|
and ((photo_flags = %d) or (photo_flags & %d) > 0) $sql_extra GROUP BY `resource_id`",
|
||||||
intval($a->data['channel']['channel_id']),
|
intval($a->data['channel']['channel_id']),
|
||||||
dbesc('Contact Photos'),
|
dbesc('Contact Photos'),
|
||||||
dbesc( t('Contact Photos')),
|
dbesc( t('Contact Photos')),
|
||||||
|
|
|
@ -4,15 +4,14 @@ head_add_css('library/font_awesome/css/font-awesome.min.css');
|
||||||
head_add_css('library/bootstrap/css/bootstrap-theme.min.css');
|
head_add_css('library/bootstrap/css/bootstrap-theme.min.css');
|
||||||
head_add_css('library/bootstrap/css/bootstrap.min.css');
|
head_add_css('library/bootstrap/css/bootstrap.min.css');
|
||||||
head_add_css('view/css/bootstrap-red.css');
|
head_add_css('view/css/bootstrap-red.css');
|
||||||
head_add_css('library/bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css');
|
head_add_css('library/datetimepicker/jquery.datetimepicker.css');
|
||||||
//head_add_css('library/colorpicker/css/colorpicker.css');
|
//head_add_css('library/colorpicker/css/colorpicker.css');
|
||||||
head_add_css('library/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css');
|
head_add_css('library/bootstrap-colorpicker/dist/css/bootstrap-colorpicker.min.css');
|
||||||
require_once('view/php/theme_init.php');
|
require_once('view/php/theme_init.php');
|
||||||
|
|
||||||
head_add_js('library/bootstrap/js/bootstrap.min.js');
|
head_add_js('library/bootstrap/js/bootstrap.min.js');
|
||||||
head_add_js('library/bootstrap/js/bootbox.min.js');
|
head_add_js('library/bootstrap/js/bootbox.min.js');
|
||||||
head_add_js('library/bootstrap-datetimepicker/js/moment.min.js');
|
head_add_js('library/datetimepicker/jquery.datetimepicker.js');
|
||||||
head_add_js('library/bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js');
|
|
||||||
//head_add_js('library/colorpicker/js/colorpicker.js');
|
//head_add_js('library/colorpicker/js/colorpicker.js');
|
||||||
head_add_js('library/bootstrap-colorpicker/dist/js/bootstrap-colorpicker.js');
|
head_add_js('library/bootstrap-colorpicker/dist/js/bootstrap-colorpicker.js');
|
||||||
//head_add_js('library/bootstrap-colorpicker/src/js/docs.js');
|
//head_add_js('library/bootstrap-colorpicker/src/js/docs.js');
|
||||||
|
|
|
@ -108,12 +108,7 @@
|
||||||
</div>
|
</div>
|
||||||
<!-- <div class="modal-body"> -->
|
<!-- <div class="modal-body"> -->
|
||||||
<div class="modal-body form-group" style="width:90%">
|
<div class="modal-body form-group" style="width:90%">
|
||||||
<div class="input-group input-group-sm date" id="datetimepicker1">
|
<div class='date'><input type='text' placeholder='yyyy-mm-dd HH:MM' name='start_text' id='expiration-date' class="form-control" /></div><script type='text/javascript'>$(function () {var picker = $('#expiration-date').datetimepicker({format:'Y-m-d H:i', minDate: 0 }); })</script>
|
||||||
<span class="input-group-addon"><!-- <span class="glyphicon glyphicon-calendar"></span> -->
|
|
||||||
<span class="icon-calendar"></span>
|
|
||||||
</span>
|
|
||||||
<input id="expiration-date" type='text' class="form-control" data-date-format="YYYY-MM-DD HH:mm" size="20"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<!-- </div> -->
|
<!-- </div> -->
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
|
|
Loading…
Reference in a new issue