예제 #1
0
 /**
  * Get a where condition for a dependent lookup
  * @param String parentVal			The main lookup control's value
  * @param String strCategoryFilter	The main lookup control's field
  * @return String
  */
 protected function getCategoryWhere($parentVal, $strCategoryFilter)
 {
     if (!$this->bUseCategory) {
         return "";
     }
     $strCategoryControl = $this->pageObject->pSetEdit->getCategoryControl($this->field);
     $parentValsPlain = $this->pageObject->pSetEdit->multiSelect($strCategoryControl) ? splitvalues($parentVal) : array($parentVal);
     $parentVals = array();
     foreach ($parentValsPlain as $arKey => $arElement) {
         if ($this->lookupType == LT_QUERY) {
             $parentVals[$arKey] = $this->ciphererDisplay->MakeDBValue($strCategoryFilter, $arElement, '', true);
         } else {
             $parentVals[$arKey] = make_db_value($strCategoryControl, $arElement, '', '', $this->tName);
         }
     }
     $categoryWhere = array();
     foreach ($parentVals as $arKey => $arValue) {
         $condition = $arValue === "null" ? " is null" : "=" . $arValue;
         if ($this->lookupType == LT_QUERY) {
             $categoryWhere[] = $this->ciphererDisplay->GetFieldName(RunnerPage::_getFieldSQL($strCategoryFilter, $this->lookupConnection, $this->lookupPSet), $strCategoryFilter) . $condition;
         } else {
             $categoryWhere[] = $this->lookupConnection->addFieldWrappers($strCategoryFilter) . $condition;
         }
     }
     return count($categoryWhere) == 1 ? $categoryWhere[0] : "(" . implode(" OR ", $categoryWhere) . ")";
 }
예제 #2
0
     }
     $lookupQueryObj->ReplaceFieldsWithDummies($lookupPSet->getBinaryFieldsIndices());
 } else {
     $LookupSQLTable = "SELECT ";
     $lwLinkField = $lookupConnection->addFieldWrappers($gSettings->getLinkField($f));
     if ($gSettings->isLookupUnique($f)) {
         $LookupSQLTable .= "DISTINCT ";
     }
     $LookupSQLTable .= $cipherer->GetLookupFieldName($lwLinkField, $f, null, true);
     if ($lookupConnection->dbType == nDATABASE_MSSQLServer) {
         if ($strUniqueOrderBy && $gSettings->isLookupUnique($f)) {
             $LookupSQLTable .= "," . $lookupConnection->addFieldWrappers($strUniqueOrderBy);
         }
     }
     if (!$linkAndDisplaySame) {
         $LookupSQLTable .= "," . ($lwDisplayField == $lwLinkField ? $cipherer->GetFieldName($lwDisplayField, $f, true) : $lwDisplayField);
     }
     $LookupSQLTable .= " FROM " . $lookupConnection->addTableWrappers($lookupTable) . " ";
 }
 $strLookupWhere = GetLWWhere($f, $pageType, $strTableName);
 if ($strLookupWhere) {
     $strLookupWhere = " (" . $strLookupWhere . ")  AND ";
 }
 if ($LookupType == LT_QUERY) {
     if ($gSettings->getCustomDisplay($f)) {
         $likeField = $searchByLinkField ? $linkFieldName : $displayFieldName;
     } else {
         $likeField = RunnerPage::_getFieldSQLDecrypt($searchByLinkField ? $linkFieldName : $displayFieldName, $lookupConnection, $lookupPSet, $cipherer);
     }
 } else {
     $likeField = $cipherer->GetFieldName($lwDisplayField, $f);
예제 #3
0
function buildLookupSQL($pageType, $field, $table, $parentVal, $childVal = "", $doCategoryFilter = true, $doValueFilter = false, $addCategoryField = false, $doWhereFilter = true, $oneRecordMode = false, $doValueFilterByLinkField = false)
{
    global $strTableName;
    if (!strlen($table)) {
        $table = $strTableName;
    }
    $pSet = new ProjectSettings($table, $pageType);
    //	read settings
    $nLookupType = $pSet->getLookupType($field);
    if ($nLookupType != LT_LOOKUPTABLE && $nLookupType != LT_QUERY) {
        return "";
    }
    $lookupTable = $pSet->getLookupTable($field);
    $displayFieldName = $pSet->getDisplayField($field);
    $linkFieldName = $pSet->getLinkField($field);
    $linkAndDisplaySame = $displayFieldName == $linkFieldName;
    $bUnique = $pSet->isLookupUnique($field);
    $strLookupWhere = GetLWWhere($field, $pageType, $table);
    $strOrderBy = $pSet->getLookupOrderBy($field);
    if (strlen($strOrderBy)) {
        $strOrderBy = GetFullFieldName($strOrderBy, $lookupTable);
        if ($pSet->isLookupDesc($field)) {
            $strOrderBy .= ' DESC';
        }
    }
    $bDesc = $pSet->isLookupDesc($field);
    $strCategoryFilter = $pSet->getCategoryFilter($field);
    if ($nLookupType == LT_QUERY) {
        $lookupPSet = new ProjectSettings($lookupTable, $pageType);
        $cipherer = new RunnerCipherer($lookupTable, $lookupPSet);
    } else {
        $cipherer = new RunnerCipherer($table, $pSet);
    }
    if ($doCategoryFilter) {
        if ($nLookupType == LT_QUERY) {
            $parentVal = $cipherer->MakeDBValue($strCategoryFilter, $parentVal, "", $lookupTable, true);
        } else {
            $parentVal = make_db_value($pSet->getCategoryControl($field), $parentVal, '', '', $table);
        }
    }
    if ($doValueFilter) {
        if ($pageType != PAGE_SEARCH || $doValueFilterByLinkField) {
            if ($nLookupType == LT_QUERY) {
                $childWhereField = $pSet->getLWLinkField($field, false);
            } else {
                $childWhereField = $pSet->getLWLinkField($field, true);
            }
        } else {
            if ($nLookupType == LT_QUERY) {
                $childWhereField = $pSet->getLWDisplayField($field, false);
            } else {
                $childWhereField = $pSet->getLWDisplayField($field, true);
            }
        }
        if ($nLookupType == LT_QUERY) {
            $childVal = $cipherer->MakeDBValue($childWhereField, $childVal, "", $lookupTable, true);
        } else {
            if ($linkAndDisplaySame) {
                $childVal = make_db_value($field, $childVal, '', '', $table);
            } else {
                $childVal = add_db_quotes($field, $childVal, $table, 200);
            }
        }
    }
    //	build Where clause
    $categoryWhere = "";
    $childWhere = "";
    if ($pSet->useCategory($field) && $doCategoryFilter) {
        $condition = "=" . $parentVal;
        if ($parentVal === "null") {
            $condition = " is null";
        }
        if ($nLookupType == LT_QUERY) {
            $categoryWhere = $cipherer->GetFieldName(AddFieldWrappers($strCategoryFilter), $strCategoryFilter) . $condition;
        } else {
            $categoryWhere = AddFieldWrappers($strCategoryFilter) . $condition;
        }
    }
    if ($doValueFilter) {
        $condition = "=" . $childVal;
        if ($childVal === "null") {
            $condition = " is null";
        }
        if ($nLookupType == LT_QUERY) {
            if ($pageType != PAGE_SEARCH || $pSet->lookupControlType($field) == LCT_LIST || $doValueFilterByLinkField) {
                $childWhere = GetFullFieldName($pSet->getLinkField($field), $lookupTable, false) . $condition;
            } else {
                if (!$pSet->getCustomDisplay($field)) {
                    $childWhere = $cipherer->GetFieldName($lookupPSet->getFullNameField($displayFieldName), $field) . $condition;
                } else {
                    $childWhere = $pSet->getDisplayField($field) . $condition;
                }
            }
        } else {
            if ($pageType != PAGE_SEARCH || $doValueFilterByLinkField) {
                $childWhere = $pSet->getLWLinkField($field, true) . $condition;
            } else {
                $childWhere = $pSet->getLWDisplayField($field, true) . $condition;
            }
        }
    }
    $strWhere = "";
    if ($doWhereFilter && strlen($strLookupWhere)) {
        $strWhere = "(" . $strLookupWhere . ")";
    }
    if (strlen($categoryWhere)) {
        if (strlen($strWhere)) {
            $strWhere .= " AND ";
        }
        $strWhere .= $categoryWhere;
    }
    if (strlen($childWhere)) {
        if (strlen($strWhere)) {
            $strWhere .= " AND ";
        }
        $strWhere .= $childWhere;
    }
    //	build SQL string
    if ($nLookupType == LT_QUERY) {
        $lookupQueryObj = $lookupPSet->getSQLQuery();
        if ($pSet->getCustomDisplay($field)) {
            $lookupQueryObj->AddCustomExpression($displayFieldName, $lookupPSet, $table, $field);
        }
        $lookupQueryObj->ReplaceFieldsWithDummies($lookupPSet->getBinaryFieldsIndices());
        $strWhere = whereAdd($lookupQueryObj->m_where->toSql($lookupQueryObj), $strWhere);
        $LookupSQL = $lookupQueryObj->toSql($strWhere, strlen($strOrderBy) ? ' ORDER BY ' . $strOrderBy : null, null, $oneRecordMode);
    } else {
        $LookupSQL = "SELECT ";
        if ($bUnique && !$oneRecordMode) {
            $LookupSQL .= "DISTINCT ";
        }
        $LookupSQL .= $pSet->getLWLinkField($field);
        if (!$linkAndDisplaySame) {
            $LookupSQL .= "," . $pSet->getLWDisplayField($field);
        }
        if ($addCategoryField && strlen($strCategoryFilter)) {
            $LookupSQL .= "," . AddFieldWrappers($strCategoryFilter);
        }
        $LookupSQL .= " FROM " . AddTableWrappers($lookupTable);
        if (strlen($strWhere)) {
            $LookupSQL .= " WHERE " . $strWhere;
        }
        //	order by clause
        if (strlen($strOrderBy)) {
            $LookupSQL .= " ORDER BY " . AddTableWrappers($lookupTable) . "." . $strOrderBy;
        }
        if ($oneRecordMode) {
            $LookupSQL .= " limit 1";
        }
    }
    return $LookupSQL;
}
예제 #4
0
/**
 * DEPRECATED! Use RunnerPage::_getFieldSQLDecrypt instead
 * Return the full database field original name
 * 
 * @param string	$field
 * @param string	$table The datasource table name
 * @param boolean	$addAs OPTIONAL
 * 
 * @return String
 * @intellisense
 * @deprecated
 */
function GetFullFieldName($field, $table = "", $addAs = true, $connection = null)
{
    global $strTableName, $cman;
    if ($table == "") {
        $table = $strTableName;
    }
    if (!$connection) {
        $connection = $cman->byTable($table);
    }
    $pSet = new ProjectSettings($table);
    $fname = RunnerPage::_getFieldSQL($field, $connection, $pSet);
    if ($pSet->hasEncryptedFields() && !isEncryptionByPHPEnabled()) {
        $cipherer = new RunnerCipherer($table);
        return $cipherer->GetFieldName($fname, $field) . ($cipherer->isFieldEncrypted($field) && $addAs ? " as " . $connection->addFieldWrappers($field) : "");
    }
    return $fname;
}
/**
 * return the full database field original name
 * @intellisense
 */
function GetFullFieldName($field, $table = "", $addAs = true)
{
	if($table == "")
	{
		global $strTableName;
		$table = $strTableName;
	}
	$pSet = new ProjectSettings($table);
	$fname = $pSet->getFullNameField($field);
	if($pSet->hasEncryptedFields() && !isEncryptionByPHPEnabled())
	{
		$cipherer = new RunnerCipherer($table);
		return $cipherer->GetFieldName($fname, $field)
			.($cipherer->isFieldEncrypted($field) && $addAs ? " as ".AddFieldWrappers($field) : "");
	}
	return $fname;
}