Abstract implementation of SourceInterface containing basic utilities and logical separation between the Gems database and the Source database
| package | Gems |
|---|---|
| subpackage | OpenRosa |
| copyright | Copyright (c) 2011 Erasmus MC |
| license | New BSD License |
| since | Class available since version 1.5 |
| inherited_from | \Gems_Tracker_Source_SourceAbstract |
__construct(array $sourceData, \Zend_Db_Adapter_Abstract $gemsDb)
| inherited_from | \Gems_Tracker_Source_SourceAbstract::__construct() |
|---|
arrayThe information from gems__sources for this source.
\Zend_Db_Adapter_AbstractDo not want to copy db using registry because that is public and this should be private
__construct(array $sourceData, \Zend_Db_Adapter_Abstract $gemsDb)
| inherited_from | \Gems_Tracker_Source_SourceInterface::__construct() |
|---|
arrayThe information from gems__sources for this source.
\Zend_Db_Adapter_AbstractDo not want to copy db using registry because that is public and this should be private
checkSourceActive(integer $userId) : boolean
integerId of the user who takes the action (for logging)
booleancheckSurvey(string $sourceSurveyId, integer $surveyId, integer $userId) : mixed
string
integer
integer
mixedmessage string or array of messagescopyTokenToSource(\Gems_Tracker_Token $token, string $language, integer $surveyId, string $sourceSurveyId = null) : integer
\Gems_Tracker_Token
string
integerGems Survey Id
stringOptional Survey Id used by source
\Gems_Tracker_Source_SurveyNotFoundException |
|---|
integer1 of the token was inserted or changed, 0 otherwisegetAnswerDateTime(string $fieldName, \Gems_Tracker_Token $token, integer $surveyId, string $sourceSurveyId = null) : \MUtil_Date
A seperate function as only the source knows what format the date/time value has.
stringName of answer field
\Gems_Tracker_TokenGems token object
integerGems Survey Id
stringOptional Survey Id used by source
\MUtil_Datedate time or nullgetCompletionTime(\Gems_Tracker_Token $token, integer $surveyId, string $sourceSurveyId = null) : \MUtil_Date
A source always return null when it does not know this time (or does not know it well enough). In the case \Gems_Tracker_Token will do it's best to keep track by itself.
\Gems_Tracker_TokenGems token object
integerGems Survey Id
stringOptional Survey Id used by source
\MUtil_Datedate time or nullgetDatesList(string $language, integer $surveyId, string $sourceSurveyId = null) : array
Used in dropdown list etc..
string(ISO) language string
integerGems Survey Id
stringOptional Survey Id used by source
arrayfieldname => labelgetId() : integer
| inherited_from | \Gems_Tracker_Source_SourceInterface::getId() |
|---|
integerThe source Id of this sourcegetQuestionInformation(string $language, integer $surveyId, string $sourceSurveyId = null) : array
string(ISO) language string
integerGems Survey Id
stringOptional Survey Id used by source
arrayNested arraygetQuestionList(string $language, integer $surveyId, string $sourceSurveyId = null) : array
.
string(ISO) language string
integerGems Survey Id
stringOptional Survey Id used by source
arrayfieldname => labelgetRawTokenAnswerRow(string $tokenId, integer $surveyId, string $sourceSurveyId = null) : array
Function may return more fields than just the answers.
stringGems Token Id
integerGems Survey Id
stringOptional Survey Id used by source
arrayField => Value arraygetRawTokenAnswerRows(array $filter, integer $surveyId, string $sourceSurveyId = null) : array
Function may return more fields than just the answers. The $filter param is an array of filters to apply to the selection, it has some special formatting rules. The key is the db-field to filter on and the value could be a value or an array of values to filter on.
Special keys that should be mapped to the right field by the source are: respondentid organizationid consentcode token
So a filter of [token]=>[abc-def][def-abc] will return the results for these two tokens while a filter of [organizationid] => 70 will return all results for this organization.
arrayfilter array
integerGems Survey Id
stringOptional Survey Id used by source
arrayOf nested Field => Value arrays indexed by tokenIdgetRawTokenAnswerRowsCount(array $filter, integer $surveyId, string $sourceSurveyId = null) : integer
Abstract implementation is not efficient, sources should handle this as efficient as possible.
| inherited_from | \Gems_Tracker_Source_SourceAbstract::getRawTokenAnswerRowsCount() |
|---|
arrayfilter array
integerGems Survey Id
stringOptional Survey Id used by source
integergetRawTokenAnswerRowsCount(array $filter, integer $surveyId, string $sourceSurveyId = null) : integer
Abstract implementation is not efficient, sources should handle this as efficient as possible.
| inherited_from | \Gems_Tracker_Source_SourceInterface::getRawTokenAnswerRowsCount() |
|---|
arrayfilter array
integerGems Survey Id
stringOptional Survey Id used by source
integergetRawTokenAnswerRowsSelect(array $filter, \type $surveyId, \type $sourceSurveyId = null) : \Zend_Db_Select
array
\type
\type
\Zend_Db_SelectgetSourceDatabase() : \Zend_Db_Adapter_Abstract
| inherited_from | \Gems_Tracker_Source_SourceInterface::getSourceDatabase() |
|---|
\Zend_Db_Adapter_AbstractgetStartTime(\Gems_Tracker_Token $token, integer $surveyId, string $sourceSurveyId = null) : \MUtil_Date
A source always return null when it does not know this time (or does not know it well enough). In the case \Gems_Tracker_Token will do it's best to keep track by itself.
\Gems_Tracker_TokenGems token object
integerGems Survey Id
stringOptional Survey Id used by source
\MUtil_Datedate time or nullgetSurvey(\type $surveyId, \type $sourceSurveyId = null) : \OpenRosa_Tracker_Source_OpenRosa_Form
\type
\type
\OpenRosa_Tracker_Source_OpenRosa_FormgetSurveyAnswerModel(\Gems_Tracker_Survey $survey, string $language= null, string $sourceSurveyId= null) : \MUtil_Model_ModelAbstract
\Gems_Tracker_Survey
stringOptional (ISO) language string
stringOptional Survey Id used by source
\MUtil_Model_ModelAbstractgetSurveyInfo(integer $sourceSurveyId) : array
integer
arraygetTokenUrl(\Gems_Tracker_Token $token, string $language, integer $surveyId, string $sourceSurveyId) : string
\Gems_Tracker_TokenGems token object
string
integerGems Survey Id
stringOptional Survey Id used by source
stringThe url to start the surveyinSource(\Gems_Tracker_Token $token, integer $surveyId, string $sourceSurveyId = null) : boolean
\Gems_Tracker_TokenGems token object
integerGems Survey Id
stringOptional Survey Id used by source
booleanisCompleted(\Gems_Tracker_Token $token, integer $surveyId, string $sourceSurveyId = null) : boolean
\Gems_Tracker_TokenGems token object
integerGems Survey Id
stringOptional Survey Id used by source
booleanTrue if the token has completedsetRawTokenAnswers(\Gems_Tracker_Token $token, $answers, integer $surveyId, string $sourceSurveyId = null)
\Gems_Tracker_TokenGems token object
array Field => Value array
integerGems Survey Id
stringOptional Survey Id used by source
setTokenCompletionTime(\Gems_Tracker_Token $token, \Zend_Date|null $completionTime, integer $surveyId, string $sourceSurveyId = null)
\Gems_Tracker_TokenGems token object
\Zend_Datenull\Zend_Date or null
integerGems Survey Id (actually required)
stringOptional Survey Id used by source
synchronizeSurveyBatch(\Gems_Task_TaskRunnerBatch $batch, integer $userId) : array
| inherited_from | \Gems_Tracker_Source_SourceInterface::synchronizeSurveyBatch() |
|---|
\Gems_Task_TaskRunnerBatch
integerId of the user who takes the action (for logging)
arrayReturns an array of messagesupdateConsent(\Gems_Tracker_Token $token, integer $surveyId, string $sourceSurveyId= null, string $consentCode= null) : array: integer
\Gems_Tracker_Token
integerGems Survey Id
stringOptional Survey Id used by source
stringOptional consent code, otherwise code from token is used.
arrayReturns an array of messages
/
public function synchronizeSurveys($userId)
{
$messages = $this->_scanForms();
// Surveys in LS
$db = $this->getSourceDatabase();
$select = $db->select();
$select->from('gems__openrosaforms');
$openRosaSurveys = $db->fetchAssoc($select);
if (!$openRosaSurveys) {
//If no surveys present, just use an empty array as array_combine fails
$openRosaSurveys = array();
$openRosaSurveyIds = array();
} else {
$openRosaSurveyIds = array_combine(array_keys($openRosaSurveys), array_keys($openRosaSurveys));
}
// Surveys in Gems
$gemsSurveys = $this->_getGemsSurveysForSynchronisation();
foreach ($gemsSurveys as $surveyId => $sourceSurveyId) {
$survey = $this->tracker->getSurveyBySourceId($sourceSurveyId, $this->getId());
if (isset($openRosaSurveyIds[$sourceSurveyId])) {
// Exists
$values['gsu_survey_name'] = $openRosaSurveys[$sourceSurveyId]['gof_form_title'] . ' [' . $openRosaSurveys[$sourceSurveyId]['gof_form_version'] . ']';
$values['gsu_surveyor_active'] = $openRosaSurveys[$sourceSurveyId]['gof_form_active'];
$values['gsu_status'] = 'OK';
} else {
// No longer exists
$values['gsu_surveyor_active'] = 0;
$values['gsu_status'] = 'No longer exists';
}
$survey->saveSurvey($values, $userId);
}
foreach (array_diff($openRosaSurveyIds, $gemsSurveys) as $sourceSurveyId) {
// New survey
$values = array();
$values['gsu_survey_name'] = $openRosaSurveys[$sourceSurveyId]['gof_form_title'] . ' [' . $openRosaSurveys[$sourceSurveyId]['gof_form_version'] . ']';
$values['gsu_surveyor_active'] = $openRosaSurveys[$sourceSurveyId]['gof_form_active'];
$values['gsu_active'] = 0;
$values['gsu_status'] = '';
$survey = $this->tracker->getSurveyBySourceId($sourceSurveyId, $this->getId());
$survey->exists = false;
$survey->saveSurvey($values, $userId);
}
return $messages;
}
Updates the consent code of the the token in the source (if needed)integer1 of the token was inserted or changed, 0 otherwise_checkDir(\type $directory) : \Directory
\type
\Directory_getGemsSurveysForSynchronisation() : array
arrayPairs gemsId => sourceId_getSourceSurveysForSynchronisation() : array
| inherited_from | \Gems_Tracker_Source_SourceAbstract::_getSourceSurveysForSynchronisation() |
|---|
arrayof sourceId values or false_getSourceSurveysForSynchronisation() : array
arrayof sourceId values or false_getTokenFromSqlWhere(string $from, string $fieldName) : string
stringThe tokens that should not occur
stringName of database field to use
string_getTokenFromToSql(string $from, string $to, string $fieldName) : string
stringThe tokens that should not occur
stringThe tokens that replace them
stringName of database field to use
string_scanForms()
_updateGemsSurveyExists(array $surveyorSids, integer $userId) : array
arrayThe gsu_surveyor_id's that ARE in the source
integerId of the user who takes the action (for logging)
arrayThe names of the surveys that no longer exist_updateSource(array $values, integer $userId) : integer
arrayThe values that this source should be set to
integerThe current user
integer1 if data changed, 0 otherwiseaddDatabasePrefix(\return $tableName, boolean $addDatabaseName = true) : string
\return
booleanOptional, when true (= default) and there is a database name then it is prepended to the name.
stringfilterLimitOffset(array $filter, \Zend_Db_Select $select)
array
\Zend_Db_Select
getBaseUrl() : string
stringBase url for sourcegetSurveyData(integer $surveyId, string $field = null) : array
Uses internal caching to prevent multiple db lookups during a program run (so no caching beyond page generation time)
integer
stringOptional field to retrieve data for
arrayupdateTokens(integer $userId, $updateTokens = true) : integer
integerId of the user who takes the action (for logging)
integerThe number of tokens changed_getSid(\type $surveyId) : \type
\type
\type$baseDir : string
Will be set on init to: GEMS_ROOT_DIR . '/var/uploads/openrosa/';
$formDir : string
$loader : \Gems_Loader
$project : \Gems_Project_ProjectSettings
$tracker : \Gems_Tracker
$translate : \Zend_Translate
$_gemsDb : \Gems_Task_TaskRunnerBatch: \Zend_Db_Adapter_Abstract
$_sourceData : array
$_sourceDb : \Zend_Db_Adapter_Abstract