Skip to content

Commit 1b86918

Browse files
committed
[smarcet] - #13179
* fixing bugs
1 parent 1ab4081 commit 1b86918

7 files changed

Lines changed: 164 additions & 122 deletions

File tree

summit/_config/injector.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,3 +277,6 @@ Injector:
277277
SpeakerUploadSlidesEmailSenderTask:
278278
constructor:
279279
0: '%$SpeakerEmailAnnouncementSenderManager'
280+
IndividualSpeakerSelectionAnnouncementEmailSenderTask:
281+
constructor:
282+
0: '%$SpeakerEmailAnnouncementSenderManager'
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<?php
2+
/**
3+
* Copyright 2017 OpenStack Foundation
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
* http://www.apache.org/licenses/LICENSE-2.0
8+
* Unless required by applicable law or agreed to in writing, software
9+
* distributed under the License is distributed on an "AS IS" BASIS,
10+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
* See the License for the specific language governing permissions and
12+
* limitations under the License.
13+
**/
14+
15+
final class IndividualSpeakerSelectionAnnouncementEmailSenderTask extends CronTask
16+
{
17+
18+
/**
19+
* @var ISpeakerEmailAnnouncementSenderManager
20+
*/
21+
private $manager;
22+
23+
/**
24+
* SpeakerSelectionAnnouncementEmailSenderTask constructor.
25+
* @param ISpeakerEmailAnnouncementSenderManager $manager
26+
*/
27+
public function __construct(ISpeakerEmailAnnouncementSenderManager $manager)
28+
{
29+
parent::__construct();
30+
$this->manager = $manager;
31+
}
32+
/**
33+
* @return void
34+
*/
35+
public function run()
36+
{
37+
try
38+
{
39+
$init_time = time();
40+
$summit = null;
41+
$speaker = null;
42+
$role = IPresentationSpeaker::RoleSpeaker;
43+
if (isset($_GET['member_id']))
44+
{
45+
$speaker = PresentationSpeaker::get()->filter("MemberID", $_GET['member_id'])->first();
46+
}
47+
48+
if (isset($_GET['summit_id']))
49+
{
50+
$summit = Summit::get()->byID(intval($_GET['summit_id']));
51+
}
52+
53+
if (isset($_GET['role']))
54+
{
55+
if($_GET['role'] == 2)
56+
$role = IPresentationSpeaker::RoleModerator;
57+
}
58+
59+
if(is_null($summit)) throw new Exception('summit_id is not valid!');
60+
if(is_null($speaker)) throw new Exception('member_id is not valid!');
61+
62+
echo sprintf("sending individual mail for %s speaker as role %s", $speaker->getEmail(), $role).PHP_EOL;
63+
64+
$processed1 = $this->manager->sendSelectionAnnouncementEmailForSpeaker($speaker, $summit, $role, false);
65+
66+
$finish_time = time() - $init_time;
67+
echo 'processed records (speakers) ' . $processed1.' - time elapsed : '.$finish_time. ' seconds.'.PHP_EOL;
68+
69+
}
70+
catch(Exception $ex)
71+
{
72+
SS_Log::log($ex->getMessage(), SS_Log::ERR);
73+
echo sprintf("there was an error %s", $ex->getMessage()).PHP_EOL;
74+
}
75+
}
76+
}

summit/code/infrastructure/active_records/events/presentations/PresentationSpeaker.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -889,11 +889,14 @@ public function AlternatePresentations
889889
if($role == IPresentationSpeaker::RoleModerator)
890890
$filters['ModeratorID'] = $this->ID;
891891

892+
892893
if(count($excluded_tracks) > 0){
893894
$filters['CategoryID:ExactMatch:not'] = $excluded_tracks;
894895
}
895896

896-
$presentations = $this->Presentations()->filter($filters);
897+
$presentations = $role == IPresentationSpeaker::RoleSpeaker ?
898+
$this->Presentations()->filter($filters):
899+
Presentation::get()->filter($filters);
897900

898901
foreach ($presentations as $p) {
899902
if ($p->SelectionStatus() == IPresentation::SelectionStatus_Alternate && !$p->isPublished()) {

summit/code/infrastructure/repositories/SapphireSpeakerSummitRegistrationPromoCodeRepository.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public function __construct()
3131
* @param int $batch_size
3232
* @return ISpeakerSummitRegistrationPromoCode
3333
*/
34-
public function getNextAvailableByType(ISummit $summit, $promo_code_type, $batch_size = 10)
34+
public function getNextAvailableByType(ISummit $summit, $promo_code_type, $batch_size = 100)
3535
{
3636
switch($promo_code_type)
3737
{

summit/code/models/managers/ISpeakerEmailAnnouncementSenderManager.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,13 @@ public function sendModeratorsSelectionAnnouncementBySummit(ISummit $current_sum
3535
*/
3636
public function sendUploadSlidesAnnouncementBySummit(ISummit $current_summit, $batch_size);
3737

38+
/**
39+
* @param IPresentationSpeaker $speaker
40+
* @param ISummit $current_summit
41+
* @param bool|string $role
42+
* @param bool $check_email_existance
43+
* @return bool
44+
*/
45+
public function sendSelectionAnnouncementEmailForSpeaker(IPresentationSpeaker $speaker, ISummit $current_summit, $role = IPresentationSpeaker::RoleSpeaker, $check_email_existance = true);
46+
3847
}

summit/code/models/managers/SpeakerEmailAnnouncementSenderManager.php

Lines changed: 70 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -76,14 +76,73 @@ public function __construct
7676
$this->promo_code_repository = $promo_code_repository;
7777
}
7878

79-
private static $speaker_announcement_excluded_tracks = [
80-
23 => [
81-
IPresentation::SelectionStatus_Alternate => [],
82-
IPresentation::SelectionStatus_Accepted => [],
83-
IPresentation::SelectionStatus_Unaccepted => []
84-
]
85-
];
79+
/**
80+
* @param IPresentationSpeaker $speaker
81+
* @param ISummit $current_summit
82+
* @param bool|string $role
83+
* @param bool $check_email_existance
84+
* @return bool
85+
*/
86+
public function sendSelectionAnnouncementEmailForSpeaker(IPresentationSpeaker $speaker, ISummit $current_summit, $role = IPresentationSpeaker::RoleSpeaker, $check_email_existance = true){
87+
88+
return $this->tx_manager->transaction(function () use (
89+
$current_summit,
90+
$speaker,
91+
$role,
92+
$check_email_existance
93+
) {
94+
// we need an email for this speaker ...
95+
$email = $speaker->getEmail();
96+
if (empty($email)) return false;
97+
98+
if ($check_email_existance && $speaker->announcementEmailAlreadySent($current_summit->ID)) return false;
99+
100+
$sender_service = $this->sender_factory->build($current_summit, $speaker, $role);
101+
102+
// get registration code
103+
if (is_null($sender_service)) {
104+
echo sprintf('excluding email to %s', $email) . PHP_EOL;
105+
return false;
106+
}
107+
108+
$code = null;
109+
110+
if ($speaker->hasPublishedPresentations($current_summit->getIdentifier(), $role)) //get approved code
111+
{
112+
$code = $this->promo_code_repository->getNextAvailableByType
113+
(
114+
$current_summit,
115+
ISpeakerSummitRegistrationPromoCode::TypeAccepted
116+
);
117+
if (is_null($code)) throw new Exception('not available promo code!!!');
118+
} else if ($speaker->hasAlternatePresentations($current_summit->getIdentifier(), $role)) // get alternate code
119+
{
120+
$code = $this->promo_code_repository->getNextAvailableByType
121+
(
122+
$current_summit,
123+
ISpeakerSummitRegistrationPromoCode::TypeAlternate
124+
);
125+
if (is_null($code)) throw new Exception('not available alternate promo code!!!');
126+
}
86127

128+
$params = [
129+
130+
'Speaker' => $speaker,
131+
'Summit' => $current_summit,
132+
"Role" => $role
133+
];
134+
135+
if (!is_null($code)) {
136+
$speaker->registerSummitPromoCode($code);
137+
$code->setEmailSent(true);
138+
$code->write();
139+
$params['PromoCode'] = $code;
140+
}
141+
echo sprintf('sending email to %s', $email) . PHP_EOL;
142+
$sender_service->send($params);
143+
return true;
144+
});
145+
}
87146

88147
public function sendSpeakersSelectionAnnouncementBySummit(ISummit $current_summit, $batch_size)
89148
{
@@ -120,59 +179,8 @@ public function sendSpeakersSelectionAnnouncementBySummit(ISummit $current_summi
120179

121180
foreach ($speakers as $speaker) {
122181

123-
if (!$speaker instanceof IPresentationSpeaker) continue;
124-
// we need an email for this speaker ...
125-
$email = $speaker->getEmail();
126-
if (empty($email)) continue;
127-
128-
if ($speaker->announcementEmailAlreadySent($current_summit->ID)) continue;
129-
130-
$sender_service = $this->sender_factory->build($current_summit, $speaker, IPresentationSpeaker::RoleSpeaker);
131-
132-
// get registration code
133-
if (is_null($sender_service)) {
134-
echo sprintf('excluding email to %s', $email).PHP_EOL;
135-
continue;
136-
}
137-
138-
$code = null;
139-
140-
if ($speaker->hasPublishedPresentations($current_summit->getIdentifier(), IPresentationSpeaker::RoleSpeaker)) //get approved code
141-
{
142-
$code = $this->promo_code_repository->getNextAvailableByType
143-
(
144-
$current_summit,
145-
ISpeakerSummitRegistrationPromoCode::TypeAccepted,
146-
$batch_size
147-
);
148-
if (is_null($code)) throw new Exception('not available promo code!!!');
149-
} else if ($speaker->hasAlternatePresentations($current_summit->getIdentifier(), IPresentationSpeaker::RoleSpeaker)) // get alternate code
150-
{
151-
$code = $this->promo_code_repository->getNextAvailableByType
152-
(
153-
$current_summit,
154-
ISpeakerSummitRegistrationPromoCode::TypeAlternate,
155-
$batch_size
156-
);
157-
if (is_null($code)) throw new Exception('not available alternate promo code!!!');
158-
}
159-
160-
$params = array
161-
(
162-
'Speaker' => $speaker,
163-
'Summit' => $current_summit,
164-
"Role" => IPresentationSpeaker::RoleSpeaker
165-
);
166-
167-
if (!is_null($code)) {
168-
$speaker->registerSummitPromoCode($code);
169-
$code->setEmailSent(true);
170-
$code->write();
171-
$params['PromoCode'] = $code;
172-
}
173-
echo sprintf('sending email to %s', $email).PHP_EOL;
174-
$sender_service->send($params);
175-
++$speakers_notified;
182+
if($this->sendSelectionAnnouncementEmailForSpeaker($speaker, $current_summit))
183+
++$speakers_notified;
176184
}
177185
$task->updatePage($count, $page_size);
178186
$task->write();
@@ -224,65 +232,8 @@ public function sendModeratorsSelectionAnnouncementBySummit(ISummit $current_sum
224232
echo sprintf('total speakers %s - count %s', $count, count($moderators)).PHP_EOL;
225233

226234
foreach ($moderators as $moderator) {
227-
228-
if (!$moderator instanceof IPresentationSpeaker) continue;
229-
// we need an email for this speaker ...
230-
$email = $moderator->getEmail();
231-
if (empty($email)) continue;
232-
233-
if ($moderator->announcementEmailAlreadySent($current_summit->ID)) continue;
234-
235-
$sender_service = $this->sender_factory->build($current_summit, $moderator, IPresentationSpeaker::RoleModerator);
236-
// get registration code
237-
if (is_null($sender_service)) {
238-
echo sprintf('excluding email to %s', $email).PHP_EOL;
239-
continue;
240-
}
241-
242-
$code = null;
243-
244-
if (
245-
$moderator->hasPublishedRegularPresentations($current_summit->getIdentifier(), IPresentationSpeaker::RoleModerator, true) ||
246-
$moderator->hasPublishedLightningPresentations($current_summit->getIdentifier(), IPresentationSpeaker::RoleModerator, true)
247-
) //get approved code
248-
{
249-
$code = $this->promo_code_repository->getNextAvailableByType
250-
(
251-
$current_summit,
252-
ISpeakerSummitRegistrationPromoCode::TypeAccepted,
253-
$batch_size
254-
);
255-
if (is_null($code)) throw new Exception('not available promo code!!!');
256-
} else if
257-
(
258-
$moderator->hasAlternatePresentations($current_summit->getIdentifier(), IPresentationSpeaker::RoleModerator, true)
259-
) // get alternate code
260-
{
261-
$code = $this->promo_code_repository->getNextAvailableByType
262-
(
263-
$current_summit,
264-
ISpeakerSummitRegistrationPromoCode::TypeAlternate,
265-
$batch_size
266-
);
267-
if (is_null($code)) throw new Exception('not available alternate promo code!!!');
268-
}
269-
270-
$params = array
271-
(
272-
'Speaker' => $moderator,
273-
'Summit' => $current_summit,
274-
"Role" => IPresentationSpeaker::RoleModerator
275-
);
276-
277-
if (!is_null($code)) {
278-
$moderator->registerSummitPromoCode($code);
279-
$code->setEmailSent(true);
280-
$code->write();
281-
$params['PromoCode'] = $code;
282-
}
283-
echo sprintf('sending email to %s', $email).PHP_EOL;
284-
$sender_service->send($params);
285-
++$speakers_notified;
235+
if($this->sendSelectionAnnouncementEmailForSpeaker($moderator, $current_summit, IPresentationSpeaker::RoleModerator))
236+
++$speakers_notified;
286237
}
287238
$task->updatePage($count, $page_size);
288239
$task->write();

summit/code/models/repositories/ISpeakerSummitRegistrationPromoCodeRepository.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@ interface ISpeakerSummitRegistrationPromoCodeRepository extends IEntityRepositor
2121
* @param int $batch_size
2222
* @return ISpeakerSummitRegistrationPromoCode
2323
*/
24-
public function getNextAvailableByType(ISummit $summit, $promo_code_type, $batch_size = 10);
24+
public function getNextAvailableByType(ISummit $summit, $promo_code_type, $batch_size = 100);
2525
}

0 commit comments

Comments
 (0)