Skip to content

Commit

Permalink
[smarcet] - #10763
Browse files Browse the repository at this point in the history
WIP
* added coa landing page
* updated file ingest process/ model
  • Loading branch information
smarcet committed Apr 14, 2016
1 parent e1ce138 commit 8092663
Show file tree
Hide file tree
Showing 15 changed files with 803 additions and 35 deletions.
4 changes: 1 addition & 3 deletions coa/_config.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,4 @@
* limitations under the License.
**/

define('COA_FILE_API_BASE_URL','https://officestg.linuxfoundation.org');
define('COA_FILE_API_BASE_USER','openstackdevel');
define('COA_FILE_API_BASE_PASS','WqbpznsPuPfUMdjQj0X0');
define('COA_CNAME', 'https://coa.openstack.org/');
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ public function getExams()
return $this->owner->Exams();
}


/**
* @return ICertifiedOpenStackAdministratorExam|null
*/
Expand All @@ -39,6 +40,8 @@ public function getLatestApprovedExam()
return $this->owner->Exams()->filter('Status', 'Pass')->sort('ExpirationDate', 'DESC')->first();
}



/**
* @param string $external_id
* @return ICertifiedOpenStackAdministratorExam|null
Expand All @@ -55,4 +58,25 @@ public function getIdentifier()
{
return (int)$this->owner->ID;
}

/**
* @return bool
*/
public function hasAvailableCertifications()
{
return intval($this->owner->Exams()
->where(" (CertificationStatus = 'Achieved' OR CertificationStatus = 'Renewed') AND CertificationExpirationDate > UTC_DATE() ")
->count()) > 0;
}

/**
* @return COACertification|null
*/
public function getLatestCertification()
{
$exam = $this->owner->Exams()
->where(" (CertificationStatus = 'Achieved' OR CertificationStatus = 'Renewed') AND CertificationExpirationDate > UTC_DATE() ")
->first();
return is_null($exam) ? null : $exam->getCertification();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,21 @@ final class CertifiedOpenStackAdministratorExam extends DataObject implements IC
{
private static $db = array
(
'Code' => 'Varchar(255)',
'CertificationNumber' => 'Varchar(255)',
'ExternalID' => 'Varchar(255)',
'ExpirationDate' => 'SS_Datetime',
'PassFailDate' => 'SS_Datetime',
'ModifiedDate' => 'SS_Datetime',
'Status' => "Enum('New,Pending,Pass,No Pass','New')",
'ExternalID' => 'Varchar(255)',
'ExpirationDate' => 'SS_Datetime',
'PassFailDate' => 'SS_Datetime',
'ModifiedDate' => 'SS_Datetime',
'Status' => "Enum('New,Pending,Pass,No Pass','New')",
'Code' => 'Varchar(255)',
'CertificationNumber' => 'Varchar(255)',
'CertificationStatus' => "Enum('None,Achieved,InProgress,Expired,Renewed,In Appeals,Revoked','None')",
'CertificationExpirationDate' => "SS_Datetime",
);


public static $valid_status = array('New','Pending','Pass','No Pass');

public static $valid_certification_status = array('Achieved','InProgress','Expired','Renewed','In Appeals','Revoked');
public static $approved_certification_status = array('Renewed', 'Achieved', 'InProgress');
private static $has_one = array
(
'Owner' => 'Member',
Expand All @@ -46,28 +49,41 @@ public function getIdentifier()
}

/**
* @param array|string $status
* @param string $status
* @param string $modified_date
* @param string $exam_expiration_date
* @param string $pass_date
* @param string $cert_nbr
* @param string $code
* @param string $modified_date
* @param string $expiration_date
* @param string $cert_nbr
* @param string $cert_expiration_date
* @param string $cert_status
* @return $this
* @throws EntityValidationException
*/
public function update($status, $pass_date, $cert_nbr, $code, $modified_date, $expiration_date)
public function update($status, $modified_date, $exam_expiration_date, $pass_date,$code, $cert_nbr,$cert_expiration_date, $cert_status)
{
if(!$this->isValidStatus($status)) throw new EntityValidationException(sprintf("invalid status %s", $status));
$this->Status = $status;
$this->CertificationNumber = $cert_nbr;
$this->Code = $code;

$this->ModifiedDate = $modified_date;
if(!empty($code))
$this->Code = $code;

if(!empty($expiration_date))
$this->ExpirationDate = $expiration_date;

if(!empty($pass_date))
$this->PassFailDate = $pass_date;

if(!empty($cert_nbr))
$this->CertificationNumber = $cert_nbr;

if(!empty($cert_status))
$this->CertificationStatus = $cert_status;

if(!empty($cert_expiration_date))
$this->CertificationExpirationDate = $cert_expiration_date;

return $this;
}

Expand All @@ -78,4 +94,14 @@ public function update($status, $pass_date, $cert_nbr, $code, $modified_date, $e
public function isValidStatus($status){
return in_array($status, self::$valid_status);
}

/**
* @return COACertification
*/
public function getCertification()
{
if(!in_array($this->CertificationStatus, self::$approved_certification_status)) return null;
$expiration_date = empty($this->CertificationExpirationDate) ? null: new DateTime($this->CertificationExpirationDate);
return new COACertification($this->Code, $this->CertificationNumber, $this->CertificationStatus, $expiration_date );
}
}
77 changes: 77 additions & 0 deletions coa/code/model/COACertification.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<?php

/**
* Copyright 2016 OpenStack Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
final class COACertification
{
/**
* @var string
*/
private $code;
/**
* @var string
*/
private $number;
/**
* @var string
*/
private $status;
/**
* @var DateTime
*/
private $expiration_date;

/**
* COACertification constructor.
* @param string $code
* @param string $number
* @param string $status
* @param DateTime $expiration_date
*/
public function __construct($code, $number, $status, DateTime $expiration_date = null)
{
$this->code = $code;
$this->number = $number;
$this->status = $status;
$this->expiration_date = $expiration_date;
}

/**
* @return string
*/
public function getCode(){
return $this->code;
}

/**
* @return string
*/
public function getNumber(){
return $this->number;
}

/**
* @return string
*/
public function getStatus(){
return $this->status;
}

/**
* @return DateTime
*/
public function getExpirationDate(){
return $this->expiration_date;
}

}
10 changes: 10 additions & 0 deletions coa/code/model/ICertifiedOpenStackAdministrator.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,14 @@ public function getLatestApprovedExam();
* @return ICertifiedOpenStackAdministratorExam|null
*/
public function getExamByExternalId($external_id);

/**
* @return bool
*/
public function hasAvailableCertifications();

/**
* @return COACertification|null
*/
public function getLatestCertification();
}
17 changes: 12 additions & 5 deletions coa/code/model/ICertifiedOpenStackAdministratorExam.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,19 +16,26 @@ interface ICertifiedOpenStackAdministratorExam extends IEntity
{
/**
* @param string $status
* @param string $modified_date
* @param string $exam_expiration_date
* @param string $pass_date
* @param string $cert_nbr
* @param string $code
* @param string $modified_date
* @param string $expiration_date
* @throws EntityValidationException
* @param string $cert_nbr
* @param string $cert_expiration_date
* @param string $cert_status
* @return $this
* @throws EntityValidationException
*/
public function update($status, $pass_date, $cert_nbr, $code, $modified_date, $expiration_date);
public function update($status, $modified_date, $exam_expiration_date, $pass_date,$code, $cert_nbr, $cert_expiration_date, $cert_status);

/**
* @param string $status
* @return bool
*/
public function isValidStatus($status);

/**
* @return COACertification
*/
public function getCertification();
}
37 changes: 25 additions & 12 deletions coa/code/model/services/COAManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,25 +67,38 @@ public function processFiles()
$rows = CSVReader::load($content);

foreach ($rows as $row) {
$email = $row['open_stack_id'];
$exam_ext_id = $row['candidate_exam_id'];
$status = $row['exam_status'];
$pass_date = $row['pass_fail_date_c'];
$cert_nbr = $row['certification_number'];
$code = $row['exam_code'];
$modified_date = $row['candidate_exam_date_modified'];
$expiration_date = $row['exam_expiration_date'];
$email = $row['open_stack_id'];
$exam_ext_id = $row['candidate_exam_id'];
$status = $row['exam_status'];
$pass_date = $row['pass_fail_date_c'];
$cert_nbr = $row['certification_number'];
$code = $row['exam_code'];
$modified_date = $row['candidate_exam_date_modified'];
$exam_expiration_date = $row['exam_expiration_date'];
$cert_exam_expiration_date = $row['certificate_expiration_date'];
$cert_status = $row['certification_status'];

$member = $member_repository->findByEmail($email);
if (is_null($member)) continue;
$exam = $member->getExamByExternalId($exam_ext_id);
if (is_null($exam)) {
if (is_null($exam))
{
//create exam
$exam = CertifiedOpenStackAdministratorExam::create();
$exam->OwnerID = $member->ID;
$exam = CertifiedOpenStackAdministratorExam::create();
$exam->OwnerID = $member->ID;
$exam->ExternalID = $exam_ext_id;
}
$exam->update($status, $pass_date, $cert_nbr, $code, $modified_date, $expiration_date);
$exam->update
(
$status,
$modified_date,
$exam_expiration_date,
$pass_date,
$code,
$cert_nbr,
$cert_exam_expiration_date,
$cert_status
);
$exam->write();
}
$this->markFileAsProcessed($file_info);
Expand Down
Loading

0 comments on commit 8092663

Please sign in to comment.