Skip to content

Commit efea1f1

Browse files
authored
Merge pull request Aspen-Discovery#2258 from PTFS-Europe/DIS-51_ptfs_community_engagement
DIS-51: community engagement
2 parents e296f9f + 89e51ca commit efea1f1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+4297
-335
lines changed

code/web/Drivers/Koha.php

+5-2
Original file line numberDiff line numberDiff line change
@@ -1107,7 +1107,7 @@ private function loadPatronInfoFromDB($patronId, $password, $suppliedUsernameOrB
11071107
global $logger;
11081108

11091109
/** @noinspection SqlResolve */
1110-
$sql = "SELECT *, borrowernumber, cardnumber, surname, firstname, streetnumber, streettype, address, address2, city, state, zipcode, country, email, phone, mobile, categorycode, dateexpiry, password, userid, branchcode, opacnote, privacy from borrowers where borrowernumber = '" . mysqli_escape_string($this->dbConnection, $patronId) . "';";
1110+
$sql = "SELECT *, borrowernumber, cardnumber, surname, firstname, streetnumber, streettype, address, address2, city, state, zipcode, country, email, phone, mobile, categorycode, dateexpiry, password, userid, branchcode, opacnote, privacy, dateofbirth from borrowers where borrowernumber = '" . mysqli_escape_string($this->dbConnection, $patronId) . "';";
11111111

11121112
$userExistsInDB = false;
11131113
$lookupUserResult = mysqli_query($this->dbConnection, $sql, MYSQLI_USE_RESULT);
@@ -1236,6 +1236,8 @@ private function loadPatronInfoFromDB($patronId, $password, $suppliedUsernameOrB
12361236
$user->_state = $userFromDb['state'];
12371237
$user->_zip = $userFromDb['zipcode'];
12381238
$user->phone = $userFromDb['phone'];
1239+
$user->_dateOfBirth = $userFromDb['dateofbirth'];
1240+
12391241

12401242
$user->_web_note = $userFromDb['opacnote'];
12411243

@@ -1340,7 +1342,7 @@ private function loadPatronInfoFromDB($patronId, $password, $suppliedUsernameOrB
13401342

13411343
function loadContactInformation(User $user) {
13421344
$this->initDatabaseConnection();
1343-
$sql = "SELECT borrowernumber, cardnumber, surname, firstname, streetnumber, streettype, address, address2, city, state, zipcode, country, email, phone, mobile, categorycode, dateexpiry, password, userid, branchcode, opacnote, privacy from borrowers where borrowernumber = '" . mysqli_escape_string($this->dbConnection, $user->unique_ils_id) . "';";
1345+
$sql = "SELECT borrowernumber, cardnumber, surname, firstname, streetnumber, streettype, address, address2, city, state, zipcode, country, email, phone, mobile, categorycode, dateexpiry, password, userid, branchcode, opacnote, privacy, dateofbirth from borrowers where borrowernumber = '" . mysqli_escape_string($this->dbConnection, $user->unique_ils_id) . "';";
13441346

13451347
$lookupUserResult = mysqli_query($this->dbConnection, $sql, MYSQLI_USE_RESULT);
13461348
if ($lookupUserResult) {
@@ -1357,6 +1359,7 @@ function loadContactInformation(User $user) {
13571359
$user->_state = $userFromDb['state'];
13581360
$user->_zip = $userFromDb['zipcode'];
13591361
$user->phone = $userFromDb['phone'];
1362+
$user->_dateOfBirth = $userFromDb['dateofbirth'];
13601363
}
13611364
}
13621365

code/web/bootstrap.php

+4
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,10 @@
232232
//Modules are not installed yet
233233
}
234234

235+
if (array_key_exists('Community Engagement', $enabledModules)) {
236+
require_once ROOT_DIR . '/sys/CommunityEngagement/action-hooks.php';
237+
}
238+
235239
$timer->logTime("Basic Initialization");
236240
loadLibraryAndLocation();
237241

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
{strip}
2+
<div id="main-content" class="col-sm-12">
3+
<h1>{translate text="Admin View" isAdminFacing=true}</h1>
4+
{*Filtered Results*}
5+
<div>
6+
<label for="filterBy">Filter By:</label>
7+
<select id="filterBy" class="form-control-sm" style="margin-bottom: 3px;" onchange="toggleFilterOptions()">
8+
<option value="">Select Filter</option>
9+
<option value="campaign">Campaign</option>
10+
<option value="user">User</option>
11+
</select>
12+
<div id="campaignDropdown" style="display:none;">
13+
<select id="campaign_id" class="form-control-sm" style="margin-bottom: 3px;" onchange="AspenDiscovery.CommunityEngagement.filterDropdownOptions('campaign')">
14+
<option value="">All Campaigns</option>
15+
{foreach from=$campaigns item=$campaign}
16+
<option value="{$campaign->id}">{$campaign->name}</option>
17+
{/foreach}
18+
</select>
19+
</div>
20+
<div id="userDropdown" style="display:none;">
21+
<select id="user_id" class="form-control-sm" style="margin-bottom: 3px;" onchange="AspenDiscovery.CommunityEngagement.filterDropdownOptions('user')">
22+
<option value="">All Users</option>
23+
{foreach from=$users item=$user}
24+
<option value="{$user->id}">{$user->username}</option>
25+
{/foreach}
26+
</select>
27+
</div>
28+
</div>
29+
<div id="campaignsList">
30+
<div class="dashboardCategory row" style="border: 1px solid #3174AF;padding:0 10px 10px 10px; margin-bottom: 10px;">
31+
32+
<div class="col-sm-12">
33+
<h2 class="dashboardCategoryLabel">{translate text="All Campaigns" isAdminFacing=true}</h2>
34+
{foreach from=$campaigns item=campaign}
35+
<div style="border-bottom: 2px solid #3174AF;padding: 10px; margin-bottom; 10px;">
36+
37+
<h5 style="font-weight:bold;">
38+
<a href="/CommunityEngagement/CampaignTable?id={$campaign->id}">
39+
{translate text=$campaign->name isAdminFacing=true}
40+
</a>
41+
</h5>
42+
43+
<div class="dashboardLabel">Number of Patrons Enrolled:</div>
44+
<div class="dashboardValue">{translate text=$campaign->currentEnrollments isAdminFacing=true}</div>
45+
46+
<div class="dashboardLabel">Total Number of Enrollments:</div>
47+
<div class="dashboardValue">{translate text=$campaign->enrollmentCounter isAdminFacing=true}</div>
48+
49+
<div class="dashboardLabel">Total Number of Unenrollments:</div>
50+
<div class="dashboardValue">{translate text=$campaign->unenrollmentCounter isAdminFacing=true}</div>
51+
52+
<div class="dashboardLabel">Number of Users Who Have Completed the Campaign</div>
53+
<div class="dashboardValue">{translate text=$campaign->completedUsersCount isAdminFacing=true}</div>
54+
</div>
55+
{/foreach}
56+
</div>
57+
</div>
58+
</div>
59+
60+
{*Filtered Campaigns*}
61+
<div id="filteredCampaign">
62+
63+
</div>
64+
</div>
65+
{/strip}
66+
<script type="text/javascript">
67+
function toggleFilterOptions() {
68+
var filterBy = document.getElementById("filterBy").value;
69+
var campaignDropdown = document.getElementById("campaignDropdown");
70+
var userDropdown = document.getElementById("userDropdown");
71+
72+
if (filterBy === "campaign") {
73+
campaignDropdown.style.display = "block";
74+
userDropdown.style.display = "none";
75+
} else if (filterBy === "user") {
76+
userDropdown.style.display = "block";
77+
campaignDropdown.style.display = "none";
78+
} else {
79+
campaignDropdown.style.display = "none";
80+
userDropdown.style.display = "none";
81+
}
82+
}
83+
</script>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
<div id="campaignDetails">
2+
<h2>{translate text=$campaign->name isAdminFacing=true}</h2>
3+
<table class="table table-striped">
4+
<thead>
5+
<tr>
6+
<th>{translate text="User ID" isAdminFacing=true}</th>
7+
<th>{translate text="Username" isAdminFacing=true}</th>
8+
{foreach from=$milestones item=milestone}
9+
<th>{translate text="Milestone: {$milestone->name}" isAdminFacing=true}</th>
10+
{/foreach}
11+
<th>{translate text="Campaign Complete" isAdminFacing=true}</th>
12+
<th>{translate text="Reward Given" isAdminFacing=true}</th>
13+
</tr>
14+
</thead>
15+
<tbody>
16+
{foreach from=$users item=user}
17+
<tr>
18+
<td>{$user->id}</td>
19+
<td>{$user->username}</td>
20+
{foreach from=$milestones item=milestone}
21+
<td>
22+
{if $userCampaigns[$campaign->id][$user->id]['milestones'][$milestone->id]['milestoneComplete']}
23+
<div style="display: flex; justify-content: space-between;">
24+
<div style="margin-right: 20px;">
25+
{translate text="Complete" isAdminFacing=true}
26+
</div>
27+
<div>
28+
{if $userCampaigns[$campaign->id][$user->id]['milestones'][$milestone->id]['milestoneRewardGiven'] == 0}
29+
<button class="btn btn-primary set-reward-btn-milestone" data-user-id="{$user->id}" data-campaign-id="{$campaign->id}" data-milestone-id="{$milestone->id}" onclick="AspenDiscovery.CommunityEngagement.milestoneRewardGiven({$user->id}, {$campaign->id}, {$milestone->id});">
30+
{translate text="Give Reward" isAdminFacing=true}
31+
</button>
32+
{else}
33+
{translate text="Reward Given" isAdminFacing=true}
34+
{/if}
35+
</div>
36+
</div>
37+
{else}
38+
<div>
39+
{translate text="Incomplete" isAdminFacing=true}<br>
40+
<div class="progress" style="width:100%; border:1px solid black; border-radius:4px;height:20px;">
41+
<div class="progress-bar" role="progressbar" aria-valuenow="{$userCampaigns[$campaign->id][$user->id]['milestones'][$milestone->id]['percentageProgress']}" aria-valuemin="0"
42+
aria-valuemax="100" style="width: {$userCampaigns[$campaign->id][$user->id]['milestones'][$milestone->id]['percentageProgress']}%; line-height: 20px; text-align: center; color: #fff;background-color:blue;">
43+
{$userCampaigns[$campaign->id][$user->id]['milestones'][$milestone->id]['percentageProgress']}%
44+
</div>
45+
</div>
46+
</div>
47+
{/if}
48+
</td>
49+
{/foreach}
50+
<td>
51+
{if $userCampaigns[$campaign->id][$user->id]['isCampaignComplete']}
52+
{translate text="Campaign Complete" isAdminFacing=true}
53+
{else}
54+
{translate text="Campaign Incomplete" isAdminFacing=true}
55+
{/if}
56+
</td>
57+
<td>
58+
{if $userCampaigns[$campaign->id][$user->id]['rewardGiven'] == 0}
59+
<button class="btn btn-primary set-reward-btn" data-user-id="{$user->id}" data-campaign-id="{$campaign->id}" onclick="AspenDiscovery.CommunityEngagement.campaignRewardGiven({$user->id}, {$campaign->id});">
60+
{translate text="Give Reward" isAdminFacing=true}
61+
</button>
62+
{else}
63+
{translate text="Reward Given" isAdminFacing=true}
64+
{/if}
65+
</td>
66+
</tr>
67+
{/foreach}
68+
</tbody>
69+
</table>
70+
</div>

code/web/interface/themes/responsive/MyAccount/account-sidebar.tpl

+3
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,9 @@
194194
{if $showFavorites == 1}
195195
<div class="myAccountLink"><a href="/MyAccount/Lists">{translate text='Your Lists' isPublicFacing=true}</a></div>
196196
{/if}
197+
{if array_key_exists('Community Engagement', $enabledModules)}
198+
<div class="myAccountLink"><a href="/MyAccount/MyCampaigns">{translate text='Your Campaigns' isPublicFacing=true}</a></div>
199+
{/if}
197200
{if !empty($enableSavedSearches)}
198201
{* Only highlight saved searches as active if user is logged in: *}
199202
<div class="myAccountLink"><a href="/Search/History?require_login">{translate text='Your Searches' isPublicFacing=true}</a> <span class="label badge-updated newSavedSearchBadge" style="display: none"><span class="saved-searches-placeholder">??</span></span></div>

code/web/interface/themes/responsive/MyAccount/home.tpl

+11
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,17 @@
7676
</a>
7777
</div>
7878
</div>
79+
<div class="row">
80+
<div class="col-sm-12">&nbsp;</div>
81+
</div>
82+
<div class="col-tn-6">
83+
<div class="btn btn-block btn-default">
84+
<a href="/MyAccount/MyCampaigns">
85+
<div class="dashboardLabel">{translate text="Enrolled Campaigns" isPublicFacing=true}</div>
86+
<div class="dashboardValue"><span class="enrolled-campaigns-placeholder"><img src="/images/loading.gif" alt="loading"></span></div>
87+
</a>
88+
</div>
89+
</div>
7990
</div>
8091
{/if}
8192
{/if}

0 commit comments

Comments
 (0)