attendance card

This commit is contained in:
xiaomlove
2022-04-03 16:03:47 +08:00
parent 4172f7c07c
commit 9af8e5e442
100 changed files with 2806 additions and 65 deletions
+9 -31
View File
@@ -3,6 +3,7 @@
namespace App\Console\Commands;
use App\Models\Attendance;
use App\Repositories\AttendanceRepository;
use Illuminate\Console\Command;
class AttendanceCleanup extends Command
@@ -33,39 +34,16 @@ class AttendanceCleanup extends Command
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$query = Attendance::query()->groupBy('uid')->selectRaw('uid, max(id) as max_id');
$page = 1;
$size = 10000;
while (true) {
$rows = $query->forPage($page, $size)->get();
$log = "sql: " . last_query() . ", count: " . $rows->count();
do_log($log);
$this->info($log);
if ($rows->isEmpty()) {
$log = "no more data....";
do_log($log);
$this->info($log);
break;
}
foreach ($rows as $row) {
do {
$deleted = Attendance::query()
->where('uid', $row->uid)
->where('id', '<', $row->max_id)
->limit(10000)
->delete();
$log = "delete: $deleted by sql: " . last_query();
do_log($log);
$this->info($log);
} while ($deleted > 0);
}
$page++;
}
return 0;
$rep = new AttendanceRepository();
$result = $rep->cleanup();
$log = sprintf(
'[%s], %s, result: %s',
nexus()->getRequestId(), __METHOD__, var_export($result, true)
);
$this->info($log);
do_log($log);
}
}
+20 -15
View File
@@ -70,21 +70,21 @@ class Test extends Command
*/
public function handle()
{
$searchRep = new SearchRepository();
$r = $searchRep->deleteIndex();
$r = $searchRep->createIndex();
$r = $searchRep->import();
$arr = [
'cat' => 'category',
'source' => 'source',
'medium' => 'medium',
'codec' => 'codec',
'audiocodec' => 'audiocodec',
'standard' => 'standard',
'processing' => 'processing',
'team' => 'team',
];
// $searchRep = new SearchRepository();
// $r = $searchRep->deleteIndex();
// $r = $searchRep->createIndex();
// $r = $searchRep->import();
//
// $arr = [
// 'cat' => 'category',
// 'source' => 'source',
// 'medium' => 'medium',
// 'codec' => 'codec',
// 'audiocodec' => 'audiocodec',
// 'standard' => 'standard',
// 'processing' => 'processing',
// 'team' => 'team',
// ];
$queryString = 'cat401=1&cat404=1&source2=1&medium2=1&medium3=1&codec3=1&audiocodec3=1&standard2=1&standard3=1&processing2=1&team3=1&team4=1&incldead=1&spstate=0&inclbookmarked=0&search=&search_area=0&search_mode=0';
$userSetting = '[cat401][cat404][sou1][med1][cod1][sta2][sta3][pro2][tea2][aud2][incldead=0][spstate=3][inclbookmarked=2]';
// foreach ($arr as $queryField => $value) {
@@ -116,6 +116,11 @@ class Test extends Command
// $r = $searchRep->deleteBookmark(1);
// $r = $searchRep->addBookmark(1);
$rep = new AttendanceRepository();
$uid = 1;
$attendance = $rep->getAttendance($uid);
// $r = $rep->migrateAttendanceLogs($uid);
$r = $rep->getContinuousDays($attendance);
dd($r);
}
+6
View File
@@ -21,4 +21,10 @@ class Attendance extends NexusModel
30 => 1000
];
public function logs(): \Illuminate\Database\Eloquent\Relations\HasMany
{
return $this->hasMany(AttendanceLog::class, 'uid', 'uid');
}
}
+13
View File
@@ -0,0 +1,13 @@
<?php
namespace App\Models;
class AttendanceLog extends NexusModel
{
protected $table = 'attendance_logs';
protected $fillable = ['uid', 'points', 'date', 'is_retroactive'];
public $timestamps = true;
}
+1 -1
View File
@@ -41,7 +41,7 @@ class User extends Authenticatable
const CLASS_SYSOP = "15";
const CLASS_STAFF_LEADER = "16";
public static $classes = [
public static array $classes = [
self::CLASS_PEASANT => ['text' => 'Peasant'],
self::CLASS_USER => ['text' => 'User', 'min_seed_points' => 0],
self::CLASS_POWER_USER => ['text' => 'Power User', 'min_seed_points' => 40000],
+191 -6
View File
@@ -2,6 +2,7 @@
namespace App\Repositories;
use App\Models\Attendance;
use App\Models\AttendanceLog;
use App\Models\Setting;
use App\Models\User;
use Carbon\Carbon;
@@ -16,9 +17,6 @@ class AttendanceRepository extends BaseRepository
$today = Carbon::today();
$settings = Setting::get('bonus');
$initialBonus = $settings['attendance_initial'] ?? Attendance::INITIAL_BONUS;
$stepBonus = $settings['attendance_step'] ?? Attendance::STEP_BONUS;
$maxBonus = $settings['attendance_max'] ?? Attendance::MAX_BONUS;
$continuousBonus = $settings['attendance_continuous'] ?? Attendance::CONTINUOUS_BONUS;
$isUpdated = 1;
$initialData = [
'uid' => $uid,
@@ -43,11 +41,12 @@ class AttendanceRepository extends BaseRepository
if ($diffDays == 1) {
//yesterday do it, it's continuous
do_log("[CONTINUOUS]");
$points = $this->getContinuousPoints($initialBonus, $stepBonus, $attendance->days, $maxBonus, $continuousBonus);
$continuousDays = $this->getContinuousDays($attendance);
$points = $this->getContinuousPoints($continuousDays);
$update = [
'added' => $now,
'points' => $points,
'days' => $attendance->days + 1,
'days' => $continuousDays + 1,
'total_days' => $attendance->total_days + 1,
];
} else {
@@ -61,6 +60,12 @@ class AttendanceRepository extends BaseRepository
}
if ($isUpdated) {
User::query()->where('id', $uid)->increment('seedbonus', $update['points']);
$attendanceLog = [
'uid' => $attendance->uid,
'points' => $update['points'],
'date' => $now->format('Y-m-d'),
];
AttendanceLog::query()->insert($attendanceLog);
}
$attendance->added_time = $now->toTimeString();
$attendance->is_updated = $isUpdated;
@@ -81,8 +86,13 @@ class AttendanceRepository extends BaseRepository
return $query->first();
}
private function getContinuousPoints($initial, $step, $days, $max, $extraAwards)
private function getContinuousPoints($days)
{
$settings = Setting::get('bonus');
$initial = $settings['attendance_initial'] ?? Attendance::INITIAL_BONUS;
$step = $settings['attendance_step'] ?? Attendance::STEP_BONUS;
$max = $settings['attendance_max'] ?? Attendance::MAX_BONUS;
$extraAwards = $settings['attendance_continuous'] ?? Attendance::CONTINUOUS_BONUS;
$points = min($initial + $days * $step, $max);
krsort($extraAwards);
foreach ($extraAwards as $key => $value) {
@@ -94,6 +104,11 @@ class AttendanceRepository extends BaseRepository
return $points;
}
/**
* 将旧的 1 人 1 天 1 条迁移到新版 1 人一条
*
* @return int
*/
public function migrateAttendance(): int
{
$page = 1;
@@ -137,4 +152,174 @@ class AttendanceRepository extends BaseRepository
return count($idArr);
}
/**
* 清理签到记录,每人只保留一条
*
* @return int
*/
public function cleanup(): int
{
$query = Attendance::query()->groupBy('uid')->havingRaw("count(*) > 1")->selectRaw('uid, max(id) as max_id');
$page = 1;
$size = 10000;
$deleteCounts = 0;
while (true) {
$rows = $query->forPage($page, $size)->get();
$log = "sql: " . last_query() . ", count: " . $rows->count();
do_log($log, 'info', app()->runningInConsole());
if ($rows->isEmpty()) {
$log = "no more data....";
do_log($log, 'info', app()->runningInConsole());
break;
}
foreach ($rows as $row) {
do {
$deleted = Attendance::query()
->where('uid', $row->uid)
->where('id', '<', $row->max_id)
->limit(10000)
->delete();
$log = "delete: $deleted by sql: " . last_query();
$deleteCounts += $deleted;
do_log($log, 'info', app()->runningInConsole());
} while ($deleted > 0);
}
$page++;
}
return $deleteCounts;
}
/**
* 为 1.7 新的补签功能回写当前连续签到记录
*
* @param int $uid
* @return int
*/
public function migrateAttendanceLogs($uid = 0): int
{
$cleanUpCounts = $this->cleanup();
do_log("cleanup count: $cleanUpCounts", 'info', app()->runningInConsole());
$page = 1;
$size = 10000;
$insert = [];
$table = 'attendance_logs';
while (true) {
$logPrefix = "[MIGRATE_ATTENDANCE_LOGS], page: $page, size: $size";
$query = Attendance::query()
->where('added', '>=', Carbon::yesterday())
->forPage($page, $size);
if ($uid) {
$query->where('uid', $uid);
}
$result = $query->get();
do_log("$logPrefix, " . last_query() . ", count: " . $result->count(), 'info', app()->runningInConsole());
if ($result->isEmpty()) {
do_log("$logPrefix, no more data...");
break;
}
foreach ($result as $row) {
$interval =\DateInterval::createFromDateString("-1 day");
$period = new \DatePeriod($row->added->addDay(1), $interval, $row->days, \DatePeriod::EXCLUDE_START_DATE);
$i = 0;
foreach ($period as $periodValue) {
$insert[] = [
'uid' => $row->uid,
'points' => ($i == 0 ? $row->points : 0),
'date' => $periodValue->format('Y-m-d'),
];
$i++;
}
}
$page++;
}
if (empty($insert)) {
do_log("no data to insert...", 'info', app()->runningInConsole());
return 0;
}
NexusDB::table($table)->insert($insert);
$insertCount = count($insert);
do_log("[MIGRATE_ATTENDANCE_LOGS] DONE! insert count: " . $insertCount, 'info', app()->runningInConsole());
return $insertCount;
}
public function getContinuousDays(Attendance $attendance, $start = ''): int
{
if (!empty($start)) {
$start = Carbon::parse($start);
} else {
$start = $attendance->added;
}
$logQuery = $attendance->logs()->where('created_at', '<=', $start)->orderBy('date', 'desc');
$attendanceLogs = $logQuery->get(['date'])->keyBy('date');
$counts = $attendanceLogs->count();
do_log(sprintf('user: %s, log counts: %s from query: %s', $attendance->uid, $counts, last_query()));
if ($counts == 0) {
return 0;
}
$interval =\DateInterval::createFromDateString("-1 day");
$period = new \DatePeriod($start->clone()->addDay(1), $interval, $counts, \DatePeriod::EXCLUDE_START_DATE);
$days = 0;
foreach ($period as $value) {
$checkDate = $value->format('Y-m-d');
if ($attendanceLogs->has($checkDate)) {
$days++;
do_log(sprintf('user: %s, date: %s, has attendance, now days: %s', $attendance->uid, $checkDate, $days));
} else {
do_log(sprintf('user: %s, date: %s, not attendance, now days: %s', $attendance->uid, $checkDate, $days));
break;
}
}
return $days;
}
public function retroactive($user, $timestampMs)
{
if (!$user instanceof User) {
$user = User::query()->findOrFail((int)$user);
}
$attendance = $this->getAttendance($user->id);
if (!$attendance) {
throw new \LogicException("Haven't attendance yet");
}
$date = Carbon::createFromTimestampMs($timestampMs);
return NexusDB::transaction(function () use ($user, $attendance, $date) {
if (AttendanceLog::query()->where('uid', $user->id)->where('date', $date->format('Y-m-d'))->exists()) {
throw new \RuntimeException("Already attendance");
}
if ($user->attendance_card < 1) {
throw new \RuntimeException("Attendance card not enough");
}
$log = sprintf('user: %s, card: %s, retroactive date: %s', $user->id, $user->attendance_card, $date->format('Y-m-d'));
$continuousDays = $this->getContinuousDays($attendance, $date->clone()->subDay(1));
$log .= ", continuousDays: $continuousDays";
$points = $this->getContinuousPoints($continuousDays);
$log .= ", points: $points";
do_log($log);
$userUpdates = [
'attendance_card' => NexusDB::raw('attendance_card - 1'),
'seedbonus' => NexusDB::raw("seedbonus + $points"),
];
$affectedRows = User::query()
->where('id', $user->id)
->where('attendance_card', $user->attendance_card)
->update($userUpdates);
$msg = "Decrement user attendance_card and increment bonus";
if ($affectedRows != 1) {
do_log("$msg fail, query: " . last_query());
throw new \RuntimeException("$msg fail");
}
do_log("$msg success, query: " . last_query());
$insert = [
'uid' => $user->id,
'points' => $points,
'date' => $date,
'is_retroactive' => 1,
];
return AttendanceLog::query()->create($insert);
});
}
}
+8 -1
View File
@@ -71,6 +71,9 @@ class SearchRepository extends BaseRepository
//tag
'tag_id' => ['type' => 'long', ],
//use for category.mode
'mode' => ['type' => 'long', ],
//relations
'torrent_relations' => [
'type' => 'join',
@@ -194,7 +197,7 @@ class SearchRepository extends BaseRepository
$fields = $this->getTorrentBaseFields();
array_unshift($fields, 'id');
$query = Torrent::query()
->with(['user', 'torrent_tags', 'bookmarks'])
->with(['user', 'torrent_tags', 'bookmarks', 'basic_category'])
->select($fields);
if (!is_null($torrentId)) {
$idArr = preg_split('/[,\s]+/', $torrentId);
@@ -299,6 +302,7 @@ class SearchRepository extends BaseRepository
'routing' => $torrent->owner,
];
$data = Arr::only($torrent->toArray(), $baseFields);
$data['mode'] = $torrent->basic_category->mode;
$body = array_merge($data, [
'_doc_type' => $docType,
'torrent_id' => $torrent->id,
@@ -433,6 +437,9 @@ class SearchRepository extends BaseRepository
$must = $must_not = [];
$mustBoolShould = [];
$must[] = ['match' => ['_doc_type' => self::DOC_TYPE_TORRENT]];
if (!empty($params['mode'])) {
$must[] = ['match' => ['mode' => $params['mode']]];
}
foreach (self::$queryFieldToTorrentFieldMaps as $queryField => $torrentField) {
if (isset($params[$queryField]) && $params[$queryField] !== '') {
@@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('attendance_logs', function (Blueprint $table) {
$table->id();
$table->integer('uid')->index();
$table->integer('points');
$table->date('date')->index();
$table->smallInteger('is_retroactive')->default(0);
$table->dateTime('created_at')->useCurrent();
$table->dateTime('updated_at')->useCurrent()->useCurrentOnUpdate();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('attendance_logs');
}
};
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->integer('attendance_card')->default(0);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('attendance_card');
});
}
};
+9 -1
View File
@@ -2375,6 +2375,11 @@ if ($CURUSER){
<script type="text/javascript" src="domTT.js<?php echo $cssupdatedate?>"></script>
<script type="text/javascript" src="domTT_drag.js<?php echo $cssupdatedate?>"></script>
<script type="text/javascript" src="fadomatic.js<?php echo $cssupdatedate?>"></script>
<?php
foreach (\Nexus\Nexus::getAppendHeaders() as $value) {
print($value);
}
?>
<script type="text/javascript" src="jquery-1.12.4.min.js<?php echo $cssupdatedate?>"></script>
<script type="text/javascript">jQuery.noConflict();</script>
</head>
@@ -2490,7 +2495,7 @@ else {
<?php if (get_user_class() >= UC_SYSOP) { ?> [<a href="settings.php"><?php echo $lang_functions['text_site_settings'] ?></a>]<?php } ?>
[<a href="torrents.php?inclbookmarked=1&amp;allsec=1&amp;incldead=0"><?php echo $lang_functions['text_bookmarks'] ?></a>]
<font class = 'color_bonus'><?php echo $lang_functions['text_bonus'] ?></font>[<a href="mybonus.php"><?php echo $lang_functions['text_use'] ?></a>]: <?php echo number_format($CURUSER['seedbonus'], 1)?>
<?php if($attendance){ printf('&nbsp;'.$lang_functions['text_attended'], $attendance->points); }else{ printf(' <a href="attendance.php" class="faqlink">%s</a>', $lang_functions['text_attendance']);}?>
<?php if($attendance){ printf(' <a href="attendance.php" class="">'.$lang_functions['text_attended'].'</a>', $attendance->points, $CURUSER['attendance_card']); }else{ printf(' <a href="attendance.php" class="faqlink">%s</a>', $lang_functions['text_attendance']);}?>
<font class = 'color_bonus'><?php echo $lang_functions['text_seed_points'] ?></font>: <?php echo number_format($CURUSER['seed_points'], 1)?>
<font class = 'color_invite'><?php echo $lang_functions['text_invite'] ?></font>[<a href="invite.php?id=<?php echo $CURUSER['id']?>"><?php echo $lang_functions['text_send'] ?></a>]: <?php echo $CURUSER['invites']?>
<br />
@@ -2699,6 +2704,9 @@ function stdfoot() {
print("</div>");
if ($analyticscode_tweak)
print("\n".$analyticscode_tweak."\n");
foreach (\Nexus\Nexus::getAppendFooters() as $value) {
print($value);
}
print("</body></html>");
//echo replacePngTags(ob_get_clean());
+3
View File
@@ -10,4 +10,7 @@ $lang_attendance = array
'continuous' => "连续签到 %u 天后,每次签到额外获得 %u 魔力值(不累计)。",
'sorry' => "抱歉",
'already_attended' => "您今天已经签到过了,请勿重复刷新。",
'retroactive_event_text' => '补',
'retroactive_confirm_tip' => '确定要补签: ',
'retroactive_description' => '点击白色背景的圆点进行补签。你目前拥有补签卡 <b>%d</b> 张。',
);
+1 -1
View File
@@ -296,7 +296,7 @@ $lang_functions = array
'text_please_download_something_within' => "请在",
'text_inactive_account_be_deleted' => "内做些下载。没有流量的用户会被删除账号。",
'text_attendance' => '签到得魔力',
'text_attended' => '(签到已得%u)',
'text_attended' => '(签到已得%u, 补签卡:%d)',
'row_pt_gen_douban_url' => "PT-Gen douban 链接",
'text_pt_gen_douban_url_note' => "(来自 <strong><a href=\"https://www.douban.com/\">douban</a></strong> 的链接。如电影 <b>Transformers</b> 的链接是<b> https://movie.douban.com/subject/1794171/</b>)",
'row_pt_gen_imdb_url' => "PT-Gen imdb 链接",
+1 -1
View File
@@ -298,7 +298,7 @@ $lang_functions = array
'text_please_download_something_within' => "請在",
'text_inactive_account_be_deleted' => "內做些下載。沒有流量的用戶會被移除賬號。",
'text_attendance' => '簽到得魔力',
'text_attended' => '(簽到已得%u)',
'text_attended' => '(簽到已得%u, 補簽卡:%d)',
'text_pt_gen_douban_url_note' => "(來自 <strong><a href=\"https://www.douban.com/\">douban</a></strong> 的鏈接。如電影 <b>Transformers</b> 的鏈接是<b> https://movie.douban.com/subject/1794171/</b>)",
'row_pt_gen_imdb_url' => "PT-Gen imdb 鏈接",
'text_pt_gen_imdb_url_note' => "(來自 <strong><a href=\"https://www.imdb.com//\">imdb</a></strong> 的鏈接。如電影 <b>Transformers</b> 的鏈接是<b> https://www.imdb.com/title/tt0418279/</b>)",
+1 -1
View File
@@ -298,7 +298,7 @@ $lang_functions = array
'text_please_download_something_within' => "Please download something within ",
'text_inactive_account_be_deleted' => ". Inactive accounts (with no transfer amount) will be deleted.",
'text_attendance' => 'Attend get bouns',
'text_attended' => '(Attend got bouns %u)',
'text_attended' => '(Attend got bouns %u, card:%d)',
'row_pt_gen_douban_url' => "PT-Gen douban link",
'text_pt_gen_douban_url_note' => "(URL taken from <strong><a href=\"https://www.douban.com/\">douban</a></strong>. e.g.&nbsp;for movie <b>Transformers</b> the URL is <b> https://movie.douban.com/subject/1794171//</b>)",
'row_pt_gen_imdb_url' => "PT-Gen imdb link",
+13
View File
@@ -198,6 +198,19 @@ class Update extends Install
}
}
/**
* @since 1.7.0
*
* add attendance_card to users
*/
if (WITH_LARAVEL && !NexusDB::schema()->hasColumn('users', 'attendance_card')) {
$this->runMigrate('database/migrations/2022_04_02_163930_create_attendance_logs_table.php');
$this->runMigrate('database/migrations/2022_04_03_041642_add_attendance_card_to_users_table.php');
$rep = new AttendanceRepository();
$count = $rep->migrateAttendanceLogs();
$this->doLog("[ADD_ATTENDANCE_CARD_TO_USERS], migrateAttendanceLogs: $count");
}
}
public function runExtraMigrate()
+47
View File
@@ -17,6 +17,10 @@ final class Nexus
private static ?Nexus $instance = null;
private static array $appendHeaders = [];
private static array $appendFooters = [];
const PLATFORM_USER = 'user';
const PLATFORM_ADMIN = 'admin';
const PLATFORM_TRACKER = 'tracker';
@@ -179,5 +183,48 @@ final class Nexus
$this->platform = $platform;
}
public static function js(string $js, string $position, bool $isFile)
{
if ($isFile) {
$append = sprintf('<script type="text/javascript" src="%s"></script>', $js);
} else {
$append = sprintf('<script type="text/javascript">%s</script>', $js);
}
if ($position == 'header') {
self::$appendHeaders[] = $append;
} elseif ($position == 'footer') {
self::$appendFooters[] = $append;
} else {
throw new \InvalidArgumentException("Invalid position: $position");
}
}
public static function css(string $css, string $position, bool $isFile)
{
if ($isFile) {
$append = sprintf('<link rel="stylesheet" href="%s" type="text/css">', $css);
} else {
$append = sprintf('<style type="text/css">%s</style>', $css);
}
if ($position == 'header') {
self::$appendHeaders[] = $append;
} elseif ($position == 'footer') {
self::$appendFooters[] = $append;
} else {
throw new \InvalidArgumentException("Invalid position: $position");
}
}
public static function getAppendHeaders(): array
{
return self::$appendHeaders;
}
public static function getAppendFooters(): array
{
return self::$appendFooters;
}
}
+7
View File
@@ -27,3 +27,10 @@ function toggleUserMedalStatus($params)
}
function attendanceRetroactive($params)
{
global $CURUSER;
$rep = new \App\Repositories\AttendanceRepository();
return $rep->retroactive($CURUSER['id'], $params['timestamp']);
}
+65
View File
@@ -0,0 +1,65 @@
<?php
require "../include/bittorrent.php";
dbconn();
loggedinorreturn();
if (get_user_class() < UC_SYSOP)
stderr("Sorry", "Access denied.");
stdhead("Add Attendance card", false);
$allClass = array_chunk(\App\Models\User::$classes, 4, true);
?>
<table class=main width=737 border=0 cellspacing=0 cellpadding=0><tr><td class=embedded>
<div align=center>
<h1>Add attendance card to all staff members and users:</a></h1>
<form method=post action=<?php echo $_SERVER['PHP_SELF']?>>
<?php
if (isset($_GET["returnto"]) || $_SERVER["HTTP_REFERER"])
{
?>
<input type=hidden name=returnto value="<?php echo htmlspecialchars($_GET["returnto"]) ? htmlspecialchars($_GET["returnto"]) : htmlspecialchars($_SERVER["HTTP_REFERER"])?>">
<?php
}
?>
<table cellspacing=0 cellpadding=5>
<?php
if (isset($_GET["sent"]) && $_GET["sent"] == 1) {
?>
<tr><td colspan=2 class="text" align="center"><font color=red><b>Upload amount has been added and inform message has been sent.</font></b></tr></td>
<?php
}
?>
<tr><td class="rowhead" valign="top">Amount </td><td class="rowfollow"><input type=number name=amount size=10></td></tr>
<tr>
<td class="rowhead" valign="top">Add to</td><td class="rowfollow">
<table style="border: 0" width="100%" cellpadding="0" cellspacing="0">
<?php foreach ($allClass as $bulk) {?>
<tr>
<?php foreach ($bulk as $key => $value) {?>
<td style="border: 0" width="20"><input type="checkbox" name="clases[]" value="<?php echo $key?>">
</td>
<td style="border: 0"><?php echo $value['text'] ?></td>
<?php }?>
</tr>
<?php } ?>
</table>
</td>
</tr>
<tr><td class="rowhead" valign="top">Subject </td><td class="rowfollow"><input type=text name=subject size=82></td></tr>
<tr><td class="rowhead" valign="top">Reason </td><td class="rowfollow"><textarea name=msg cols=80 rows=5><?php echo $body ?? ''?></textarea></td></tr>
<tr>
<td class="rowfollow" colspan=2><div align="center"><b>Operator:&nbsp;&nbsp;</b>
<?php echo $CURUSER['username']?>
<input name="sender" type="radio" value="self" checked>
&nbsp; System
<input name="sender" type="radio" value="system">
</div></td></tr>
<tr><td class="rowfollow" colspan=2 align=center><input type=submit value="Do It!" class=btn></td></tr>
</table>
<input type=hidden name=receiver value=<?php echo $receiver ?? ''?>>
</form>
</div></td></tr></table>
<br />
NOTE: Do not use BB codes. (NO HTML)
<?php
stdfoot();
+84 -6
View File
@@ -28,18 +28,96 @@ parked();
// stderr($lang_attendance['sorry'], $lang_attendance['already_attended']);
//}
\Nexus\Nexus::css('vendor/fullcalendar-5.10.2/main.min.css', 'header', true);
\Nexus\Nexus::js('vendor/fullcalendar-5.10.2/main.min.js', 'footer', true);
\Nexus\Nexus::js('vendor/fullcalendar-5.10.2/locales/zh-cn.js', 'footer', true);
$today = \Carbon\Carbon::today();
$tomorrow = \Carbon\Carbon::tomorrow();
$end = $today->clone()->endOfMonth();
$start = $today->clone()->subMonth(2);
$rep = new \App\Repositories\AttendanceRepository();
$result = $rep->attend($CURUSER['id']);
if ($result->is_updated) {
$count = $result->total_days;
$cdays = $result->days;
$points = $result->points;
$attendance = $rep->attend($CURUSER['id']);
$logs = $attendance->logs()->where('date', '>=', $start->format('Y-m-d'))->get()->keyBy('date');
$interval = new \DateInterval('P1D');
$period = new \DatePeriod($start, $interval, $end);
$events = [];
foreach ($period as $value) {
if ($value->gte($tomorrow)) {
continue;
}
$checkDate = $value->format('Y-m-d');
$eventBase = ['start' => $checkDate, 'end' => $checkDate];
if ($logs->has($checkDate)) {
$logValue = $logs->get($checkDate);
$events[] = array_merge($eventBase, ['display' => 'background']);
if ($logValue->points > 0) {
$events[] = array_merge($eventBase, ['title' => $logValue->points]);
}
if ($logValue->is_retroactive) {
$events[] = array_merge($eventBase, ['title' => $lang_attendance['retroactive_event_text'], 'display' => 'list-item']);
}
} else {
$events[] = array_merge($eventBase, ['groupId' => 'to_do', 'display' => 'list-item']);
}
}
$eventStr = json_encode($events);
$validRangeStr = json_encode(['start' => $start->format('Y-m-d'), 'end' => $end->format('Y-m-d')]);
$js = <<<EOP
let events = JSON.parse('$eventStr')
let validRange = JSON.parse('$validRangeStr')
let confirmText = "{$lang_attendance['retroactive_confirm_tip']}"
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
initialView: 'dayGridMonth',
locale: 'zh-cn',
events: events,
validRange: validRange,
eventClick: function(info) {
console.log(info.event);
if (info.event.groupId == 'to_do') {
retroactive(info.event.start)
}
}
});
calendar.render();
});
function retroactive(start) {
let year = start.getFullYear()
let month = start.getMonth() + 1
let day = start.getDate()
let date = year + '-' + month + '-' + day
if (!window.confirm(confirmText + date + ' ?')) {
console.log("cancel")
return
}
jQuery.post('ajax.php', {params: {timestamp: start.getTime()}, action: 'attendanceRetroactive'}, function (response) {
console.log(response);
if (response.ret != 0) {
alert(response.msg)
} else {
location.reload();
}
}, 'json')
}
EOP;
\Nexus\Nexus::js($js, 'footer', false);
if (1) {
$count = $attendance->total_days;
$cdays = $attendance->days;
$points = $attendance->points;
stdhead($lang_attendance['title']);
begin_main_frame();
begin_frame($lang_attendance['success']);
printf('<p>'.$lang_attendance['attend_info'].'</p>', $count, $cdays, $points);
printf('<p>'.$lang_attendance['attend_info'].$lang_attendance['retroactive_description'].'</p>', $count, $cdays, $points, $CURUSER['attendance_card']);
end_frame();
echo '<div style="display: flex;justify-content: center;padding: 20px 0"><div id="calendar" style="width: 60%"></div></div>';
echo '<ul>';
printf('<li>'.$lang_attendance['initial'].'</li>', $attendance_initial_bonus);
printf('<li>'.$lang_attendance['steps'].'</li>', $attendance_step_bonus, $attendance_max_bonus);
+3 -1
View File
@@ -850,7 +850,9 @@ else
if ($elasticsearchEnabled) {
$searchRep = new \App\Repositories\SearchRepository();
$resultFromElastic = $searchRep->listTorrentFromEs($_GET, $CURUSER['id'], $_SERVER['QUERY_STRING']);
$esParams = $_GET;
$esParams['mode'] = $sectiontype;
$resultFromElastic = $searchRep->listTorrentFromEs($esParams, $CURUSER['id'], $_SERVER['QUERY_STRING']);
$count = $resultFromElastic['total'];
} else {
$res = sql_query($sql);
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var af = {
code: 'af',
week: {
dow: 1, // Maandag is die eerste dag van die week.
doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.
},
buttonText: {
prev: 'Vorige',
next: 'Volgende',
today: 'Vandag',
year: 'Jaar',
month: 'Maand',
week: 'Week',
day: 'Dag',
list: 'Agenda',
},
allDayText: 'Heeldag',
moreLinkText: 'Addisionele',
noEventsText: 'Daar is geen gebeurtenisse nie',
};
return af;
}());
+28
View File
@@ -0,0 +1,28 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var arDz = {
code: 'ar-dz',
week: {
dow: 0, // Sunday is the first day of the week.
doy: 4, // The week that contains Jan 1st is the first week of the year.
},
direction: 'rtl',
buttonText: {
prev: 'السابق',
next: 'التالي',
today: 'اليوم',
month: 'شهر',
week: 'أسبوع',
day: 'يوم',
list: 'أجندة',
},
weekText: 'أسبوع',
allDayText: 'اليوم كله',
moreLinkText: 'أخرى',
noEventsText: 'أي أحداث لعرض',
};
return arDz;
}());
+28
View File
@@ -0,0 +1,28 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var arKw = {
code: 'ar-kw',
week: {
dow: 0, // Sunday is the first day of the week.
doy: 12, // The week that contains Jan 1st is the first week of the year.
},
direction: 'rtl',
buttonText: {
prev: 'السابق',
next: 'التالي',
today: 'اليوم',
month: 'شهر',
week: 'أسبوع',
day: 'يوم',
list: 'أجندة',
},
weekText: 'أسبوع',
allDayText: 'اليوم كله',
moreLinkText: 'أخرى',
noEventsText: 'أي أحداث لعرض',
};
return arKw;
}());
+28
View File
@@ -0,0 +1,28 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var arLy = {
code: 'ar-ly',
week: {
dow: 6, // Saturday is the first day of the week.
doy: 12, // The week that contains Jan 1st is the first week of the year.
},
direction: 'rtl',
buttonText: {
prev: 'السابق',
next: 'التالي',
today: 'اليوم',
month: 'شهر',
week: 'أسبوع',
day: 'يوم',
list: 'أجندة',
},
weekText: 'أسبوع',
allDayText: 'اليوم كله',
moreLinkText: 'أخرى',
noEventsText: 'أي أحداث لعرض',
};
return arLy;
}());
+28
View File
@@ -0,0 +1,28 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var arMa = {
code: 'ar-ma',
week: {
dow: 6, // Saturday is the first day of the week.
doy: 12, // The week that contains Jan 1st is the first week of the year.
},
direction: 'rtl',
buttonText: {
prev: 'السابق',
next: 'التالي',
today: 'اليوم',
month: 'شهر',
week: 'أسبوع',
day: 'يوم',
list: 'أجندة',
},
weekText: 'أسبوع',
allDayText: 'اليوم كله',
moreLinkText: 'أخرى',
noEventsText: 'أي أحداث لعرض',
};
return arMa;
}());
+28
View File
@@ -0,0 +1,28 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var arSa = {
code: 'ar-sa',
week: {
dow: 0, // Sunday is the first day of the week.
doy: 6, // The week that contains Jan 1st is the first week of the year.
},
direction: 'rtl',
buttonText: {
prev: 'السابق',
next: 'التالي',
today: 'اليوم',
month: 'شهر',
week: 'أسبوع',
day: 'يوم',
list: 'أجندة',
},
weekText: 'أسبوع',
allDayText: 'اليوم كله',
moreLinkText: 'أخرى',
noEventsText: 'أي أحداث لعرض',
};
return arSa;
}());
+28
View File
@@ -0,0 +1,28 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var arTn = {
code: 'ar-tn',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
direction: 'rtl',
buttonText: {
prev: 'السابق',
next: 'التالي',
today: 'اليوم',
month: 'شهر',
week: 'أسبوع',
day: 'يوم',
list: 'أجندة',
},
weekText: 'أسبوع',
allDayText: 'اليوم كله',
moreLinkText: 'أخرى',
noEventsText: 'أي أحداث لعرض',
};
return arTn;
}());
+28
View File
@@ -0,0 +1,28 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var ar = {
code: 'ar',
week: {
dow: 6, // Saturday is the first day of the week.
doy: 12, // The week that contains Jan 1st is the first week of the year.
},
direction: 'rtl',
buttonText: {
prev: 'السابق',
next: 'التالي',
today: 'اليوم',
month: 'شهر',
week: 'أسبوع',
day: 'يوم',
list: 'أجندة',
},
weekText: 'أسبوع',
allDayText: 'اليوم كله',
moreLinkText: 'أخرى',
noEventsText: 'أي أحداث لعرض',
};
return ar;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var az = {
code: 'az',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Əvvəl',
next: 'Sonra',
today: 'Bu Gün',
month: 'Ay',
week: 'Həftə',
day: 'Gün',
list: 'Gündəm',
},
weekText: 'Həftə',
allDayText: 'Bütün Gün',
moreLinkText: function(n) {
return '+ daha çox ' + n
},
noEventsText: 'Göstərmək üçün hadisə yoxdur',
};
return az;
}());
+28
View File
@@ -0,0 +1,28 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var bg = {
code: 'bg',
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'назад',
next: 'напред',
today: 'днес',
month: 'Месец',
week: 'Седмица',
day: 'Ден',
list: 'График',
},
allDayText: 'Цял ден',
moreLinkText: function(n) {
return '+още ' + n
},
noEventsText: 'Няма събития за показване',
};
return bg;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var bn = {
code: 'bn',
week: {
dow: 0, // Sunday is the first day of the week.
doy: 6, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'পেছনে',
next: 'সামনে',
today: 'আজ',
month: 'মাস',
week: 'সপ্তাহ',
day: 'দিন',
list: 'তালিকা',
},
weekText: 'সপ্তাহ',
allDayText: 'সারাদিন',
moreLinkText: function(n) {
return '+অন্যান্য ' + n
},
noEventsText: 'কোনো ইভেন্ট নেই',
};
return bn;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var bs = {
code: 'bs',
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'Prošli',
next: 'Sljedeći',
today: 'Danas',
month: 'Mjesec',
week: 'Sedmica',
day: 'Dan',
list: 'Raspored',
},
weekText: 'Sed',
allDayText: 'Cijeli dan',
moreLinkText: function(n) {
return '+ još ' + n
},
noEventsText: 'Nema događaja za prikazivanje',
};
return bs;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var ca = {
code: 'ca',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Anterior',
next: 'Següent',
today: 'Avui',
month: 'Mes',
week: 'Setmana',
day: 'Dia',
list: 'Agenda',
},
weekText: 'Set',
allDayText: 'Tot el dia',
moreLinkText: 'més',
noEventsText: 'No hi ha esdeveniments per mostrar',
};
return ca;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var cs = {
code: 'cs',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Dříve',
next: 'Později',
today: 'Nyní',
month: 'Měsíc',
week: 'Týden',
day: 'Den',
list: 'Agenda',
},
weekText: 'Týd',
allDayText: 'Celý den',
moreLinkText: function(n) {
return '+další: ' + n
},
noEventsText: 'Žádné akce k zobrazení',
};
return cs;
}());
+28
View File
@@ -0,0 +1,28 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var cy = {
code: 'cy',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Blaenorol',
next: 'Nesaf',
today: 'Heddiw',
year: 'Blwyddyn',
month: 'Mis',
week: 'Wythnos',
day: 'Dydd',
list: 'Rhestr',
},
weekText: 'Wythnos',
allDayText: 'Trwy\'r dydd',
moreLinkText: 'Mwy',
noEventsText: 'Dim digwyddiadau',
};
return cy;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var da = {
code: 'da',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Forrige',
next: 'Næste',
today: 'I dag',
month: 'Måned',
week: 'Uge',
day: 'Dag',
list: 'Agenda',
},
weekText: 'Uge',
allDayText: 'Hele dagen',
moreLinkText: 'flere',
noEventsText: 'Ingen arrangementer at vise',
};
return da;
}());
+65
View File
@@ -0,0 +1,65 @@
FullCalendar.globalLocales.push(function () {
'use strict';
function affix(buttonText) {
return (buttonText === 'Tag' || buttonText === 'Monat') ? 'r' :
buttonText === 'Jahr' ? 's' : ''
}
var deAt = {
code: 'de-at',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Zurück',
next: 'Vor',
today: 'Heute',
year: 'Jahr',
month: 'Monat',
week: 'Woche',
day: 'Tag',
list: 'Terminübersicht',
},
weekText: 'KW',
weekTextLong: 'Woche',
allDayText: 'Ganztägig',
moreLinkText: function(n) {
return '+ weitere ' + n
},
noEventsText: 'Keine Ereignisse anzuzeigen',
buttonHints: {
prev(buttonText) {
return `Vorherige${affix(buttonText)} ${buttonText}`
},
next(buttonText) {
return `Nächste${affix(buttonText)} ${buttonText}`
},
today(buttonText) {
// → Heute, Diese Woche, Dieser Monat, Dieses Jahr
if (buttonText === 'Tag') {
return 'Heute'
}
return `Diese${affix(buttonText)} ${buttonText}`
},
},
viewHint(buttonText) {
// → Tagesansicht, Wochenansicht, Monatsansicht, Jahresansicht
const glue = buttonText === 'Woche' ? 'n' : buttonText === 'Monat' ? 's' : 'es';
return buttonText + glue + 'ansicht'
},
navLinkHint: 'Gehe zu $0',
moreLinkHint(eventCnt) {
return 'Zeige ' + (eventCnt === 1 ?
'ein weiteres Ereignis' :
eventCnt + ' weitere Ereignisse')
},
closeHint: 'Schließen',
timeHint: 'Uhrzeit',
eventHint: 'Ereignis',
};
return deAt;
}());
+65
View File
@@ -0,0 +1,65 @@
FullCalendar.globalLocales.push(function () {
'use strict';
function affix(buttonText) {
return (buttonText === 'Tag' || buttonText === 'Monat') ? 'r' :
buttonText === 'Jahr' ? 's' : ''
}
var de = {
code: 'de',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Zurück',
next: 'Vor',
today: 'Heute',
year: 'Jahr',
month: 'Monat',
week: 'Woche',
day: 'Tag',
list: 'Terminübersicht',
},
weekText: 'KW',
weekTextLong: 'Woche',
allDayText: 'Ganztägig',
moreLinkText: function(n) {
return '+ weitere ' + n
},
noEventsText: 'Keine Ereignisse anzuzeigen',
buttonHints: {
prev(buttonText) {
return `Vorherige${affix(buttonText)} ${buttonText}`
},
next(buttonText) {
return `Nächste${affix(buttonText)} ${buttonText}`
},
today(buttonText) {
// → Heute, Diese Woche, Dieser Monat, Dieses Jahr
if (buttonText === 'Tag') {
return 'Heute'
}
return `Diese${affix(buttonText)} ${buttonText}`
},
},
viewHint(buttonText) {
// → Tagesansicht, Wochenansicht, Monatsansicht, Jahresansicht
const glue = buttonText === 'Woche' ? 'n' : buttonText === 'Monat' ? 's' : 'es';
return buttonText + glue + 'ansicht'
},
navLinkHint: 'Gehe zu $0',
moreLinkHint(eventCnt) {
return 'Zeige ' + (eventCnt === 1 ?
'ein weiteres Ereignis' :
eventCnt + ' weitere Ereignisse')
},
closeHint: 'Schließen',
timeHint: 'Uhrzeit',
eventHint: 'Ereignis',
};
return de;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var el = {
code: 'el',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4st is the first week of the year.
},
buttonText: {
prev: 'Προηγούμενος',
next: 'Επόμενος',
today: 'Σήμερα',
month: 'Μήνας',
week: 'Εβδομάδα',
day: 'Ημέρα',
list: 'Ατζέντα',
},
weekText: 'Εβδ',
allDayText: 'Ολοήμερο',
moreLinkText: 'περισσότερα',
noEventsText: 'Δεν υπάρχουν γεγονότα προς εμφάνιση',
};
return el;
}());
+24
View File
@@ -0,0 +1,24 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var enAu = {
code: 'en-au',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonHints: {
prev: 'Previous $0',
next: 'Next $0',
today: 'This $0',
},
viewHint: '$0 view',
navLinkHint: 'Go to $0',
moreLinkHint(eventCnt) {
return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`
},
};
return enAu;
}());
+24
View File
@@ -0,0 +1,24 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var enGb = {
code: 'en-gb',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonHints: {
prev: 'Previous $0',
next: 'Next $0',
today: 'This $0',
},
viewHint: '$0 view',
navLinkHint: 'Go to $0',
moreLinkHint(eventCnt) {
return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`
},
};
return enGb;
}());
+24
View File
@@ -0,0 +1,24 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var enNz = {
code: 'en-nz',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonHints: {
prev: 'Previous $0',
next: 'Next $0',
today: 'This $0',
},
viewHint: '$0 view',
navLinkHint: 'Go to $0',
moreLinkHint(eventCnt) {
return `Show ${eventCnt} more event${eventCnt === 1 ? '' : 's'}`
},
};
return enNz;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var eo = {
code: 'eo',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Antaŭa',
next: 'Sekva',
today: 'Hodiaŭ',
month: 'Monato',
week: 'Semajno',
day: 'Tago',
list: 'Tagordo',
},
weekText: 'Sm',
allDayText: 'Tuta tago',
moreLinkText: 'pli',
noEventsText: 'Neniuj eventoj por montri',
};
return eo;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var esUs = {
code: 'es',
week: {
dow: 0, // Sunday is the first day of the week.
doy: 6, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'Ant',
next: 'Sig',
today: 'Hoy',
month: 'Mes',
week: 'Semana',
day: 'Día',
list: 'Agenda',
},
weekText: 'Sm',
allDayText: 'Todo el día',
moreLinkText: 'más',
noEventsText: 'No hay eventos para mostrar',
};
return esUs;
}());
+46
View File
@@ -0,0 +1,46 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var es = {
code: 'es',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Ant',
next: 'Sig',
today: 'Hoy',
month: 'Mes',
week: 'Semana',
day: 'Día',
list: 'Agenda',
},
buttonHints: {
prev: '$0 antes',
next: '$0 siguiente',
today(buttonText) {
return (buttonText === 'Día') ? 'Hoy' :
((buttonText === 'Semana') ? 'Esta' : 'Este') + ' ' + buttonText.toLocaleLowerCase()
},
},
viewHint(buttonText) {
return 'Vista ' + (buttonText === 'Semana' ? 'de la' : 'del') + ' ' + buttonText.toLocaleLowerCase()
},
weekText: 'Sm',
weekTextLong: 'Semana',
allDayText: 'Todo el día',
moreLinkText: 'más',
moreLinkHint(eventCnt) {
return `Mostrar ${eventCnt} eventos más`
},
noEventsText: 'No hay eventos para mostrar',
navLinkHint: 'Ir al $0',
closeHint: 'Cerrar',
timeHint: 'La hora',
eventHint: 'Evento',
};
return es;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var et = {
code: 'et',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Eelnev',
next: 'Järgnev',
today: 'Täna',
month: 'Kuu',
week: 'Nädal',
day: 'Päev',
list: 'Päevakord',
},
weekText: 'näd',
allDayText: 'Kogu päev',
moreLinkText: function(n) {
return '+ veel ' + n
},
noEventsText: 'Kuvamiseks puuduvad sündmused',
};
return et;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var eu = {
code: 'eu',
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'Aur',
next: 'Hur',
today: 'Gaur',
month: 'Hilabetea',
week: 'Astea',
day: 'Eguna',
list: 'Agenda',
},
weekText: 'As',
allDayText: 'Egun osoa',
moreLinkText: 'gehiago',
noEventsText: 'Ez dago ekitaldirik erakusteko',
};
return eu;
}());
+30
View File
@@ -0,0 +1,30 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var fa = {
code: 'fa',
week: {
dow: 6, // Saturday is the first day of the week.
doy: 12, // The week that contains Jan 1st is the first week of the year.
},
direction: 'rtl',
buttonText: {
prev: 'قبلی',
next: 'بعدی',
today: 'امروز',
month: 'ماه',
week: 'هفته',
day: 'روز',
list: 'برنامه',
},
weekText: 'هف',
allDayText: 'تمام روز',
moreLinkText: function(n) {
return 'بیش از ' + n
},
noEventsText: 'هیچ رویدادی به نمایش',
};
return fa;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var fi = {
code: 'fi',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Edellinen',
next: 'Seuraava',
today: 'Tänään',
month: 'Kuukausi',
week: 'Viikko',
day: 'Päivä',
list: 'Tapahtumat',
},
weekText: 'Vk',
allDayText: 'Koko päivä',
moreLinkText: 'lisää',
noEventsText: 'Ei näytettäviä tapahtumia',
};
return fi;
}());
+24
View File
@@ -0,0 +1,24 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var frCa = {
code: 'fr',
buttonText: {
prev: 'Précédent',
next: 'Suivant',
today: "Aujourd'hui",
year: 'Année',
month: 'Mois',
week: 'Semaine',
day: 'Jour',
list: 'Mon planning',
},
weekText: 'Sem.',
allDayText: 'Toute la journée',
moreLinkText: 'en plus',
noEventsText: 'Aucun événement à afficher',
};
return frCa;
}());
+28
View File
@@ -0,0 +1,28 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var frCh = {
code: 'fr-ch',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Précédent',
next: 'Suivant',
today: 'Courant',
year: 'Année',
month: 'Mois',
week: 'Semaine',
day: 'Jour',
list: 'Mon planning',
},
weekText: 'Sm',
allDayText: 'Toute la journée',
moreLinkText: 'en plus',
noEventsText: 'Aucun événement à afficher',
};
return frCh;
}());
+28
View File
@@ -0,0 +1,28 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var fr = {
code: 'fr',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Précédent',
next: 'Suivant',
today: "Aujourd'hui",
year: 'Année',
month: 'Mois',
week: 'Semaine',
day: 'Jour',
list: 'Planning',
},
weekText: 'Sem.',
allDayText: 'Toute la journée',
moreLinkText: 'en plus',
noEventsText: 'Aucun événement à afficher',
};
return fr;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var gl = {
code: 'gl',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Ant',
next: 'Seg',
today: 'Hoxe',
month: 'Mes',
week: 'Semana',
day: 'Día',
list: 'Axenda',
},
weekText: 'Sm',
allDayText: 'Todo o día',
moreLinkText: 'máis',
noEventsText: 'Non hai eventos para amosar',
};
return gl;
}());
+24
View File
@@ -0,0 +1,24 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var he = {
code: 'he',
direction: 'rtl',
buttonText: {
prev: 'הקודם',
next: 'הבא',
today: 'היום',
month: 'חודש',
week: 'שבוע',
day: 'יום',
list: 'סדר יום',
},
allDayText: 'כל היום',
moreLinkText: 'אחר',
noEventsText: 'אין אירועים להצגה',
weekText: 'שבוע',
};
return he;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var hi = {
code: 'hi',
week: {
dow: 0, // Sunday is the first day of the week.
doy: 6, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'पिछला',
next: 'अगला',
today: 'आज',
month: 'महीना',
week: 'सप्ताह',
day: 'दिन',
list: 'कार्यसूची',
},
weekText: 'हफ्ता',
allDayText: 'सभी दिन',
moreLinkText: function(n) {
return '+अधिक ' + n
},
noEventsText: 'कोई घटनाओं को प्रदर्शित करने के लिए',
};
return hi;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var hr = {
code: 'hr',
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'Prijašnji',
next: 'Sljedeći',
today: 'Danas',
month: 'Mjesec',
week: 'Tjedan',
day: 'Dan',
list: 'Raspored',
},
weekText: 'Tje',
allDayText: 'Cijeli dan',
moreLinkText: function(n) {
return '+ još ' + n
},
noEventsText: 'Nema događaja za prikaz',
};
return hr;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var hu = {
code: 'hu',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'vissza',
next: 'előre',
today: 'ma',
month: 'Hónap',
week: 'Hét',
day: 'Nap',
list: 'Lista',
},
weekText: 'Hét',
allDayText: 'Egész nap',
moreLinkText: 'további',
noEventsText: 'Nincs megjeleníthető esemény',
};
return hu;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var hyAm = {
code: 'hy-am',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Նախորդ',
next: 'Հաջորդ',
today: 'Այսօր',
month: 'Ամիս',
week: 'Շաբաթ',
day: 'Օր',
list: 'Օրվա ցուցակ',
},
weekText: 'Շաբ',
allDayText: 'Ամբողջ օր',
moreLinkText: function(n) {
return '+ ևս ' + n
},
noEventsText: 'Բացակայում է իրադարձությունը ցուցադրելու',
};
return hyAm;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var id = {
code: 'id',
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'mundur',
next: 'maju',
today: 'hari ini',
month: 'Bulan',
week: 'Minggu',
day: 'Hari',
list: 'Agenda',
},
weekText: 'Mg',
allDayText: 'Sehari penuh',
moreLinkText: 'lebih',
noEventsText: 'Tidak ada acara untuk ditampilkan',
};
return id;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var is = {
code: 'is',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Fyrri',
next: 'Næsti',
today: 'Í dag',
month: 'Mánuður',
week: 'Vika',
day: 'Dagur',
list: 'Dagskrá',
},
weekText: 'Vika',
allDayText: 'Allan daginn',
moreLinkText: 'meira',
noEventsText: 'Engir viðburðir til að sýna',
};
return is;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var it = {
code: 'it',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Prec',
next: 'Succ',
today: 'Oggi',
month: 'Mese',
week: 'Settimana',
day: 'Giorno',
list: 'Agenda',
},
weekText: 'Sm',
allDayText: 'Tutto il giorno',
moreLinkText: function(n) {
return '+altri ' + n
},
noEventsText: 'Non ci sono eventi da visualizzare',
};
return it;
}());
+25
View File
@@ -0,0 +1,25 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var ja = {
code: 'ja',
buttonText: {
prev: '前',
next: '次',
today: '今日',
month: '月',
week: '週',
day: '日',
list: '予定リスト',
},
weekText: '週',
allDayText: '終日',
moreLinkText: function(n) {
return '他 ' + n + ' 件'
},
noEventsText: '表示する予定はありません',
};
return ja;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var ka = {
code: 'ka',
week: {
dow: 1,
doy: 7,
},
buttonText: {
prev: 'წინა',
next: 'შემდეგი',
today: 'დღეს',
month: 'თვე',
week: 'კვირა',
day: 'დღე',
list: 'დღის წესრიგი',
},
weekText: 'კვ',
allDayText: 'მთელი დღე',
moreLinkText: function(n) {
return '+ კიდევ ' + n
},
noEventsText: 'ღონისძიებები არ არის',
};
return ka;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var kk = {
code: 'kk',
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'Алдыңғы',
next: 'Келесі',
today: 'Бүгін',
month: 'Ай',
week: 'Апта',
day: 'Күн',
list: 'Күн тәртібі',
},
weekText: 'Не',
allDayText: 'Күні бойы',
moreLinkText: function(n) {
return '+ тағы ' + n
},
noEventsText: 'Көрсету үшін оқиғалар жоқ',
};
return kk;
}());
+28
View File
@@ -0,0 +1,28 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var km = {
code: 'km',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'មុន',
next: 'បន្ទាប់',
today: 'ថ្ងៃនេះ',
year: 'ឆ្នាំ',
month: 'ខែ',
week: 'សប្តាហ៍',
day: 'ថ្ងៃ',
list: 'បញ្ជី',
},
weekText: 'សប្តាហ៍',
allDayText: 'ពេញមួយថ្ងៃ',
moreLinkText: 'ច្រើនទៀត',
noEventsText: 'គ្មានព្រឹត្តិការណ៍ត្រូវបង្ហាញ',
};
return km;
}());
+23
View File
@@ -0,0 +1,23 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var ko = {
code: 'ko',
buttonText: {
prev: '이전달',
next: '다음달',
today: '오늘',
month: '월',
week: '주',
day: '일',
list: '일정목록',
},
weekText: '주',
allDayText: '종일',
moreLinkText: '개',
noEventsText: '일정이 없습니다',
};
return ko;
}());
+28
View File
@@ -0,0 +1,28 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var ku = {
code: 'ku',
week: {
dow: 6, // Saturday is the first day of the week.
doy: 12, // The week that contains Jan 1st is the first week of the year.
},
direction: 'rtl',
buttonText: {
prev: 'پێشتر',
next: 'دواتر',
today: 'ئەمڕو',
month: 'مانگ',
week: 'هەفتە',
day: 'ڕۆژ',
list: 'بەرنامە',
},
weekText: 'هەفتە',
allDayText: 'هەموو ڕۆژەکە',
moreLinkText: 'زیاتر',
noEventsText: 'هیچ ڕووداوێك نیە',
};
return ku;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var lb = {
code: 'lb',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Zréck',
next: 'Weider',
today: 'Haut',
month: 'Mount',
week: 'Woch',
day: 'Dag',
list: 'Terminiwwersiicht',
},
weekText: 'W',
allDayText: 'Ganzen Dag',
moreLinkText: 'méi',
noEventsText: 'Nee Evenementer ze affichéieren',
};
return lb;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var lt = {
code: 'lt',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Atgal',
next: 'Pirmyn',
today: 'Šiandien',
month: 'Mėnuo',
week: 'Savaitė',
day: 'Diena',
list: 'Darbotvarkė',
},
weekText: 'SAV',
allDayText: 'Visą dieną',
moreLinkText: 'daugiau',
noEventsText: 'Nėra įvykių rodyti',
};
return lt;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var lv = {
code: 'lv',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Iepr.',
next: 'Nāk.',
today: 'Šodien',
month: 'Mēnesis',
week: 'Nedēļa',
day: 'Diena',
list: 'Dienas kārtība',
},
weekText: 'Ned.',
allDayText: 'Visu dienu',
moreLinkText: function(n) {
return '+vēl ' + n
},
noEventsText: 'Nav notikumu',
};
return lv;
}());
+25
View File
@@ -0,0 +1,25 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var mk = {
code: 'mk',
buttonText: {
prev: 'претходно',
next: 'следно',
today: 'Денес',
month: 'Месец',
week: 'Недела',
day: 'Ден',
list: 'График',
},
weekText: 'Сед',
allDayText: 'Цел ден',
moreLinkText: function(n) {
return '+повеќе ' + n
},
noEventsText: 'Нема настани за прикажување',
};
return mk;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var ms = {
code: 'ms',
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'Sebelum',
next: 'Selepas',
today: 'hari ini',
month: 'Bulan',
week: 'Minggu',
day: 'Hari',
list: 'Agenda',
},
weekText: 'Mg',
allDayText: 'Sepanjang hari',
moreLinkText: function(n) {
return 'masih ada ' + n + ' acara'
},
noEventsText: 'Tiada peristiwa untuk dipaparkan',
};
return ms;
}());
+38
View File
@@ -0,0 +1,38 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var nb = {
code: 'nb',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Forrige',
next: 'Neste',
today: 'I dag',
month: 'Måned',
week: 'Uke',
day: 'Dag',
list: 'Agenda',
},
weekText: 'Uke',
weekTextLong: 'Uke',
allDayText: 'Hele dagen',
moreLinkText: 'til',
noEventsText: 'Ingen hendelser å vise',
buttonHints: {
prev: 'Forrige $0',
next: 'Neste $0',
today: 'Nåværende $0',
},
viewHint: '$0 visning',
navLinkHint: 'Gå til $0',
moreLinkHint(eventCnt) {
return `Vis ${eventCnt} flere hendelse${eventCnt === 1 ? '' : 'r'}`
},
};
return nb;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var ne = {
code: 'ne', // code for nepal
week: {
dow: 7, // Sunday is the first day of the week.
doy: 1, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'अघिल्लो',
next: 'अर्को',
today: 'आज',
month: 'महिना',
week: 'हप्ता',
day: 'दिन',
list: 'सूची',
},
weekText: 'हप्ता',
allDayText: 'दिनभरि',
moreLinkText: 'थप लिंक',
noEventsText: 'देखाउनको लागि कुनै घटनाहरू छैनन्',
};
return ne;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var nl = {
code: 'nl',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Vorige',
next: 'Volgende',
today: 'Vandaag',
year: 'Jaar',
month: 'Maand',
week: 'Week',
day: 'Dag',
list: 'Agenda',
},
allDayText: 'Hele dag',
moreLinkText: 'extra',
noEventsText: 'Geen evenementen om te laten zien',
};
return nl;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var nn = {
code: 'nn',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Førre',
next: 'Neste',
today: 'I dag',
month: 'Månad',
week: 'Veke',
day: 'Dag',
list: 'Agenda',
},
weekText: 'Veke',
allDayText: 'Heile dagen',
moreLinkText: 'til',
noEventsText: 'Ingen hendelser å vise',
};
return nn;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var pl = {
code: 'pl',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Poprzedni',
next: 'Następny',
today: 'Dziś',
month: 'Miesiąc',
week: 'Tydzień',
day: 'Dzień',
list: 'Plan dnia',
},
weekText: 'Tydz',
allDayText: 'Cały dzień',
moreLinkText: 'więcej',
noEventsText: 'Brak wydarzeń do wyświetlenia',
};
return pl;
}());
+25
View File
@@ -0,0 +1,25 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var ptBr = {
code: 'pt-br',
buttonText: {
prev: 'Anterior',
next: 'Próximo',
today: 'Hoje',
month: 'Mês',
week: 'Semana',
day: 'Dia',
list: 'Lista',
},
weekText: 'Sm',
allDayText: 'dia inteiro',
moreLinkText: function(n) {
return 'mais +' + n
},
noEventsText: 'Não há eventos para mostrar',
};
return ptBr;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var pt = {
code: 'pt',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Anterior',
next: 'Seguinte',
today: 'Hoje',
month: 'Mês',
week: 'Semana',
day: 'Dia',
list: 'Agenda',
},
weekText: 'Sem',
allDayText: 'Todo o dia',
moreLinkText: 'mais',
noEventsText: 'Não há eventos para mostrar',
};
return pt;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var ro = {
code: 'ro',
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'precedentă',
next: 'următoare',
today: 'Azi',
month: 'Lună',
week: 'Săptămână',
day: 'Zi',
list: 'Agendă',
},
weekText: 'Săpt',
allDayText: 'Toată ziua',
moreLinkText: function(n) {
return '+alte ' + n
},
noEventsText: 'Nu există evenimente de afișat',
};
return ro;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var ru = {
code: 'ru',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Пред',
next: 'След',
today: 'Сегодня',
month: 'Месяц',
week: 'Неделя',
day: 'День',
list: 'Повестка дня',
},
weekText: 'Нед',
allDayText: 'Весь день',
moreLinkText: function(n) {
return '+ ещё ' + n
},
noEventsText: 'Нет событий для отображения',
};
return ru;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var siLk = {
code: 'si-lk',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'පෙර',
next: 'පසු',
today: 'අද',
month: 'මාසය',
week: 'සතිය',
day: 'දවස',
list: 'ලැයිස්තුව',
},
weekText: 'සති',
allDayText: 'සියලු',
moreLinkText: 'තවත්',
noEventsText: 'මුකුත් නැත',
};
return siLk;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var sk = {
code: 'sk',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Predchádzajúci',
next: 'Nasledujúci',
today: 'Dnes',
month: 'Mesiac',
week: 'Týždeň',
day: 'Deň',
list: 'Rozvrh',
},
weekText: 'Ty',
allDayText: 'Celý deň',
moreLinkText: function(n) {
return '+ďalšie: ' + n
},
noEventsText: 'Žiadne akcie na zobrazenie',
};
return sk;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var sl = {
code: 'sl',
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'Prejšnji',
next: 'Naslednji',
today: 'Trenutni',
month: 'Mesec',
week: 'Teden',
day: 'Dan',
list: 'Dnevni red',
},
weekText: 'Teden',
allDayText: 'Ves dan',
moreLinkText: 'več',
noEventsText: 'Ni dogodkov za prikaz',
};
return sl;
}());
+23
View File
@@ -0,0 +1,23 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var sm = {
code: 'sm',
buttonText: {
prev: 'Talu ai',
next: 'Mulimuli atu',
today: 'Aso nei',
month: 'Masina',
week: 'Vaiaso',
day: 'Aso',
list: 'Faasologa',
},
weekText: 'Vaiaso',
allDayText: 'Aso atoa',
moreLinkText: 'sili atu',
noEventsText: 'Leai ni mea na tutupu',
};
return sm;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var sq = {
code: 'sq',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'mbrapa',
next: 'Përpara',
today: 'sot',
month: 'Muaj',
week: 'Javë',
day: 'Ditë',
list: 'Listë',
},
weekText: 'Ja',
allDayText: 'Gjithë ditën',
moreLinkText: function(n) {
return '+më tepër ' + n
},
noEventsText: 'Nuk ka evente për të shfaqur',
};
return sq;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var srCyrl = {
code: 'sr-cyrl',
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'Претходна',
next: 'следећи',
today: 'Данас',
month: 'Месец',
week: 'Недеља',
day: 'Дан',
list: 'Планер',
},
weekText: 'Сед',
allDayText: 'Цео дан',
moreLinkText: function(n) {
return '+ још ' + n
},
noEventsText: 'Нема догађаја за приказ',
};
return srCyrl;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var sr = {
code: 'sr',
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'Prethodna',
next: 'Sledeći',
today: 'Danas',
month: 'Mеsеc',
week: 'Nеdеlja',
day: 'Dan',
list: 'Planеr',
},
weekText: 'Sed',
allDayText: 'Cеo dan',
moreLinkText: function(n) {
return '+ još ' + n
},
noEventsText: 'Nеma događaja za prikaz',
};
return sr;
}());
+47
View File
@@ -0,0 +1,47 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var sv = {
code: 'sv',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Förra',
next: 'Nästa',
today: 'Idag',
month: 'Månad',
week: 'Vecka',
day: 'Dag',
list: 'Program',
},
buttonHints: {
prev(buttonText) {
return `Föregående ${buttonText.toLocaleLowerCase()}`
},
next(buttonText) {
return `Nästa ${buttonText.toLocaleLowerCase()}`
},
today(buttonText) {
return (buttonText === 'Program' ? 'Detta' : 'Denna') + ' ' + buttonText.toLocaleLowerCase()
},
},
viewHint: '$0 vy',
navLinkHint: 'Gå till $0',
moreLinkHint(eventCnt) {
return `Visa ytterligare ${eventCnt} händelse${eventCnt === 1 ? '' : 'r'}`
},
weekText: 'v.',
weekTextLong: 'Vecka',
allDayText: 'Heldag',
moreLinkText: 'till',
noEventsText: 'Inga händelser att visa',
closeHint: 'Stäng',
timeHint: 'Klockan',
eventHint: 'Händelse',
};
return sv;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var taIn = {
code: 'ta-in',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'முந்தைய',
next: 'அடுத்தது',
today: 'இன்று',
month: 'மாதம்',
week: 'வாரம்',
day: 'நாள்',
list: 'தினசரி அட்டவணை',
},
weekText: 'வாரம்',
allDayText: 'நாள் முழுவதும்',
moreLinkText: function(n) {
return '+ மேலும் ' + n
},
noEventsText: 'காண்பிக்க நிகழ்வுகள் இல்லை',
};
return taIn;
}());
+30
View File
@@ -0,0 +1,30 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var th = {
code: 'th',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'ก่อนหน้า',
next: 'ถัดไป',
prevYear: 'ปีก่อนหน้า',
nextYear: 'ปีถัดไป',
year: 'ปี',
today: 'วันนี้',
month: 'เดือน',
week: 'สัปดาห์',
day: 'วัน',
list: 'กำหนดการ',
},
weekText: 'สัปดาห์',
allDayText: 'ตลอดวัน',
moreLinkText: 'เพิ่มเติม',
noEventsText: 'ไม่มีกิจกรรมที่จะแสดง',
};
return th;
}());
+27
View File
@@ -0,0 +1,27 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var tr = {
code: 'tr',
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'geri',
next: 'ileri',
today: 'bugün',
month: 'Ay',
week: 'Hafta',
day: 'Gün',
list: 'Ajanda',
},
weekText: 'Hf',
allDayText: 'Tüm gün',
moreLinkText: 'daha fazla',
noEventsText: 'Gösterilecek etkinlik yok',
};
return tr;
}());
+17
View File
@@ -0,0 +1,17 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var ug = {
code: 'ug',
buttonText: {
month: 'ئاي',
week: 'ھەپتە',
day: 'كۈن',
list: 'كۈنتەرتىپ',
},
allDayText: 'پۈتۈن كۈن',
};
return ug;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var uk = {
code: 'uk',
week: {
dow: 1, // Monday is the first day of the week.
doy: 7, // The week that contains Jan 1st is the first week of the year.
},
buttonText: {
prev: 'Попередній',
next: 'далі',
today: 'Сьогодні',
month: 'Місяць',
week: 'Тиждень',
day: 'День',
list: 'Порядок денний',
},
weekText: 'Тиж',
allDayText: 'Увесь день',
moreLinkText: function(n) {
return '+ще ' + n + '...'
},
noEventsText: 'Немає подій для відображення',
};
return uk;
}());
+21
View File
@@ -0,0 +1,21 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var uz = {
code: 'uz',
buttonText: {
month: 'Oy',
week: 'Xafta',
day: 'Kun',
list: 'Kun tartibi',
},
allDayText: "Kun bo'yi",
moreLinkText: function(n) {
return '+ yana ' + n
},
noEventsText: "Ko'rsatish uchun voqealar yo'q",
};
return uz;
}());
+29
View File
@@ -0,0 +1,29 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var vi = {
code: 'vi',
week: {
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: 'Trước',
next: 'Tiếp',
today: 'Hôm nay',
month: 'Tháng',
week: 'Tuần',
day: 'Ngày',
list: 'Lịch biểu',
},
weekText: 'Tu',
allDayText: 'Cả ngày',
moreLinkText: function(n) {
return '+ thêm ' + n
},
noEventsText: 'Không có sự kiện để hiển thị',
};
return vi;
}());
+30
View File
@@ -0,0 +1,30 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var zhCn = {
code: 'zh-cn',
week: {
// GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
dow: 1, // Monday is the first day of the week.
doy: 4, // The week that contains Jan 4th is the first week of the year.
},
buttonText: {
prev: '上月',
next: '下月',
today: '今天',
month: '月',
week: '周',
day: '日',
list: '日程',
},
weekText: '周',
allDayText: '全天',
moreLinkText: function(n) {
return '另外 ' + n + ' 个'
},
noEventsText: '没有事件显示',
};
return zhCn;
}());
+23
View File
@@ -0,0 +1,23 @@
FullCalendar.globalLocales.push(function () {
'use strict';
var zhTw = {
code: 'zh-tw',
buttonText: {
prev: '上月',
next: '下月',
today: '今天',
month: '月',
week: '週',
day: '天',
list: '活動列表',
},
weekText: '周',
allDayText: '整天',
moreLinkText: '顯示更多',
noEventsText: '没有任何活動',
};
return zhTw;
}());
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long