changes since pnt2_0_0: ! merged changes for pnt2.0 ! skinDetailsFormStartPart id value no longer converted to label, but still to html replace print $this->getConvert($this->getRequestedObject(), 'id') modified back in: print $this->getReqParam('id', true) - PntObjectSaveAction::checkAccess now PntError if no requested object - PntSite::tryUseGenericHandlerClass documented - PntObjectEditDetailsPage::doScouting no longer moves down if pntEditFeedback == 'copy' committed, tagged webtoko1_1, mcl2_14, pnt2_0_0_1 ---------------------------------------------------------------------------- x ObjectSelectionDetailsReportPage added ! skinAdvancedFilterFormPart added ! skinFilterFormPart.php
includeSkin('AdvancedFilterFormPart') ?> js functions that are in skinAdvancedFilterFormPart removed ! pntxTreePart.js added ! skinTreePart added ! phppeanuts.css added .pntAdvFilterCombine, .pntTreeWidgetDiv, .compSelectDiv, .value1Div, .comparatorDiv, .pntAdvFilterCompare { display: inline; float: left; } .pntAdvFilterCombine { clear: left; } .pntAdvFilterCompare { } #pntAdvancedSearchButtonDiv { clear: both; } ! pntxTreePart.css .pntTreeWidgetDiv { display: inline; float: left; } x PntxAdvancedFilterFormPart::printFilterCompareDivContent, printAdvancedFilterDivContent now prints divs around each widget x PntxTreeWidget::printBody now first does printExTreeInset, then its own pntTreeWidgetDiv (to inline the pntAdvFilterCombine div) x PntFilterFormPart::printComparatorSelectWidgetdoet no longer does setWidthFromOptionsMaxLength (does not work correctly with firefox) bugs PntAdvancedFilterFormPart with mixed paths x PntDialogWidget::initDialogUrlNoId now includes pntFormKey in url ::initialize only sets value and labelValue if (isSet($text->contentLabel) || $nav->isSingleValue()) x PntFormWidget::initialize only sets value if (isSet($text->contentLabel) || $nav->isSingleValue()) x PntSelectWidget::initialize only sets selectedId if (isSet($text->contentLabel) || $nav->isSingleValue()) x PntObjectNavigation::getItemToSetOn returns null if not singleValue tagged pnt2_0_0_2 from webtoko1_2 ---------------------------------------------------------------- - changes from pnt2 (comitted after pnt2_0_0_2) from webtoko: ? ObjectSearchPage::useDefault maakt bladeren door pagina's default zoekresultaat mogelijk - several skins: isBroserIE changes in in Gen::isBrowserIE - skinDetailsFormStartPart id value no longer converted to label, but still to html replace print $this->getConvert($this->getRequestedObject(), 'id') modified back in: print $this->getReqParam('id', true) ! phppeanuts.css added .pntAdvFilterCombine, .pntTreeWidgetDiv, .compSelectDiv, .value1Div, .comparatorDiv, .pntAdvFilterCompare { display: inline; float: left; } .pntAdvFilterCombine { clear: left; } .pntAdvFilterCompare { } #pntAdvancedSearchButtonDiv { clear: both; } ! skinDetailsFormPart now calls calls ObjectEditDetailsPage::printDeleteScript ! general.js pntCollectSelectedParams now checks for params starting with *!@ ! ObjectEditDetailsPage::getDiscardChangesMessage, ::getDeleteConfirmationQuestion toegevoegd ! ObjectEditDetailsDialog::getButton vertaalt 'Copy' from pnt examples: ! pntDialogWidgetDiv removed white-space: nowrap because in IE8 this is inherited by div pntMtoNDialogWidget and white-space: normal does not work there ! skinAdvancedFilterFormPart div pntAdvancedSearchButtonDiv toegevoegd --------------------------------------------- ! skinFilterFormPart, skinAdvancedFilterFormPart added getImagesDir() ?> befote sort.gif - PntObjectNavigation ::getToSettedOn, ::getItemToSetOn adapted to mixed paths ::popAfterSettedOn added (zit in pnt2_0_0_3 - PntSite::guessContextTypeFolder now calls getUiDir - PntTabsPart::printBody now prints div #pntTabTrailer - PntxPropertyPart::printNewButtons now uses Site::getIImagesDir - PntEditDetailsPart::includeOrPrintDetailsTable no longer calls ::printDeleteScript ::printDeleteScript and getDeleteConfirmationQuestion factored back to PntObjectEditDetailsPage - PntObjectEditDetailsPage pntDeleteButtonPressed now asks getDiscardChangesMessage and deletes marked if any - PntxObjectEditWithMultiPage::addActionButtons no longer adds delete marked button (not needed as delete button will delete marked if any) To be processed in language specific version ! ObjectEditDetailsPage::getButton should translate 'Copy' getDiscardChangesMessage added ! ObjectEditDetailsDialog::getButton should translate 'Copy' ! skinDetailsFormPart now calls calls ObjectEditDetailsPage::printDeleteScript ! skinDetailsFormStartPart
removed, gave problems with firefox !phppeanuts.css added .pntTabContent clear: both; ! phppeanuts.css #pntTabTrailer added ! general.js pntCollectSelectedParams now checks for params starting with *!@ comitted from webtoko ------------------------------------------ hier doorgevoerd: - PntxShortlistDialogWidget::initializeSelectWidget bug 'property not found' with multi step paths now uses settedOnItem as start of shortlistPath - PntSortDialog::getFilters now adds filters for sortIds if missing tagged pnt2_0_0_3 from rws rws1_40o15 --------------------------------------------------- To accomodation of inline advanced search: ! general.js pntAjaxProcessXml now calls scaleContent Other: - PntSecurityManager::checkViewProperty for performance reasons no longer retrieves and passes values of multi value properties - PntPropertyPart::getPropertyValueFor now selects values that may be viewed (2do: adapt links not to edit if editing is not allowed) from gow 632: - PntPropertyPart::getInitItemTable now includes property type ::getItemTableColumnPaths now calls getPropertyType, no longer stores $prop tagged pnt2_0_0_4 from rws rws1_40o16 ------------------------------------------------------ merged branches rws1o en pntontw into trunks tagged pnt2_0_0_5 from rws1 rws1_40o16 ------------------------------------------------------------- To accomodate Historical Data Managment extension: - PntSqlSort::over now throws exception if prop not found - PntNavigation::getInstance now calls newNavigation on itemType id method exists - PntObject::newNavigation added, returns new PntObjectNavigation - PntMenuPart::printMenuLine factored out ::getMenuLineParams - PntMtoNDialogWidget::initialize now sets value if text>>contentLabel === null - PntGen::dt_add, dt_largerOrNone now static - PntClassDescriptor::getVerifyOnDelete added, allways returns false (delete is not supported) - PntNavigation::collect_path no longer calls _getInstance method (is depricated) tagged pnt2_0_0_6 from rws1_43_o5 ----------------------------------------------------------- while debugging Fit/shelf: - PntGen::getBaseUrl bug fixed: / in queryString counted to find end of base url pntMember_exists bug fixed: $memberName param was missing 29-9-2011 Changes from bgz branche gow4_4_0_pnt2: - PntSqlSort::setTableAlias added, sets alias on all components - PntSelectWidget now converts value-options according to property settings ::setOptionsFromValues parameter for converter added ::initialize now passes converter from formText to ::setOptionsFromValues - PntxFilterTreePart::getFilters now only includes properties that are allowed for viewing by the securitymanager ::includeReferenceFilter replaced by ::includeFilter - PntIndexPage added support for classes search and index - PntObject::getOid() moved from PntDbObject ::getClassDir now by default returns null ! local/skins/skinIndex.php added ! phppeanuts.css .pntTabContent clear: both; 29-9-2011 Changes from bgz branche vms2_745: - PntWidgetFactory disabeling of Date- en HTMLWidget moved from ::getDetailsFormWidget to specifiec widget getters - api docs added: PntPage::getPart, PntMultiPropsPart::getPropertyPart - PntObjectIndexPage, PntObjectSearchPage::ajaxPrintUpdates was missing, added other improvements: - PntIndexPage::getRealDomainDir, ::readDir api docs added: - PntGen - PntValueValidator - PntRequestHnadler - PntSite - PntPage (not finished) 30-9-2011 17:12 Changes from bgz branche vms2_745: ajax support extended for subpart update, adapted later: - PntPagePart::ajaxPrintUpdates added $prefix parameter, now prints Body instead of partName and passes partId prefixed - PntPage::ajaxShouldUpdate added params $partName, $extraParam ::getAjaxUpdateSubPartIds added ::getAjaxUpdatePartIds now caches partIds ::ajaxPrintPartUpdate documentation added ! skinAjaxUpdateElement now passes $extraParam implemented for Pnt(Edit)DetailsPage&Part: - PntDetailsPart::ajaxPrintUpdates Includes DetailsRow, FormLabel, DetailsExtra, FormWidget into possible ajax updates, passes prefixed partId and formKey ::printDetailsRow, ::printSkinDetailsRow ids added to cells ::ajaxShouldUpdate now returns for partNmae is one of DetailsRow, FormLabel, DetailsExtra, FormWidget wheather there is a formText for the extra param as formKey - PntObjectDetailsPage::ajaxPrintUpdates now delegates to DetailsPart - PntObjectEditDetailsPage::ajaxPrintUpdates now delegates to EditDetailsPart - PntTextWidget::printBody bug fixed: id was missing - PntPage::imp_printPart now passes extra arguments to print method ::ajaxPrintUpdates now also calls ajaxPrintPartUpdate for 'Body' - PntObjectIndexPage, PntObjectSearchPage, PntxTreePart, PntAdvancedFilterFormPart, PntButtonsPanel, PntObjectPropertyPage ::ajaxPrintUpdates preFix param added, now passes prefixed partId -------------------------------------------------- - PntGen::toString bug fixed: max was passed to implode, should be to ::assocsToStrings bug fixed: .. if no max ::getRelativePath bug fixed: first letter was lost - PntMultiPropsPart::getPropertyPart api doc added ---------------------------------------- To accomodate Historical Data Management extension: ! PntObjectVerifyDeleteDialog now subclassed from ObjectVerifyDeletePage x PntObjectVerifyDeletePage x table data link script now works for mixed items x extra column for validFrom - PntDbObject::save only updates row if fieldmap holds any fields to update x PntDbObject::getDeleteErrorMessages factored out ::getOnDeleteProps x PntObjectDeleteAction::deleteObject now sets >>objectLabel for use in ::getOKMessage ! ObjectDeleteAction::getOKMessage needs to be adapted x PntSortDialogPart::getFilters no longer tries to add Filter if path empty x PntObjectEditDetailsPart::getEditDetailsPart factored out detailsPartName; x PntEditDetailsPart::getFormWidget factored out getWigetFactory x PntObjectSaveAction::getFailueHandler renamed to getFailureHandler >>failueHandler renamed to failureHandler x PntxGridPart::printItemCellContent factored out ::printFormWidget, ::printReadonlyCellContent + PntFormNavValue::getError converter error now overrides validation error x PntObjectSaveAction::processSubsaveActions niet voor copy ! pntxGridPart.js now warns that grids will not be processed x PntFormNavValue ::getContentWith factored out ::getContentFrom ::getContentFrom now without side effects ::setConvertMarkup now sets oldContent if not set (not active: check for derived value change conflict) ::commit only sets value on item if content differs from oldContent, refetches oldContent Adapt copying function to accomodate Historical Data Management extension: + PntObjectSaveAction::initialize factored out ::initForCopy tagged pnto pnt2_0_0_7 from rws1o rws1_43_o7 ---------------------------------------------------- PntxGridPart and support x Grids icon refresh ! pntGridPart.js PntGridPart.prototype.initCopies factored out PntGridPart.prototype.detectFormField - necessarey for verifyDeleteCallback inherited from EditDetailsPage ! skinPropertyPagePart now calls ::printDeleteScript() - first validate and commit all subsaveactions, then get all saveErrorMessage x PntObjectSaveAction::preprocessObject factored out ::convertCommitAndCheck ::processSubsaveActions first convertCommitAndChecks all subactions - dependent in grid may have been deleted when saving requestedObject x PntObjectVerifyDeletePage now prints hidden DetailsFields for subsaveActions - updating copied dependents in same action may overwrite derived changes in domain model x PntObjectSaveAction::processSubsaveActions not for copy x pntxGridPart.js warns that grids will not be processed (!) allways warns even if grids are not modified (copying with commit of grids has been swithed off) tagged pnto pnt2_0_0_8 from rws1o rws3_0 --------------------------------------------------- debugging: x PntErrorPage::ajaxShouldUpdate adapted to PntPage::ajaxShouldUpdate x PntSelectWidget use of selectedId was inconsistent, resulting in double html-encoding of value for options from values Global filtering: Accomidating Historical Data Management extension . generic and Navigational Query DSL x PntSite::getGlobalFilterFor($type, $persistent) returns first global filter that applies to the type ::getFlobalOptionsFilter($type, $propName) returns getGlobalFilterFor($type) x PntSqlSpec::setDescription added ::getDescription description set now overrides ::retrieve retieves the specified peanuts ::retrieveFirst retrieves the first from the specified peanuts, or null ::retrieveOne retrieves a single peanut or null, throws exception if more then one peanut specified ::sortBy added, returns PntSqlSort with no filter and specified sort spec x PntSqlFilter ::getInstance added voluntary arguments for by ::appliesTo added, returns wheater the filter applies for the type, if true is passed it must apply using ::getSql ::getDescription description set now overrides ::andWhere added, returns new PntSqlCombiFilter with $this and the supplied/described filter ::orWhere added, like andWhere, but with combinator 'OR' ::by added, sets comparatorId and value ::compare added, returns int for sorting ::sortBy added, returns PntSqlSort with filter $this and specified sort spec x PntSqlCombiFilter ::addPart now adds by numeric key ::appliesTo all parts must apply ::getDescription description set now overrides ::combi added, adds supplied or specified filter ::andWhere added, returns combined filter for AND, may modify $this ::orWhere added, returns combined filter for OR, may modify $this + PntSqlJoinFilter::appliesTo added, both the filter and next must apply ::getDescription description set now overrides ::evaluate now supports evaluation without next ::addJoinTableAndConditionByTableAlias factored out ::addTable_cond_by now table name is allways added to the alias now if !getIdColumnIsOnAlias joins both the table of the id prop and if different, the table of the nextStep + PntSqlSort::sortBy calls ::addSortSpec, returns $this ::compare added, returns int for sorting ::asort added, sorts without renumbering the keys ::sort added, sorts while renumbering the keys + PntClassDescriptor::getPeanutsAccordingTo added, selects and asorts by a PntSqlSpec + PntDbClassDescriptor::getPeanutsAccordingTo added, retrieves or selects and asorts by a PntSqlSpec ! not yet implemented: retrieving by persistent filterparts and sort, selecting and sorting by non-persitent ones + PntDbObject::getDeleteErrorMessages does not use eventual global filter when retrieving values ::recurseCopyFrom does not use eventual global filter when retrieving values ::recurseDelete does not use eventual global filter when retrieving values ::addVerifyOnDeleteValues does not use eventual global filter when retrieving values ! if values of single value properties are to be filtered too, copying ad delete functionality must be adapted!! . usage by pages problem: both filters showed up zichtbaar ! x includes/skinFilterPart.php added ! x includes/skinDetailsTablePart replaced ::printFilterPart call by a single row and ::getFilterPartString call x PntPage::printFilterPart removed, so that skinFilterPart will be used. ::getFilterPartString now uses PntSite::getGlobalFilterFor x PntObjectSearchPage ::printFilterPart now includes skinFilterPart x PntFilterFormPart::getImplicitCombiFilterDefault added, returns whole->getGlobalCombiFilter ::getImplicitCombiFilter now calls ::getImplicitCombiFilterDefault ::getCombinedFilter now calls ::getImplicitCombiFilter x PntObjectIndexPage::getGlobalCombiFilter now only adds global filters that apply to the type x PntDetailsPart::getFilterPartString overridden to show all global filters x PntPropertyPage::getFilterPartString overridden to show filter applicable to the properties type + PntObjectIndexPage::getObject now uses eventual global filter, ! no longer uses pagination if global filter does not apply to persistence. This may be slow if many items exist ::getAllItemsSize now uses eventual global filter . usage by property descriptors + PntMultiValuePropertyDescriptor ::deriveValueFor added $filter param, now applies filter, no longer calls ::deriveUsingPathFor, no longer checks if (!class_exists($className)) (is already done by Gen::tryIncludeClass) ::deriveUsingPathFor now depricated + PntObjectNavigtion::getWayBack returns the navigation back over the path of twins + MclValidVersionsPropertyDescriptor::deriveValueFor + PntMultiValuePropertyDescriptor::getMyFilter optimizes first step away if single value with idProp + PntProperty::getValueFor added $filter parameter, now passes filter to getter and derivation + PntDerivedPropertyDescriptor::deriveValueFor added $filter param (ignoored), uses unfiltered options no longer checks if (!class_exists($className)) (is already done by Gen::tryIncludeClass) ::getTwin now checks the type when selecting ::isValueInOptionsOf $filter=false param added, eventually applies filter . usage by property getters (ook PntMultiValueProperty::deriveValueFor refactoren zodat gemakkelijk getters te maken) + PntObject::get added parameter $filter=true, replaced E_USER_ERROR by PntReflectionError, added apidoc getOptions added parameter $filter=true . usage for default options + PntObject::getOptions added param $filter=true x PntPropertyDescriptor::getOptionsFor added param $filter=true, uses optionsFilter if available ::getGlobalOptionsFilter added ::isValueInOptionsOf $filter=false param added, eventually applies filter x PntWidgetFactory::getDetailsFormWidget now passes eventual optionsFilter to getPeanutsCount if it applies to persistence x PntDbClassDescriptor::getPeanutsCount added param $filter ! may be slow if $filter does not apply to persistence x PntSelectWidget::setOptionsFromObjects now adds object with selectedId to the options if not already there + PntSelectWidget::setOptionsFromValues now adds selectedId to the options if not already there x PntObjectDialog::getGlobalFilter added, uses global options filter ! if opened from ShortlistWidget passes name of id prop instead of name of prop ! PntxShortlistDialogWidget::initializeSelectWidget for now we assume the shortlistPath already gets filtered tagged pnto pnt2_0_0_9, from rws1o rws3_1 ----------------------------------------------------------------------- button Update did not work in CMS when pntOriginalId was not defined ! general.js pntDetailsSave now checks pntOriginalId to exist in webtoko from rws1o: ! includes/skinFilterPart.php ! includes/skinDetailsTablePart.php printFilterPart vervangen door printPart('FilterPart') overgenomen van phppeanuts.org (from/because of phpPeannuts 2.0.0a) x PntGen::includeClass fixed bug: missing slash after classes folder name x PntDerivedPropertyDescriptor::isValueInOptionsOf now includes type class, calls getPeanutWithId without underscore x PntSelectWidget added field selectedId Bug fixed: ReportPage did no longer use reportColumnPaths (overgenomen van webtoko dd 19-5-2012) x PntObjectReportPage::isLayoutReport added, returs true x PntMultiPropsPart::isLayoutReport added, delegates to whole x PntPropertyPart::getItemTableColumnPaths now uses getReportColumnPaths if isLayoutReport x PntDbClassDescriptor::getPersistentRelationPropertyDescriptors now requires the properties to be persistent x accomodation for historical data extension x added support for StringConversion to infiniteDate: null values voor validUai zijn te lastig dus moet er 9999-12-31 worden gebruikt als oneindig wordt bedoeld dat kan door de stringconversie worden geconverteerd. voordeel is dat het dan ook in searchpages wordt geconverteerd. nadeel is dat het ook in andere datumvelden terecht dreigt te komen. StringConversie van/naar infinity als emptyToInfinity x PntValueValidator::getInfinity(type) added ::getInfiniteDate added, returns '9999-12-31' x PntStringConverter>>emptyToInfinity added, default false ::convert converts empty to infinite if emptyToInfinity is true ::labelFromDate now returns empty string if $value == ValueValidator::getInfiniteDate() x PntSqlJoinFilter::getValueProp added ::getValueType now calls ::getValueProp ::setNext now adds navigation of next to its own navigation if its own navigation is present x PntSqlFilter ::getValueProp added ::initConverter calls StringConverter::initFromProp if valueProp not null (wordt gebruikt door PntFilterFormPart::initFilter) + navigations x PntObject::newNavigation added params $key, $itemType, sets these on new nav. includes and sets stepResultType, calls newNavigationOver on stepResultType if method exists, otherwise instantiates PntObjectNavigation + PntEvaluation, PntMethodInvocation ::evaluate now with 3 extra arguments, passes them to fucntion call x PntNavigation now splits path, passes $key, $itemType to newNavigation or sets them ::setNextPath added + ::evaluate now with 3 extra arguments, passes them to next step ::getStepResultType, ::setStepResultType added x PntObjectNavigation::::setNextPath added + ::collectAll now with 3 extra arguments, passes them to next step ::getStepResultType removed (stepResultType must be set on instantiation now) ::getPropIncludeType added + PntSqlSort::overProp now calls PntObjectNavigation::getInstance x PntXmlNavText::setPath creates new navigation (to avoid the reuse the wrong type of navigation) + PntMultiValuePropertyDescriptor::deriveValueNoCache now passes $filter to ::evaluate + PntxShortlistDialogWidget::initializeSelectWidget now passes false to collectAll to prevent global filtering x filtering x PntSqlFilter::getInstanceForNav now calls PntObjectNavigation::newJoinFilter if id prop exists ::__clone added, clones navigation if present ::instanceFromPersistArray no longer limited to known classes (! class must be included beforehand) x PntObjectNavigation::newJoinFilter added, returns instance of PntSqlJoinFilter x PntDbClassDesctriptor::addReferenceFilters now calls PntNavigation::getInstance x PntxFilterTreePart::addReferenceFilter now calls PntNavigation::getInstance x PntSqlJoinFilter::instanceFromPersistArray removed x PntSqlFilter::ignoreGlobalFilter added, does nothing ::compare now checks nav to be single value x PntSqlJoinFilter ::getSubQueryTemplate now returns template for nested subquery if isSet($this->next) (not used) ::generateSql, ::mergeTemplate added (not used) ::addJoinTableAndConditionByTableAlias deleted ::generateSqlForJoins, ::initJoinData, ::initMoreJoinData, ::initTableJoinData, ::initDefaultNext, ::getJoin added ::getIdColumnIsOnAlias, ::setIdColumnIsOnAlias now use member foreignKeyIsOnItemTable ::getJoinCondition, ::setJoinCondition deleted, member $joinCondition deleted ::getIdPropertyDescriptor now sets $this->foreignKeyIsOnItemTable instead of idColumnIsOnAlias ::getItemTableName now uses $this->foreignKeyIsOnItemTable instead of idColumnIsOnAlias ::ignoreGlobalFilter added, delegates to next x PntSqlCombiFitler::generateSql added (not used) ::generateSqlForJoins added x PntSqlSort ::getSqlForJoin, ::generateSqlForJoins added, returns join clauses x PntSqlSpec::getSqlForJoin now calls ::generateSqlForJoins ::generateSqlForJoins added, returns emtpy string x PntDbClassDescriptor::getPeanuts now uses ::getPeanutsAccordingTo ::getPeanutsWith now uses ::getExtraSelectExpressions x PntDao::addSqlFromSpec now uses ::getExtraSelectExpressions x PntMultiValuePropertyDescriptor::deriveValueNoCache now calls ::ignoreGlobalFilter x sorting x PntSqlJoinFilter ::getSql factored out ::getExtraConditionSql ::getSortSelectExpr, ::getSortSubSelect, ::isPreferredFilter added x PntSqlSort::getExtraSelectExpressions added, sets >>sortUsingJoins to false ::getSelectExpression added ::getOrderBySql now orders by extra select expressions if not >>sortUsingJoins x support for Rich Edit controls extension + PntPropertyDescriptor::primitiveTypes added 'html' x PntStringConverter::convert added handling for html type ::toLabel added handling for html type, ::fromRequestData, ::sanitizeString, ::sanitizeHtml added ::fromHtml removed ::toHtml no longer does htmlEntities if type is html x PntValueValidator::validate added html x PntObjectEditDetailsPage::printExtraHeaders added x PntSite::sanitize depricated, now calls PntStringConverter::sanitizeString x PntXmlTextPart::getContentLabelWith factored converter initialization out to ::initConverter ::getConverterDefault now calls ::initConverter ::setConverter now calls ::initConverter ::setRequestString added, uses PntStringConverter::fromRequestData x PntXmlNavText::getDecimalPrecision added, gets it from the navigation ::initConverter added, uses initFromProp with the last property from the navigation ::getContentWith removed initialisation of >>decimalPrecision x PntFormNavValue::initConverter added, uses property from initProp($nav->getItemType()) x PntRequestHandler::getRequestParam undepricated, now strips slashes if get_magic_quotes_gpc ::getReqParam now calls PntStringConverter::fromRequestData ::getFormTexts now uses ::setRequestString on the formText object boolean options gave 0 instead of 'no' if that was the current value x PntSelectWidget::initialize uses ::getContentLabelWith for getting id if $settedProp->isTypePrimitive() x PntxGridPart::addSubsaveAction now returns null and does not add a subsaveAction if item does not exist ::getSubsaveActions no longer tries to add non-existent item from requestData x PntObjectSaveAction::getFailureHandler no longer sets $this->object to original tagged pnt2_0_0_10 from rws1o rws3_3 ----------------------------------------------------------------- because of testing in webtoko en phppeanuts.org - PntIdentifiedOption added members $id, $label to prevent notifications if instantiated without arguments to init property descriptors - PntStringConverter::getLanguageId added. default is "en" committed, not tagged -------------------------------- to prevent attack through register_globals: - Gen::includeClass and tryIncludeClass now use $cfgCommonClassDirs as object - Site now allways sets and uses $cfgCommonClassDirs as object - unit tests now use $cfgCommonClassDirs as object - testCaseDbPolymorphic corrected multiprops x tested all Pnt testcases comitted, tagged pnt2_0_0_12 from webtoko1_4, also in pnt 2.0.0a ----------------------------------------------------------- use sanitized request parameters: - PntRequestHandler::getRequestParam bug solved: did return '' if no param - PntObjectSaveAction::initialize only calls getSubsaveActions on failureHandler if it exists comitted, tagged pnt2_0_0_13 from webtoko -------------------------------------------------------- retrieved changes from webtoko: other done when making security improvements + PntObjectDetailsPage, PntObjectEditDetailsPage::ajaxPrintUpdates now calls parent implementation + PntObjectSelectionDetailsReportPage::getButtonsList now only returns a sinlge row of buttons + PntObjectPropertyPage::getInformation now calls ::getEventualItemNotFoundMessage + PntObjectTablePart::printRow now uses itemHlColor x PntMtoNPropertyPart::printRows now uses itemHlColor x PntMtoNSerchPage::getInitItemTable now sets handler printItemSelectCell instead of printRows ::printRows deleted ::printItemActionCell renamed to ::printItemSelectCell security improvements x PntIndexPage removed methods for automatic listing of Search- and Index pages MySql api is not recomended for new code - Make PntPdoDao the default driver of peanuts ! QueryHandler now extends PntPdoDao ! scriptMakeSettings to be adapted for usage of PntPdoDao x PntPdoDao transaction methods now return depending on return value of tranasction call x PntMySqlDao::addFieldPropsTo_table, ::addFieldPropTo_row, ::getPropertyType moved to PntDao Prevent PHP session id, cookies, user & db passwords and sensitive data show up in the walkbacks and logs ! skinAdvancedFilterFormPart, skinFilterFormPart, skinMtoNFilterFormPart now uses POST + PntSite::__construct no longer includes cookies in $this->requestData + PntErrorHandler::logError factored out ::getRequestData ::printDebugInfo now uses ::getRequestData ::getRequestData now allways removes session id, only uses POST when isDevelopment ::truncateBackTrace now removes arguments of connect methods and PDO constructor Validation/sanitation of all keys, cookies, http header variables ! HttpValidator added + PntSite added serverVars; cookies; funkyAlias = 'index_php' ::initHttpData added, sets requestData, serverVars and cookies after validation ::__construct now lets ::initHttpData set $this->requestData after ::loadSettings ::createObjects moved useClass ValueValidator to ::importLibraries moved useClass StringConverter to ::initConverter moved call to ::initConverter to ::initHttpData ::getServerValue added, returns validated or eventually sanitized value from $_SERVER or null if not present or sanitation failed ::getCookie added, returns validated or eventually sanitized value from $_COOKIE or null if not present or sanitation failed + PntRequestHandler::getRequestParam no longer strips slashes if magic_quotes_gpc (is already done by ::getFunkyRequestData) + PntSessionBasedScout::getReferrerId now uses validated server value ::getFootprintUri no longer needs to strip $_COOKIE keys from $url x PntErrorHandler::logError continues to use $_SERVER ::isDevelopment only compares with $_SERVER['HTTP_HOST'] x PntGen::isBrowserIE only matches pattern to $_SERVER['HTTP_USER_AGENT'] x ::getRelativePath only uses length from a piece of $_SERVER['SCRIPT_FILENAME'] + PntxSessionAuthenticator::addRequestInvariants now uses validated server value ::requestInvariantsEqual now uses validated server value x ::isProtocolOk only compares with $_SERVER['HTTPS'] + PntSessionAuthenticator::getAuthCookie now uses validated cookie from $site x PntStringConverter::convertToNumber no longer allows mess after valid number, returns int if decimalPrecision === 0 Facilitate proper string encoding - PntStringConverter>>html_version_ent added. default is 'ENT_HTML401' >>labelCharset added, default is null ::getLabelCharset added, defaults to ValueValidator::getInternalCharset() ::__construct added, calls setHtml_version_ent ::setHtml_version_ent added, sets html_version_flag to constant($this->html_version_ent) if ENT_HTML401 exists ::toJsLiteral added ::urlEncode added ::toHtml now uses htmlspecialchars, with parameters ENT_QUOTES | $this->html_version_flag, $this->getLabelCharset() and uses nl2br with second param depending on html_version_ent >>asId added for conversion as id ::initFromProp now sets >>asId ::labelFromNumber no longer adds thousends separators if >>asId - PntRequestHandler::getRequestedObject now converts id fromLabel, throws PntError on conversion error - PntObjectDialog::getRequestedObjectDefault now converts id fromLabel, throws PntError on conversion error - PntMarkedItemsCollector::getMarkedObjects now converts id fromLabel, throws PntError on conversion error - PntxTreePart::__construct now initializes >>cnv ::getIdLabel added, now converts id toLabel ::printBranche now calls getIdLabel ::printTreeItem now calls getIdLabel ::getItemVarName now html-encodes id - PntPropertyDescriptor::getHoldsId added, returns wheather the property holds an id - PntSelectWidget::initialize now converts ids toLabel ::setOptionsFromObjects now inits converter, passes id property descriptor to addOptionFromObject ::addOptionFromObject now now converts ids toLabel, added param $idProp - PntDialogWidget::initialize now converts value toLabel and html - PntValueValidator::getInternalCharset added, returns 'ISO-8859-1' (to be overridden on ValueValidatr for diferent charset) - PntPage::printHeaders now sets content-type: text/html; charset= $this->getConverter()->getLabelCharset() - PntStringConverterTest added tests for - PntGen::getBaseUrl now requires param $serverVars - PntSite::getBaseUrl now passes serverVars ::getFunkyRequestData $alias now optional, now supports ordinary query string combined with funky url to override data from funky part ::getAppName added ::buildUrl added ! added accept-charset attribute to: skinDetailsFormStartPart, skinAdvancedFilterFormPart, skinDatabase, skinFilterFormPart, skinGlobalFilterFormPart, skinIndexPart, skinIndexReportPart, skinLoginPart, skinMtoNFilterFormPart, skinSearchDialogPart, skinSelectionReportPart skinSelectPart, skinSortDialogPart, project/skinMedewerkerUrenFilterPart project/skinUrenImportPagePart.php ! scripts/general.js pntCollectSelectedParams now uri-component-encodes param names Improve CSRF protection: Actions must require POST + PntAction::checkRequestMethod added, throws exception if REQUEST_METHOD != POST ::checkActionTicket now calls ::checkRequestMethod Encode variable output properly + PntRequestHandler::queryStringFrom now uses PntStringConverter::urlEncode ::redirectRequest now uses PntStringConverter::urlEncode ::getThisPntHandlerName now checks pntHandler to be alphaNumeric x PntPage::getFootprintId now casts to int ::getPart no longer uses eval, number of arguments limited to 5 ::addContextButtonTo now escapes contextHref as jsLiteral ::getDetailsHref now expects appName instead of appDir, uses buildUrl ::getTargetAppName added ! ::getLinkDirFromNav depricated ::printSetTitle now uses toJsLiteral ::getMultiValuePropertyButtonScript now uses ::buildUrl x PntSite::getContextHref now uses PntSite::buildUrl, ::getAppName ! ::getUiDir depricated ::guessContextTypeFolder now returns domain folder name x PntMenuPart::getUrl now uses PntSite::buildUrl ::getMenuLineParams now also encodes url in javascript, cssClass x PntButtonPart::printButton now encodes script as html x PntTablePart now html-encodes label letter in printAnchorFor ::getCellOnClickParam now encodes itemKey as jsLiteral ::getDir now uses getAppName ::printItemCells now encodes $cssClass as html x PntObjectIndexPage::printDeleteScript now encodes no items marked message as jsLiteral ::getPageButtonScript now uses PntSite::buildUrl and encodes it as jsLiteral ::getButtonsList now escapes tableId as jsLiteral, now uses PntSite::buildUrl and encodes it as jsLiteral x PntFilterFormPart>>extraSortParams must now be an array ::printFilterSelectWidget now passes type 'PntSqlFilter' to widget; no longer sets 'All ..' as selectedId ::getNadvancedFilters now casts to int ::getErrorInfo now encodes as HTML x PntObjectSearchPage::getHeaderSortParams now escapes path as jsLiteral x PntObjectDialog::getNewItemButton now uses ::buildUrl, ::toJsLiteral, passes pntFormKey ::getCellOnClickParam now escapes both js literal strings x PntObjectSortDialog::printOKScript now escapes pathAfterEmptyMessage as jsLiteral ::getPathAfterEmptyMessage no longer checks dsOptLbl to be alphaNumeric x PntObjectSelectionReportPage::getTotalCells now uses navigation::getLastProp + PntObjectVerifyDeleteDialog::printReturnFuncCall now escapes firstOid as jsLiteral ::printSelectScriptPart now escapes openerLocationChangedMessage as jsLiteral, now also url-encodes pntType ::getCellOnClickParam now uses getAppName + PntObjectVerifyDeletePage::printHiddenField now encodes formKey as html ::printDeleteErrorInformation now encodes error messages as html ::printSelectScriptPart now also url-encodes pntType ::getCellOnClickParam now escapes itemKey as jsLiteral x PntObjectDetailsPage::handleRequest now uses getAppName ::addReportButtons factored out from ::getButtonsList, now uses buildUrl ::addDetailsButton factored out from ::getButtonsList, now uses buildUrl x PntDetailsPart::includeOrPrintDetailsTable no longer double-checks type to be alphanumeric ::getDetailsLinkFromNavText now passes appName to ::getDetailsHref, uses StringConverter::urlEncode ::printDetailsExtra now encodes formKey as HTML ::printFormLabel now encodes formKey as HTML x PntObjectEditDetailsPage::addReportButtons removed (are now inherited) ::printDeleteScript now jsEncodes literal strings and casts dialogSizes to int ::printDeleteMarkedScript now jsEncodes literal strings and casts dialogSizes to int x PntEditDetailsPart::getDetailsLinkFromNavText now passes appName to ::getDetailsHref ::printOnUnloadScript now escapes onUnload message as jsLiteral ::getDetailsLinkFromNavText now escapes hrefNoId and formKey as jsLiteral ::printDetailsExtra now encodes formKey as HTML x PntObjectEditDetailsDialog::getReplyScriptPiece now uses pntSetDialogResult, no longer uses formKey in function name ::printReturnFuncName now returns pntSetDialogResult ::printReturnAndCloseScript now passes formKey, now escapes return function parameters as jsLiteral, + PntFormWidget::printFormKey now encodes formKey as html x PntDialogWidget::initialize now uses ::getTargetAppName ::getDialogUrlNoId added, ::printDialogUrlNoId depricated ::printOnClickExtraParams now uses getDialogUrlNoId and escapes it as jsLiteral ::printDialogUrlNoId now uses getDialogUrlNoId and escapes it as jsLiteral ::printOnClick now escapes formKey as jsLiteral ::printClearButton now escapes formKey and labelKey as jsLiteral ::printLabelKey now encodes labelKey as HTML x PntTextAreaWidget::setWidth now casts to int + PntMtoNDialogWidget::::initialize now uses ::buildUrl ::printBody now uses ::printFormKey instead of ::printLabelKey, no longer prints script, now uses pntOpenDialogFor, now encodes formKey as jsLiteral ::printLabelKey, ::setLabelKey removed ::initialize no longer sets labelKey x PntObjectPropertyPage::getButtonsList now calls ::addDetailsButton; ::getItemTable instead of ::getInitItemTable and uses ::toJsLiteral x PntPropertyPart::getNewButtonUrl now uses ::getAppName, ::buildUrl x PntObjectMtoNPropertyPage::printScaleContentScripts now urlEncodes propName and suggested value, no longer includes them if no value to suggest ::getNewItemButton now uses ::getAppName, ::buildUrl, ::toJsLiteral, now passes pntFormKey ::getNewItemDialogSize now calls ::getPropertyClassDir on the PropertyPart ::getPropertyClassDir removed ::printBooleanProps now encodes formKey as HTML x PntMtoNPropertyPart::printSearchPageUrl now uses getAppName, ::buildUrl ::printAddRemoveScriptPart now uses ::toJsLiteral x PntObjectMtoNSearchPage::getCellOnClickParam, ::printItemSelectCell now escapes both js literal strings + PntObjectMtoNDialog::printSaveScript now uses ::toJsLiteral to escape labelItemSeparator + PntObjectDeleteMarkedAction now uses redirectRequest + PntDatabaseConnection added charset, ::getCharset, setCharset for use with PntMySqlDao. (with PntPdoDao, use setDsnBody with for example charset=latin1 ) + PntMySqlDao::connect now sets character set to connection->getCharset() + PntSqlLiteDao::connect now triggers warning if connection charset = utf8 + PntxLoginPage::setRefreshHeader now casts $wait param to int + PntxGridPart::printReadonlyCellContent now passes appName to ::getDetailsHref ::addSubsaveAction now uses getAppName + PntxPropertyPart::printMultiPropIcons now uses ::toJsLiteral to excape itemTableId + PntTabsPart::processPartArgumentsConvertTabsSpec corrected, tabName now allways checkedAlphaNumeric + PntxLoginPage::setRefreshHeader now uses StringConverter::urlEncode ! $this->pntHandlerName now encoded as html in: skinFilterFormPart, skinAdvancedFilterFormPart, skinMtoNFilterFormPart ! standard skinAdvancedFilterFormPart added, skinFilterFormPart now to be used with standard FilterFormPart ! skinHeaderSelectionDetailsReporttPage now encodes label in pntPageLabel as html ! PntSortableTablePart deleted ! general.js tdlGetHref now urlEncodes all from dirTypeAndContext, expects tableId dir piece without trailing slash pntSelectionReport expects tableId dir piece without trailing slash pntAjaxUpdateElement no longer does pntAjaxCopyAttributes pntAjaxCopyAttributes removed pntAjaxRequest no longer allows urls to refer outside document host pntSetMtoNDialogResult added, called by PntObjectMtoNDialog ! makeSettings for PntMysqlDao should specify charset through ::setDsnBody, for PntMysqlDao through ::setCharset --------------------------------------------------------- - PntGen::isBrowserIE now checks $_SERVER['HTTP_USER_AGENT'] to be set comitted --------------------------- pntExamples processed changes from webtoko x PntGen version now 2.1.beta1 + PntSite::getMaxTicketDiff lowered to 20 x PntError::__construct no longer passes $code to parent __construct because that requires numeric codes instead it sets $this->code itself x PntMultiValuePropertyDescriptor::deriveValueNoCache now ignores filter x PntFilterFormPart::getFilterResult now joins eventual additional tables if $clsDes->polymorphismPropName x PntObjectVerifyDeleteDialog::getMinWindowSize added x PntObjectMtoNPropertyPage $nmsfLeftSubst=410; x PntObjectMtoNDialog added $itdHeightSubst=108; x PntObjectDialog::getGlobalFilter now returns null ::getMinWindowSize now 700 wide added $advancedFilterOverlayLeft = 5; x PntObjectIndexPage::getAllItemsSize now calls ::getGlobalFilter ::getGlobalFilter now returns null x PntObjectSearchPage:: added $advancedFilterOverlayLeft = 120; ! skinFilterFormPart advancedFilterOverlay style left now prints $this->whole->advancedFilterOverlayLeft ! TablePart now includes PntTablePart instead of PntSortableTablePart ! general.js pntSelectionReport expects tableId dir piece without trailing slash pntSetMtoNDialogResult now sets firstChild.nodeValue instead of innerHtml pntVerifyAndDelete now uriEncodes paramname ! skinMtoNPropertyPart searchframe widht: 396px comitted --------------------------------------------------- - PntDbClassDescriptor::getDescribedClassInstanceForData now requires names of polymorphic subclasses to be allowed explicitly as keys in polyClassesAllowed ::setPolyClassesAllowed, ::checkPolyClassName added - PntStringConverter::convert, ::convertToObject now sets $this->error and returns null if invalid type ::convertToDate, ::convertToTime, ::convertToTimestamp now return null if invalid ::toHtml now uses preg_replace instead of nl2br because of nl2br version parameter count incompatibily - PntMutliValuePropertyDescriptor::deriveValueNoCache cache bug solved - PntGen::version now 2.1.rc1 ! pntUnit no longer calls depricated connect method comitted ---------------------------------------------------- copyright notices updated committed ---------------------------------- - PntPropertyDescriptor::getOptionsFor ignores options filter - PntMysqlDao::connect now checks mysql_set_charset to exist, and checks its result - PntDatabaseConnection::setCharset now thows PntError if mysql_set_charset does not exist - PntSqlFilter now throws PntReflectionError if navigation is PntNavigation - PntHttpValidator no longer uses PHP_INT_MAX (not available before PHP 5.0.5 - PntNavigation::getInstance replaced method_exists by is_subclassOr($itemType, 'PntObject') (did not work on old PHP 5.0 ) - PntObject::newNavigation now uses Gen::class_hasMethod committed ----------------------------------------- - PntObjectVerifyDeletePage $errorMessages replaced var by public - PntMultiValuePropertyDescriptor::deriveValueNoCache bug with $name and cache repaired committed, uploaded ---------------------------------------- - PntObjectPropertyPage::printDeleteMarkedCallback added ::checkAccess now includes property type class - PntObjectEditDetailsPage::printDeleteMarkedCallback added ::printDeleteMarkedScript now calls ::printDeleteMarkedCallback ! change processed in skinFilterFormPart - PntObject::newNavigation now checks itemType to be a class comitted, copied to upload, uploaded to examples ---------------------------------------- - PntMultiValuePropertyDescriptor::deriveUsingPathFor now includes PntSqlJoinFilter