コード例 #1
0
 protected function Form_Create()
 {
     parent::Form_Create();
     // Instantiate the Meta DataGrid
     $this->dtgNarroSuggestions = new NarroSuggestionDataGrid($this);
     // Style the DataGrid (if desired)
     $this->dtgNarroSuggestions->CssClass = 'datagrid';
     $this->dtgNarroSuggestions->AlternateRowStyle->CssClass = 'alternate';
     // Add Pagination (if desired)
     $this->dtgNarroSuggestions->Paginator = new QPaginator($this->dtgNarroSuggestions);
     $this->dtgNarroSuggestions->ItemsPerPage = __FORM_DRAFTS_FORM_LIST_ITEMS_PER_PAGE__;
     // Use the MetaDataGrid functionality to add Columns for this datagrid
     // Create an Edit Column
     $strEditPageUrl = __VIRTUAL_DIRECTORY__ . __FORM_DRAFTS__ . '/narro_suggestion_edit.php';
     $this->dtgNarroSuggestions->MetaAddEditLinkColumn($strEditPageUrl, 'Edit', 'Edit');
     // Create the Other Columns (note that you can use strings for narro_suggestion's properties, or you
     // can traverse down QQN::narro_suggestion() to display fields that are down the hierarchy)
     $this->dtgNarroSuggestions->MetaAddColumn('SuggestionId');
     $this->dtgNarroSuggestions->MetaAddColumn(QQN::NarroSuggestion()->User);
     $this->dtgNarroSuggestions->MetaAddColumn(QQN::NarroSuggestion()->Text);
     $this->dtgNarroSuggestions->MetaAddColumn(QQN::NarroSuggestion()->Language);
     $this->dtgNarroSuggestions->MetaAddColumn('SuggestionValue');
     $this->dtgNarroSuggestions->MetaAddColumn('SuggestionValueMd5');
     $this->dtgNarroSuggestions->MetaAddColumn('SuggestionCharCount');
     $this->dtgNarroSuggestions->MetaAddColumn('SuggestionWordCount');
     $this->dtgNarroSuggestions->MetaAddColumn('HasComments');
     $this->dtgNarroSuggestions->MetaAddColumn('IsImported');
     $this->dtgNarroSuggestions->MetaAddColumn('Created');
     $this->dtgNarroSuggestions->MetaAddColumn('Modified');
 }
コード例 #2
0
 public function txtSearch_KeyUp()
 {
     if (strlen($this->txtSearch->Text) < 2 || preg_match("/^'.*'\$/", $this->txtSearch->Text) || preg_match('/^".*"$/', $this->txtSearch->Text)) {
         $this->dtgSuggestion->AdditionalConditions = QQ::AndCondition(QQ::Equal(QQN::NarroSuggestion()->LanguageId, $this->lstLanguage->SelectedValue), QQ::Like(QQN::NarroSuggestion()->Text->TextValue, substr($this->txtSearch->Text, 1, -1)));
     } else {
         $this->dtgSuggestion->AdditionalConditions = QQ::AndCondition(QQ::Equal(QQN::NarroSuggestion()->LanguageId, $this->lstLanguage->SelectedValue), QQ::Like(QQN::NarroSuggestion()->Text->TextValue, '%' . $this->txtSearch->Text . '%'));
     }
     $this->dtgSuggestion->Refresh();
 }
コード例 #3
0
 public function dtgTranslation_Create()
 {
     $this->dtgTranslation = new NarroSuggestionDataGrid($this);
     $this->dtgTranslation->ShowFilter = false;
     $this->dtgTranslation->ShowHeader = false;
     $this->dtgTranslation->ShowFooter = false;
     $this->dtgTranslation->AdditionalClauses = array(QQ::Expand(QQN::NarroSuggestion()->User));
     $this->dtgTranslation->AdditionalConditions = QQ::AndCondition(QQ::Equal(QQN::NarroSuggestion()->LanguageId, QApplication::GetLanguageId()), QQ::Equal(QQN::NarroSuggestion()->TextId, $this->objContextInfo->Context->TextId));
     $colSuggestion = $this->dtgTranslation->MetaAddColumn('SuggestionValue');
     $colSuggestion->HtmlEntities = false;
     $colSuggestion->Html = '<?=$_CONTROL->ParentControl->dtgTranslaton_colSuggestion_Render($_ITEM)?>';
     $colActions = new QDataGridColumn('Actions');
     $colActions->HtmlEntities = false;
     $colActions->CssClass = 'actions';
     $colActions->Html = '<?=$_CONTROL->ParentControl->dtgTranslation_colActions_Render($_ITEM)?>';
     $this->dtgTranslation->AddColumn($colActions);
 }
コード例 #4
0
 } catch (Exception $objEx) {
     if (strstr($objEx->getMessage(), 'Duplicate')) {
         $arrDuplicateTexts = NarroText::QueryArray(QQ::AndCondition(QQ::Equal(QQN::NarroText()->TextValue, $objText->TextValue), QQ::NotEqual(QQN::NarroText()->TextId, $objText->TextId)));
         error_log(sprintf('Found duplicates for "%s": %d', $objText->TextValue, count($arrDuplicateTexts)));
         foreach ($arrDuplicateTexts as $objDuplicateText) {
             if ($objText->TextValue !== $objDuplicateText->TextValue) {
                 continue;
             }
             foreach (NarroTextComment::LoadArrayByTextId($objDuplicateText->TextId) as $objTextComment) {
                 error_log('Moving text comment');
                 $objTextComment->TextId = $objText->TextId;
                 $objTextComment->Save();
             }
             foreach (NarroSuggestion::LoadArrayByTextId($objDuplicateText->TextId) as $objSuggestion) {
                 error_log('Moving text from suggestion');
                 $arrDuplicateSuggestions = NarroSuggestion::QueryArray(QQ::AndCondition(QQ::NotEqual(QQN::NarroSuggestion()->SuggestionId, $objSuggestion->SuggestionId), QQ::Equal(QQN::NarroSuggestion()->SuggestionValue, $objSuggestion->SuggestionValue), QQ::Equal(QQN::NarroSuggestion()->TextId, $objText->TextId), QQ::Equal(QQN::NarroSuggestion()->LanguageId, $objSuggestion->LanguageId)));
                 if (count($arrDuplicateSuggestions)) {
                     error_log(sprintf('Found duplicates for "%s": %d', $objSuggestion->SuggestionValue, count($arrDuplicateSuggestions)));
                     foreach ($arrDuplicateSuggestions as $objDuplicateSuggestion) {
                         if ($objSuggestion->SuggestionValue !== $objDuplicateSuggestion->SuggestionValue) {
                             continue;
                         }
                         foreach (NarroSuggestionComment::LoadArrayBySuggestionId($objDuplicateSuggestion->SuggestionId) as $objSuggestionComment) {
                             error_log('Moving suggestion comment');
                             $objSuggestionComment->SuggestionId = $objSuggestion->SuggestionId;
                             $objSuggestionComment->Save();
                         }
                         foreach (NarroSuggestionVote::LoadArrayBySuggestionId($objDuplicateSuggestion->SuggestionId) as $objSuggestionVote) {
                             error_log('Moving suggestion vote');
                             $objSuggestionVote->SuggestionId = $objSuggestion->SuggestionId;
                             $objSuggestionVote->Save();
コード例 #5
0
 /**
  * Count NarroSuggestions
  * by TextId, LanguageId Index(es)
  * @param integer $intTextId
  * @param integer $intLanguageId
  * @return int
  */
 public static function CountByTextIdLanguageId($intTextId, $intLanguageId)
 {
     // Call NarroSuggestion::QueryCount to perform the CountByTextIdLanguageId query
     return NarroSuggestion::QueryCount(QQ::AndCondition(QQ::Equal(QQN::NarroSuggestion()->TextId, $intTextId), QQ::Equal(QQN::NarroSuggestion()->LanguageId, $intLanguageId)));
 }
コード例 #6
0
 public static function CountByTextIdForCurrentLanguage($intTextId)
 {
     return self::QueryCount(QQ::AndCondition(QQ::Equal(QQN::NarroSuggestion()->LanguageId, QApplication::GetLanguageId()), QQ::Equal(QQN::NarroSuggestion()->TextId, $intTextId)));
 }
コード例 #7
0
 protected function dtgSuggestions_Create()
 {
     $dtgSuggestions = new NarroSuggestionDataGrid($this->tabActivity);
     $dtgSuggestions->SetCustomStyle('padding', '5px');
     $dtgSuggestions->Title = sprintf(t('Translations added by <b>%s</b>'), $this->objUser->RealName);
     //$dtgSuggestions->SetCustomStyle('margin-left', '15px');
     $colText = $dtgSuggestions->MetaAddColumn(QQN::NarroSuggestion()->Text->TextValue);
     $colText->Name = t('Original text');
     $colText->Html = '<?= $_CONTROL->colText_Render($_ITEM); ?>';
     $colText->HtmlEntities = false;
     $colSuggestion = $dtgSuggestions->MetaAddColumn(QQN::NarroSuggestion()->SuggestionValue);
     $colSuggestion->Name = t('Translated text');
     $colSuggestion->Html = '<?= $_CONTROL->colSuggestion_Render($_ITEM); ?>';
     $colLanguage = $dtgSuggestions->MetaAddColumn(QQN::NarroSuggestion()->Language->LanguageName);
     $colLanguage->Name = t('Language');
     $colLanguage->Filter = null;
     foreach (NarroLanguage::LoadAllActive() as $objLanguage) {
         $colLanguage->FilterAddListItem($objLanguage->LanguageName, QQ::Equal(QQN::NarroSuggestion()->LanguageId, $objLanguage->LanguageId));
     }
     $colLanguage->FilterActivate(QApplication::$TargetLanguage->LanguageName);
     $colLanguage->Html = '<?= $_CONTROL->colLanguage_Render($_ITEM); ?>';
     $colCreated = $dtgSuggestions->MetaAddColumn(QQN::NarroSuggestion()->Created);
     $colCreated->Name = t('Created');
     $colCreated->FilterType = QFilterType::None;
     $colCreated->Html = '<?= $_CONTROL->colCreated_Render($_ITEM); ?>';
     $colCreated->HtmlEntities = false;
     $colCreated->Wrap = false;
     // Datagrid Paginator
     $dtgSuggestions->Paginator = new QPaginator($dtgSuggestions);
     $dtgSuggestions->ItemsPerPage = QApplication::$User->GetPreferenceValueByName('Items per page');
     $dtgSuggestions->SortColumnIndex = 3;
     $dtgSuggestions->SortDirection = true;
     $dtgSuggestions->AdditionalClauses = array(QQ::Expand(QQN::NarroSuggestion()->Text), QQ::Expand(QQN::NarroSuggestion()->Language));
     $dtgSuggestions->AdditionalConditions = QQ::Equal(QQN::NarroSuggestion()->UserId, $this->objUser->UserId);
     $dtgSuggestions->btnFilter_Click($this->Form->FormId, $dtgSuggestions->FilterButton->ControlId, '');
 }
コード例 #8
0
 /**
  * Used internally by the Meta-based Add Column tools.
  *
  * Given a QQNode or a Text String, this will return a NarroSuggestion-based QQNode.
  * It will also verify that it is a proper NarroSuggestion-based QQNode, and will throw an exception otherwise.
  *
  * @param mixed $mixContent
  * @return QQNode
  */
 protected function ResolveContentItem($mixContent)
 {
     if ($mixContent instanceof QQNode) {
         if (!$mixContent->_ParentNode) {
             throw new QCallerException('Content QQNode cannot be a Top Level Node');
         }
         if ($mixContent->_RootTableName == 'narro_suggestion') {
             if ($mixContent instanceof QQReverseReferenceNode && !$mixContent->_PropertyName) {
                 throw new QCallerException('Content QQNode cannot go through any "To Many" association nodes.');
             }
             $objCurrentNode = $mixContent;
             while ($objCurrentNode = $objCurrentNode->_ParentNode) {
                 if (!$objCurrentNode instanceof QQNode) {
                     throw new QCallerException('Content QQNode cannot go through any "To Many" association nodes.');
                 }
                 if ($objCurrentNode instanceof QQReverseReferenceNode && !$objCurrentNode->_PropertyName) {
                     throw new QCallerException('Content QQNode cannot go through any "To Many" association nodes.');
                 }
             }
             return $mixContent;
         } else {
             throw new QCallerException('Content QQNode has a root table of "' . $mixContent->_RootTableName . '". Must be a root of "narro_suggestion".');
         }
     } else {
         if (is_string($mixContent)) {
             switch ($mixContent) {
                 case 'SuggestionId':
                     return QQN::NarroSuggestion()->SuggestionId;
                 case 'UserId':
                     return QQN::NarroSuggestion()->UserId;
                 case 'User':
                     return QQN::NarroSuggestion()->User;
                 case 'TextId':
                     return QQN::NarroSuggestion()->TextId;
                 case 'Text':
                     return QQN::NarroSuggestion()->Text;
                 case 'LanguageId':
                     return QQN::NarroSuggestion()->LanguageId;
                 case 'Language':
                     return QQN::NarroSuggestion()->Language;
                 case 'SuggestionValue':
                     return QQN::NarroSuggestion()->SuggestionValue;
                 case 'SuggestionValueMd5':
                     return QQN::NarroSuggestion()->SuggestionValueMd5;
                 case 'SuggestionCharCount':
                     return QQN::NarroSuggestion()->SuggestionCharCount;
                 case 'SuggestionWordCount':
                     return QQN::NarroSuggestion()->SuggestionWordCount;
                 case 'HasComments':
                     return QQN::NarroSuggestion()->HasComments;
                 case 'IsImported':
                     return QQN::NarroSuggestion()->IsImported;
                 case 'Created':
                     return QQN::NarroSuggestion()->Created;
                 case 'Modified':
                     return QQN::NarroSuggestion()->Modified;
                 default:
                     throw new QCallerException('Simple Property not found in NarroSuggestionDataGrid content: ' . $mixContent);
             }
         } else {
             if ($mixContent instanceof QQAssociationNode) {
                 throw new QCallerException('Content QQNode cannot go through any "To Many" association nodes.');
             } else {
                 throw new QCallerException('Invalid Content type');
             }
         }
     }
 }
コード例 #9
0
 /**
  * Get the most recent suggestion for a context made by a list of users
  *
  * @param integer $intContextId
  * @param integer $intTextId
  * @param integer $intUserId
  * @return NarroSuggestion
  */
 protected function GetUserListSuggestion($intContextId, $intTextId, $intUserId)
 {
     return NarroSuggestion::QuerySingle(QQ::AndCondition(QQ::In(QQN::NarroSuggestion()->UserId, $this->arrExportAuthorList), QQ::Equal(QQN::NarroSuggestion()->TextId, $intTextId), QQ::Equal(QQN::NarroSuggestion()->LanguageId, $this->objTargetLanguage->LanguageId)));
 }
コード例 #10
0
ファイル: rss.php プロジェクト: Jobava/narro
         if (isset($objProject) && $objProject instanceof NarroProject) {
             $objCondition = QQ::AndCondition(QQ::Equal(QQN::NarroContextInfo()->LanguageId, QApplication::GetLanguageId()), QQ::Equal(QQN::NarroContextInfo()->Context->ProjectId, $objProject->ProjectId));
         } else {
             $objCondition = QQ::Equal(QQN::NarroContextInfo()->LanguageId, QApplication::GetLanguageId());
         }
         foreach (NarroContextInfo::QueryArray($objCondition, array(QQ::OrderBy(QQN::NarroContextInfo()->Modified, 0), QQ::LimitInfo(20, 0))) as $intKey => $objNarroContextInfo) {
             $strContextLink = sprintf(__HTTP_URL__ . __VIRTUAL_DIRECTORY__ . __SUBDIRECTORY__ . '/' . NarroLink::Translate($objNarroContextInfo->Context->ProjectId, '', 0, '', 0, 0, 10, 0, $objNarroContextInfo->ContextInfoId));
             $strProjectLink = sprintf(__HTTP_URL__ . __VIRTUAL_DIRECTORY__ . __SUBDIRECTORY__ . '/' . NarroLink::ProjectTextList($objNarroContextInfo->Context->ProjectId, NarroTranslatePanel::SHOW_ALL, ''));
             $strUserLink = __HTTP_URL__ . __VIRTUAL_DIRECTORY__ . __SUBDIRECTORY__ . '/' . NarroLink::UserProfile($objNarroContextInfo->ValidatorUserId);
             if (isset($objProject) && $objProject instanceof NarroProject) {
                 $strItemName = '';
             } else {
                 $strItemName = $objNarroContextInfo->Context->Project->ProjectName . ' :: ';
             }
             $objItem = new QRssItem($strItemName . (strlen($objNarroContextInfo->Context->Text->TextValue) > 124 ? substr($objNarroContextInfo->Context->Text->TextValue, 0, 124) . '...' : $objNarroContextInfo->Context->Text->TextValue), $strContextLink);
             $objItem->Description = sprintf('<p>' . t('Project') . ': <a href="%s">%s</a></p>', $strProjectLink, $objNarroContextInfo->Context->Project->ProjectName) . sprintf('<p>' . t('Context') . ': <a href="%s">%s</a></p>', $strContextLink, NarroString::HtmlEntities($objNarroContextInfo->Context->Context)) . sprintf('<p>' . t('Original text') . ': %s</p>', $objNarroContextInfo->Context->TextAccessKey ? NarroString::Replace($objNarroContextInfo->Context->TextAccessKey, '<u>' . $objNarroContextInfo->Context->TextAccessKey . '</u>', NarroString::HtmlEntities($objNarroContextInfo->Context->Text->TextValue), 1) : NarroString::HtmlEntities($objNarroContextInfo->Context->Text->TextValue)) . ($objNarroContextInfo->ValidSuggestionId ? sprintf('<p>' . t('Approved suggestion') . ': %s</p>', $objNarroContextInfo->Context->TextAccessKey ? NarroString::Replace($objNarroContextInfo->SuggestionAccessKey, '<u>' . $objNarroContextInfo->SuggestionAccessKey . '</u>', NarroString::HtmlEntities($objNarroContextInfo->ValidSuggestion->SuggestionValue), 1) : NarroString::HtmlEntities($objNarroContextInfo->ValidSuggestion->SuggestionValue)) : '') . ($objNarroContextInfo->HasSuggestions ? sprintf(t('The text has %s suggestions'), NarroSuggestion::QueryCount(QQ::AndCondition(QQ::Equal(QQN::NarroSuggestion()->TextId, $objNarroContextInfo->Context->TextId), QQ::Equal(QQN::NarroSuggestion()->LanguageId, QApplication::GetLanguageId())))) : t('The text has no suggestions')) . ($objNarroContextInfo->ValidSuggestionId && $objNarroContextInfo->ValidatorUserId != NarroUser::ANONYMOUS_USER_ID ? sprintf('<p>' . t('Approved by') . ': <a href="%s">%s</a>', $strUserLink, $objNarroContextInfo->ValidSuggestionId ? $objNarroContextInfo->ValidatorUser->RealName : '') : '');
             $objItem->PubDate = new QDateTime($objNarroContextInfo->Modified);
             $objItem->Author = $objNarroContextInfo->ValidSuggestionId ? $objNarroContextInfo->ValidatorUser->RealName : '';
             $objRssFeed->AddItem($objItem);
             $strDescription = '';
         }
         $objRssFeed->Language = strtolower(QApplication::$TargetLanguage->LanguageCode);
         $objRssFeed->Image = new QRssImage(__HTTP_URL__ . __VIRTUAL_DIRECTORY__ . __SUBDIRECTORY__ . '/assets/images/narro.png', t('Narro - Translate, we\'re open!'), __HTTP_URL__ . __VIRTUAL_DIRECTORY__ . __SUBDIRECTORY__ . '/index.php');
         QApplication::$Cache->save($objRssFeed, $strCacheId, array(), 3600);
     }
     $objRssFeed->Run();
     break;
 case 'textcomment':
     if (isset($objProject) && $objProject instanceof NarroProject) {
         $strCacheId = sprintf('rssfeed_textcomment_%d_%d', $objProject->ProjectId, QApplication::QueryString('l'));
     } else {