Skip to content

Commit 2f49fcc

Browse files
author
billy clark
committed
Merge branch 'develop'
2 parents 2c0662f + 3926eef commit 2f49fcc

File tree

7 files changed

+46
-38
lines changed

7 files changed

+46
-38
lines changed

Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ next-dev: build
7474
build-next:
7575
docker compose build next-proxy next-app
7676

77+
.PHONY: build-base-php
78+
build-base-php:
79+
docker build -t sillsdev/web-languageforge:base-php -f docker/base-php/Dockerfile .
80+
7781
.PHONY: clean
7882
clean:
7983
docker compose down

next-app/src/lib/stats/Stat.svelte

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,16 @@
11
<script>
2+
import { goto } from '$app/navigation'
3+
24
export let title
35
export let value
46
export let icon = undefined
7+
export let href = undefined
8+
9+
const clicked = () => href ? goto(href) : {}
510
</script>
611

712
<!-- https://daisyui.com/components/stat/ -->
8-
<div class='stat place-items-center'>
13+
<div class='stat place-items-center' class:href on:click={ clicked }>
914
<dt class=stat-title>{ title }</dt>
1015
<dd class='stat-value text-primary'>{ value }</dd>
1116

@@ -15,3 +20,9 @@
1520
</div>
1621
{/if}
1722
</div>
23+
24+
<style>
25+
.href {
26+
cursor: pointer;
27+
}
28+
</style>

next-app/src/routes/projects/[project_code]/+page.svelte

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,28 +22,32 @@
2222
$: stats = [
2323
{
2424
title: 'Users',
25-
value: Number(project.num_users).toLocaleString(),
25+
value: project.num_users,
2626
icon: PeopleIcon,
2727
},
2828
{
2929
title: 'Entries',
30-
value: Number(project.num_entries).toLocaleString(),
30+
value: project.num_entries,
3131
icon: NotesIcon,
32+
url: `/app/lexicon/${ project.id }`,
3233
},
3334
{
3435
title: 'Entries with audio',
35-
value: Number(project.num_entries_with_audio).toLocaleString(),
36+
value: project.num_entries_with_audio,
3637
icon: VoiceIcon,
38+
url: `/app/lexicon/${ project.id }#!/editor/entry/000000?filterBy=Audio`,
3739
},
3840
{
3941
title: 'Entries with pictures',
40-
value: Number(project.num_entries_with_pictures).toLocaleString(),
42+
value: project.num_entries_with_pictures,
4143
icon: ImagesIcon,
44+
url: `/app/lexicon/${ project.id }#!/editor/entry/000000?filterBy=Pictures`,
4245
},
4346
{
4447
title: 'Unresolved comments',
45-
value: Number(project.num_unresolved_comments).toLocaleString(),
48+
value: project.num_unresolved_comments,
4649
icon: MessageAlertIcon,
50+
url: `/app/lexicon/${ project.id }#!/editor/entry/000000?filterBy=Comments`,
4751
},
4852
]
4953
@@ -67,8 +71,8 @@
6771
</PageHeader>
6872

6973
<Stats class=max-w-full>
70-
{#each stats as { title, value, icon }}
71-
<Stats.Stat { title } { value } { icon } />
74+
{#each stats as { title, value, icon, url }}
75+
<Stats.Stat { title } value={ Number(value).toLocaleString() } { icon } href={ value && url } />
7276
{/each}
7377
</Stats>
7478

next-app/src/routes/projects/[project_code]/meta/+server.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
import { sf } from '$lib/fetch/server'
22

33
export async function get({ project_code, cookie }) {
4-
const [
5-
{ id, projectName: name, users },
6-
{ entries, comments }
7-
] = await Promise.all([
8-
sf({ name: 'project_read_by_code', args: [ project_code ], cookie }),
9-
sf({ name: 'lex_stats_all', args: [ project_code ], cookie }),
10-
])
4+
const { id, projectName: name, users } = await sf({ name: 'set_project', args: [ project_code ], cookie })
5+
6+
const { entries, comments } = await sf({ name: 'lex_stats', cookie })
117

128
const entries_with_picture = entries.filter(has_picture)
139
const entries_with_audio = entries.filter(has_audio)

src/Api/Model/Shared/Dto/RightsHelper.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public function userCanAccessMethod($methodName)
134134

135135
case "message_send":
136136
case "project_read":
137-
case "project_read_by_code":
137+
case "set_project":
138138
case "project_settings":
139139
case "project_updateSettings":
140140
case "project_readSettings":
@@ -234,7 +234,6 @@ public function userCanAccessMethod($methodName)
234234
case "lex_dbeDtoFull":
235235
case "lex_dbeDtoUpdatesOnly":
236236
case "lex_stats":
237-
case "lex_stats_all":
238237
return $this->userHasProjectRight(Domain::ENTRIES + Operation::VIEW);
239238

240239
// case 'lex_entry_read':

src/Api/Service/Sf.php

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -491,13 +491,20 @@ public function project_read($id)
491491
return ProjectCommands::readProject($id);
492492
}
493493

494-
public function project_read_by_code($projectCode)
494+
public function set_project($projectCode)
495495
{
496496
$projectModel = ProjectModel::getByProjectCode($projectCode);
497+
$projectId = $projectModel->id->asString();
497498
$user = new UserModel($this->userId);
498-
if ($user->isMemberOfProject($projectModel->id->asString())) {
499-
return $this->project_read($projectModel->id->asString());
499+
500+
if ($user->isMemberOfProject($projectId)) {
501+
$this->app["session"]->set("projectId", $projectId);
502+
503+
$projectModel->id = $projectId;
504+
505+
return $projectModel;
500506
}
507+
501508
throw new UserUnauthorizedException("User $this->userId is not a member of project $projectCode");
502509
}
503510

@@ -555,28 +562,16 @@ public function lex_projectDto()
555562
return LexProjectDto::encode($this->projectId);
556563
}
557564

558-
public function lex_stats($projectCode)
565+
public function lex_stats()
559566
{
560-
$projectModel = ProjectModel::getByProjectCode($projectCode);
561-
$user = new UserModel($this->userId);
562-
563-
if ($user->isMemberOfProject($projectModel->id->asString())) {
564-
return LexDbeDto::encode($projectModel->id->asString(), $this->userId);
565-
}
566-
567-
throw new UserUnauthorizedException("User $this->userId is not a member of project $projectCode");
568-
}
569-
570-
public function lex_stats_all($projectCode)
571-
{
572-
$projectModel = ProjectModel::getByProjectCode($projectCode);
567+
$projectModel = ProjectModel::getById($this->projectId);
573568
$user = new UserModel($this->userId);
574569

575-
if ($user->isMemberOfProject($projectModel->id->asString())) {
570+
if ($user->isMemberOfProject($this->projectId)) {
576571
return LexDbeDto::encode($projectModel->id->asString(), $this->userId, 1);
577572
}
578573

579-
throw new UserUnauthorizedException("User $this->userId is not a member of project $projectCode");
574+
throw new UserUnauthorizedException("User $this->userId is not a member of project $projectModel->projectCode");
580575
}
581576

582577
public function lex_dbeDtoFull($browserId, $offset)
@@ -833,6 +828,7 @@ private static function isAnonymousMethod($methodName)
833828
"user_calculate_username",
834829
"check_unique_identity",
835830
"session_getSessionData",
831+
"set_project",
836832
];
837833
return in_array($methodName, $methods);
838834
}

src/angular-app/bellows/apps/projects/projects-app.component.html

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@
5050
<div class="col-md-4">
5151
<a data-ng-show="$ctrl.isInProject(project)" data-ng-href="/app/lexicon/{{project.id}}">
5252
<span class="larger-text">{{project.projectName}}</span></a>
53-
<a data-ng-show="$ctrl.isInProject(project)" data-ng-href="/projects/{{project.projectCode}}">
54-
<span>(Dashboard)</span></a>
5553
<span data-ng-show="!$ctrl.isInProject(project)" class="larger-text">{{project.projectName}}</span>
5654
<small class="text-muted"> {{project.projectCode}}</small>
5755
</div>

0 commit comments

Comments
 (0)