1.3.beta3 colliding changes: none Added new Comparator 'NOT LIKE' to SqlFilters and Searchpage advanced search - PntComparator . new property: preceder . added preceder to conctructor . new instance 'NOT LIKE' with preceder 'NOT', . sqlFromValue replaces wildcards also for 'NOT LIKE' - PntSqlCombiFilter::getSql places brackets around entire combination instead of around the parts it combines - PntSqlFilter::getSqlTemplate now places brackets around condition, but puts preceder before brackets - PntFilterFormPart::initFilter adds wildcards also if comparator is 'NOT LIKE' - SqlFilterTest adapted (many methods changed) - CaseSqlCombiFilter adapted (several methods changed) preparation of refactoring PntObjectDetailsPage and PntObjectEdtitDetailsPage - PntDetailsPart added - PntEditDetailsPart added otherr changes - pntUnit separated from the framework, PntTestCase and PntAssert moved to pnt/test - moved pnt.hcode out of pnt - PntPage::getInitConverter now uses isSet, polymorhism bug fixed - PntPage::getConvert now supports paths - PntClassDescriptor::_getPeanutsWith now implemented for static objects (using PntClassDescriptor::_getPeanuts) so that multi value properties can derive static objects too. - generalfunction.php added ::isUrlValid - php5Functions pntIs_a now checks object to be an object first - PntUnitTestResultPart::isOnlineExamples allways returns false - PntObjectEditDetailsPage::getFormWidget no longer requires maxLength to be an integer - PntEditDetailsPart::getFormWidget no longer requires maxLenght to be an integer - PntQueryHandler::addFieldPropsTo_table support for 'float unsigned' (partial) - PntPropertyDescriptor::_setValue_for no longer checks readOnly - PntMultiValuePropertyDscritor::mutateRelationFor_ids comment adapted to Hypercode limitations - PntDbClassDescriptor::_getDescribedClassInstanceForData $this->peanutsById[$assocArray['id']] checked to be set - PntObjectSearchPage::PntObjectSearchPage added - PntTextWidget::printBody no longer outputs spaces around widget tags - PntObjectDetailsPage::printFormText now prints   if no markup - PntQueryHandler::prefixColumnNames now initializes $result first - PntSqlJoinFilter::addJoinTableAndConditionByTableAlias again adds tableName to alias (fixes problem: JOIN over polymorphic relation errors) - PntErrorHandler::isPntFile added - PntErrorHandler::handleError no longer suppresses Php44RefNotice - PntSqlSort::getSortDirection assigns reference by value to var before using it (reference anomalies precaution) E_NOTICE "Only variable references should be returned by reference" fixes: - PntNavigation::_evaluate now returns null in a variable - PntFilterFormPart::getFilter now returns null in a variable - PntObjectIndexPage::getGlobalCombiFilter now returns null in a variable - PntRequestHandler::getRequestedObject now returns null in a variable - PntTabsPart::getContentPart now returns null in a variable - PntClassDescriptor::_getPeanutWithId now first assigns result of call_user_func - PntSqlJoinFilter::evaluate no longer returns reference - PntPropertyDescriptor::_getValueFor now puts getter result in variable before returning - PntNavigation::_getInstance now returs reference and assigns error to variable before returning it - PntErrorHandler::getStringConverter now assigns new Stringconverter to field and returns reference to the field - PntDerivvedPropertyDescriptor in functions that return a reference all Errors are now first assigned to a variable - PntPage::getPart now returns variable with null - PntXmlPart::getConverter returns value (returning by value caused dereference problem) - PntSite; PntRequestHandler::getConverter now returns converter by value - PntFormNavValue::getInstances now converter param passes by value ::getContentWith when _getValueFor returns error - PntXmlNavtext::getContentWith now returns by reference, in case _evaluate returns error null is first assigned to variable - PntXmlPart::getContentWith now returns by reference - PntObjectMtoNDialog::getMinWindowSize - PntObjectDialog::getMinWindowSize - PntDialog::getMinWindowSize - PntObjectSortDialog::getMinWindowSize - PntObjectEditDetailsDialog::getMinWindowSize - now assigns converter by value: PntXmlElement::getMarkupAttributes; PntFormMtoNRelValue::getMarkupWith PntXmlNavtext::getContentWith, ::getMarkupWith; PntXmlTextPart::getContentLabelWith, ::merge PntFormNavValue::getMarkupWith, getContentLabelWith; PntCheckboxWidget::getCheckedValue PntDialogWidget::initialize; PntMtoNDialogWidget::initialize; PntObjectSaveAction::shouldProcess; PntPage::getInitConverter Functions now returning/assigning array by value - PntSessionBasedScout::moved now assigns $uris and $contextIds by value ::getFootprintUris assigns $this->footprintUris by value - PntSqlJoinFilter::getJoinCondition now assigns $map by value (assigning by reference caused reference anomalies) - PntMultiValuePropertyDscritor::mutateRelationFor_ids now assigns $toDelete by value - PntObjectSaveAction::processMtoNproperties now assigns $this->saveErrors by value - PntDbClassDescriptor::_getDescribedClassInstanceForData argument assocArray now passed by value - PntIndex::asArray - pnt/generalFunctions assocsToStrings; fromCsvString; arrayWith - PntQueryHandler::getAssocRows; addFieldPropsTo_table - PntDbObject::getFilters; initFromData; getSaveErrorMessages; getDeleteErrorMessages; addDbFieldProps; save; delete - PntDbClassDescrtiptor::getPersistentFieldPropertyDescriptors, getPersistentValuePropertyDescriptors, getTableName, getTableMap, getFieldMap, getFieldMapPrefixed, getFieldMapForTable, getFieldFilters, _getPeanutsWith, getFieldMapForTable, getFieldMapPrefixed, addReferenceFilters, _loadMissingFields - PntSqlCombifilter::getParts - PntComparator::getInstances - PntSqlFilter::getPersistArray; selectFrom; getColumnName; initFromPersistArray - PntSqlJoinFilter::getPersistArray; getColumnName - PntNavigation::_collect; collect_path - PntFieldPropertyDescriptor::getFieldProperties - PntObjectNavigation::_getOptions - PntMultiValuePropteryDescriptor::_deriveValueFor - PntDerivedPropertyDescritor::_deriveValueFor - PntClassDescriptor::getPropertyDescriptors; getMultiValuePropertyDescriptors; getSingleValuePropertyDescriptors; getUiColumnPaths; getUiPropertyDescriptors getPeanuts; getPeanutsWith; _getPeanutWithId - PntRequestHandler::getGlobalFilters; tryUseClass - PntSite::getGlobalFilters; getFunkyRequestData; guessContextTypeFolder - PntNavValue::getInstances - PntFormNavValue::getInstances - PntXmlElement::getParts - PntSelectWidget::getOptions, printSelectOptions - PntObjectDeleteMarkedAction::getContextRequest, getRequestedObject - PntObjectSaveAction::getBackToOriginRequestData - PntObjectSearchPage::getRequestedObject; getRequestedObjectDefault - PntObjectPropertyPage::getItemTableColumnPaths, getPropertyValueFor, getButtonsList, doScouting, initForHandleRequest, getInitItemTable - PntObjectMtoNSearchPage::getButtonsList; getItemTableColumnPaths - PntObjectIndexPage::getButtonsList; getRequestedObject; getGlobalFilters - PntObjectSelectionReportPage::getRequestedObject, getTotalCells, getInitItemTable - PntObjectEditDetailsPage::doScouting; printInformationPart - PntObjectDetailsPage, PntDetailsPart::getFormText, getFormWidget, printDetailsRows - PntObjectReportPage::getFormTexts, getItemTableColumnPaths, printMultiPropsPart, getMultiPropNames - PntPage::getPartIncludeTryParams, addMultiValuePropertyButtons - PntObjectSelectionReportPage::doScouting - PntTablePart::getItems, printRows - PntPagePart::getFormTexts - PntButtonsPanel::getButtonsList - PntMtoNPropertyPart::getItemTableColumnPaths; getPropertyValueFor - PntFilterFormPart::getFilterCombinators, getFilters, getFilterResult, printExtraFormParameters _runQhStoreAllItemsSize_getItemsLimitedTo, getInitializedAdvancedFilters, printAdvancedFilterDescription, printAdvancedFilterDescriptions, getAllStringfieldsFilter - PntMarkedItemsCollector::getMarkedObjects; getMarkedOids; getMarkedItemParams - PntSessionBasedScout::getFootprintUris; getContextIds - PntHcodePackage::getChildren; getClasses - PntHcodeClass::getMethods; getChildren; getMethodNamed - PntHcoldeMethod::getUiColumnPaths - PntHcodeObject::getChildren; getChildObjects - PntTestCase::getTests - PntTestNotifier::getSeveritiesByJudgement - PntUnitTestRunPart::getTestCases; getVisibilities; getDefaultVisibilites - PntUnitResultNotification::getChildren; countJudgements - PntDialog::getButtonsList - PntObjectEditDetailsDialog::getButtonsList - PntObjectDialog::getButtonsList - PntObjectMtoNDialog::getButtonsList - PntObjectMtoNDialogWidget::initialize - PntStringCOnverter::labelFromDate; labelFromTime - PntTestNotifier::setTests - TestClassDescriptorTest::test_getPeanuts - PntPropertyDescriptorsTest; CaseDbObject; CaseDbPolymorphic; TestSqlFilterTest several functions - pnt/generalfunctions.php arrayWith now returns by value Notification "Only variables should be assigned by reference" fixes - PntObject::set Now assigning the result of _setValue_for by value - PntQueryHandler::_runQuery Now assigning the result of mysql_query by value - PntPropertyDescriptorsTest several functions - PntFieldPropertyDescriptor::isIdProperty - PntXmlTextPart::getContentLabelWith assignes content by value - PntXmlNavText::getContentWith assignes content by value Now assigning result of new by value - pnt.db.Template::getLabelSort - PntDbObject::getLabelSort; addDbFieldProps - PntSqlSpec::getQueryHandler - TestDbObject::getLabelSort - PntFilterFormPart::getNewCombiFilter - PntTestNotiefier::newErrorHandler - PntObjectEditDetailsPage, PntEditDetailsPart::get...Widget assigns and returns reference to variable - PntDbClassDescriptor::_getDescribedClassInstanceForData $peanut assigned from new by value 1.3.beta2 colliding changes: - skinReportPart table en printPart('ButtonsPanel') added - pntUnit/index.php - Inspect.php includeTestcaseClass other: - pnt/generalFunctions verson number now 1.3.beta2 - PntErrorHandler::handleError extracted ::dieIfFatal; allways called, not only if error is reported - PntErrorHandler::dieIfFatal now dies on E_RECOVERABLE_ERROR (does not take reportingLevel into account) - PntErrorHandler::initErrorLevelMap now maps E_SRICT and E_RECOVERABLE_ERROR E_NOTICE "Only variable references should be returned by reference" fixes: PntClassDescriptor ::_getPeanutWithId now returns $null instead of null; ::_getPeanuts no longer returns reference ::getPropertyDescriptor now returns $null instead of null; ::_getPeanutsWith no longer returns reference ::getUiFieldPaths no longer returns reference PntPropertyDescriptor ::primitiveTypes no longer returns reference ::_getOptionsFor no longer returns reference PntObject ::getUiColumnPaths no longer returns reference ::getReportColumnPaths no longer returns reference ::getUiFieldPaths no longer returns reference ::get now returns $null instead of null; ::getOptions no longer returns reference PntMultiValuePropertyDescriptor ::getIdPropertyDescriptor now returns $null instead of null; PntDbClassDescriptor ::_getPeanutsRunQueryHandler no longer returns reference ::_getPeanutsWith no longer returns reference ::_getPeanuts no longer returns reference ::getLabelSort now returns variable with labelSort ::getFilters no longer returns reference PntDbObject::newQueryHandler now returns variable with QueryHandler PntXmlPart::getConverter no longer returns reference bug fixes: - PntUnitTestResultsPart::inspectorLink now refers to Inspect.php instead of just Inspect - PntPregFilterExpression class name fixed (was PntPregFilterExpresson) in: - class file - PntUnitScriptPart::getFileFilter - pntUnit/index.php - Inspect.php includeTestcaseClass - ObjectSortDialog specialzation code for dutch removed - PntHcodeObject::getKey now checks isSet($this->packageKey) - PntErrorPage::initForHandleRequest now starts session and calls doScouting - PntErrorPage::doScouting added; fools next page to think referrer was the previous page - When an MtoNDialog is reopend after closing, the current values of the MtoNDialogWidget it was opened from are not reflected in the dialog. Patching this is not a big deal, look on the forum for a patch. PntMtoNDialogWidget::initialize replace equivalent line with: $this->setDialogUrlNoId("index.php?pntHandler=$dialogType&pntType=$pntType&pntProperty=$this->formKey&pntRef=$fpId&id=$id&$this->formKey="); Added Print buttons to reports - PntObjectSelectionReportPage::getButtonsList modified - PntObjectIndexPage::getButtonsList modified - phpPeanuts.css @print styles for funkyButton(Ghost) added for hiding buttons on printer - mcl/skinReportPart table en printPart('ButtonsPanel') added - PntObjectReportPage added field inPopup = true; ::printBody now calls parent if not inPopup ::printMainPart added ::getButtonsList modified security improvement (risk not considered high) - PntObjectMtoNSearchPage::getPropertyName now checks the propertyName to be alphaNumeric - PntPage::includeSkin now checks skin name to be alphanumeric - PntRequestHandler::checkAlphaNumeric error message now mentions skinName - pntPhp4Functions tryIncludeClass, includeClass added exploit warning to comment - pntPhp5Functions tryIncludeClass, includeClass added exploit warning to comment - PntRequestHandler useClass, tryUseClass added exploit warning to comment - PntSite::guessContextTypeFolder now uses ::getType - PntObjectMtoNDialog::getItemsInfo now uses ::getPropertyName - PntErrorHandler now by default uses the PHP's system logger - PntErrorHandler::debugInfoBacktrace now defaults to isDevelopment() - PntErrorHandler::getErrorPageUrl no longer includes cause - PntQueryHandler::convert(ConditionArgumentTo)Sql now uses mysql_real_escape_string - PntErrorPage::getBody no longer reveals errorCause 1.3 beta1a colliding changes/bugfixes: - Inspect.php fixed include exploit; unserialize by default disabled 1.3 beta 1 colliding changes: - images/buttonpupup modified - style/phpPeanuts.css = tabsPart no longer uses negative offsets with relative positioning because of IE bug: .pntTab top now 2px; .pntTab_selected top now 0px; .pntTabContent positioning and top no longer set; . pntDetailsGroup.. added .pntDetailsTextArea added, sizes now set, specific size for IE = added .pntButtonPopup, .pntClearWidgetButton, .pntMtoNButtonPopup, .pntDialogWidget, .pntMtoNDialogWidget .pntDetailsGroupHeader, .pntDetailsGroupLeft, .pntDetailsGroupRight, .pntDetailsGroupMiddle - scripts/general.js added ::pntFfpColSort - scripts/general.js pntFfpColSort factored out: pntGetFilterFormVisible - scripts/general.js pntSubmitDetailsForm added - skinFilterFormPart - simpleFilterDiv DIVs added for rightaligning advanced link - sortImage added to both simpleFIlterDiv and advancedFilterOverlay with onClick=openSortDialog - printSortDialogScripts call added - added $this->printSortParams(): - skinMtoNFilterFormPart analogous to skinFilterFormPart - skinMtoNSearchPart added checks for clientsizes not to be too small - skinMtoNPropertyPart changed iframe coordinates, whidth en height table, height Div - PntObjectMtoNPropertyPage moved saveMtoNPropTableState to scripts/general.js pntSaveMtoNPropTableState non-colliding changes in specific layer - ObjectMtoNDialog added - MtoNDialogWidget added - ObjectEditDetailsDialog added - ObjectSortDialog added - SortDialogPart added - skinSortDialogPart.php added - skinDetailsDialogPart added - images/sort.gif added bugfixes: - PntSite::getFunkyRequestData bug solved: POST and cookies from request got lost - PntValueValidator ::validate debugged: $type undefined,now is $this->type ::validateObject now checks length - PntTablePart depricated support debugged: ::printItemBgColor now passes parameters to printRowBgColor ::setHandler_printItemRows now assigns field properly - PntTabspart::processPartArgumentsConvertTabsSpec replaced $contentParts[$tabName] by $this->contentParts[$tabName] - PntMtoNPropertyPart::getPropertyValueFor debugged: now uses request param - PntErrorHandler::getStringConverter now checks if StringConverter exists - PntFormMtoNRelValue::setConvertMarkup contentLabel is not set if it is an invalid form value other changes: - added style for FireFox cursor:pointer : - PntTablePart::printRows - PntMtoNPropertyPart::printRows - PntHorizontalTablePart::printItemCells - PntHorSelReportPage::printItemCells - PntObjectMtoNSearchPage::printRows - PntDialogWidget::printBody - PntMtoNDialogWidget::printBody - pnt/generalFunctions.php pntIs_a now uses instanceof operator - PntFilterFormPart::initFilter now includes valuetype class - PntObjectMtoNPropertyPage ::printScaleContentScripts now also prints openNewItemDialog function that suggests initial value for label property ::getNewItemButton debugged: should use app folder corresponding to classDir ::getNewItemButton button script now calls openNewItemDialog function - PntObjectReportPage::getFormTextPaths override removed, page now only reports over uiFieldPaths - PntPage::addMultiValuePropertyButtons no longer assigns variable reference to $excludedPropKeys - PntObjectEditDetailsPage ::getButtonsList no longer returns variable reference; calls pntSubmitDetailsForm ::printOnUnloadScript roept pntSubmitDetailsForm aan ::printDetailsExtra now calls printDetailsExtraEmpty if setted readonly or not compulsory ::printDetailsExtraEmpty added, prints non breaking space - PntObjectSaveAction ::handleRequest now explcitly passes formTexts to convertAndValidateFormValues and commitFormValues ::commitFormValues now expects formTexts to be passed explcitly ::convertAndValidateFormValues now expects formTexts to be passed explcitly ::processMtoNproperties debugged: no longer stops after first successfully processed property - PntFormWidget fields $value and $formKey added - PntFormNavValue::getMarkupWith no longer assigns variable reference to $contentLabel - PntRequestHandler ::getFormTexts no longer returns variable refererence, no longer assigns variable reference to $this->formTexts ::setFormTexts no longer takes&assigns variable reference - PntStringConverter field labelItemSeparator added ::splitDT not adds ''00' instead of '' if a piece is missing ::toLabel calls arrayToLabel ::arrayToLabel convert arrays into labelItemSeparator separated string ::convert factored out: convertToObject ::convertToObject added so that these conversions can be overridden by subclass - PntPage::getConvert now triggers warning if no propertydescriptor - PntSite::isWindows now uses PHP_OS - PntMtoNDialogWidget::initialize now makes StringConverter convert linefeeds to
s for the labelValue; textSize now 32 - PntStringConverter ::toHtlm optional parameter added for conversion of convert linefeeds to
s ::arrayToLabel adds linefeeds if any of the labels includes an ampersand - PntObjectDialog ::getInitItemTable now sets eventhandler getCellOnClickParam instead of printItemCells ::getCellOnClickParam added ::printItemCells removed - PntSite::getBaseUrl factored out ../classes/pnt/pntBaseUrlFunctions.php - ../classes/pnt/generalFunctions now includes ../classes/pnt/pntBaseUrlFunctions.php - PntObjectNavigation::getStepResultType getSettedProp() replaced by getFirstProp() - PntTextWidget size can now be set - pnt/db/classTemplate.php initPropertyDescriptors now contains call to addDbFieldProps - PntMtoNPropertyPart ::printItemTablePart now sets $this->itemTable ::getPropertyValueFor now uses PntFormMtoNRelValue ::printTableHeaders no longer prints getOnClickRemoveRow ::printItemActionCell factored out getItemActionCellContent ::printAddRemoveScriptPart . now allways creates new row, but uses innerHTML for ItemActionCellContent . no longer contains/uses addCsQs_ToValueOf . sets pntMtoNPropsEdited so that page can saveMtoNPropTableState for its MtoNPropertyParts - PntButtonPart now prints id so that buttons may be enabled and disabled dynamically changes related to search page sorting: - PntTablePart added support for sorting by click on header: ::addHeaderSortParams ::initialize initializes $this->headerSortParams ::printTableHeaders prints headerSortParams if present - PntFilterFormPart ::getSortIsSpecific added ::getSortId added ::getSortDirection added ::getSort factored out: ::getSortDefault, now calls ::getSortSpecific ::getSortSpecific added - PntObjectSearchPage added: ::printItemTablePart, ::setTableHeaderSortParams, getHeaderSortParams - PntObjectMtoNSearchPage::getInitItemTable now calls ::setTableHeaderSortParams - PntObjectDialog::getInitItemTable now calls ::setTableHeaderSortParams - PntObjectNavigation::getDbSortPaths added - PntPropertyDescriptor added: getDbSortPaths, setDbSortPaths - PntFieldPropertyDescriptor::getDbSortPaths added - PntDerivedPropertyDescriptor ::getPersistent now tries to include type class ::getPersistent added - PntSqlSort added: getSortSpecFilters, getSortPaths - added $this->printSortParams(): skinFilterFormPart, skinMtoNFilterFormPart - scripts/general.js added ::pntFfpColSort - added: - ObjectSortDialog, PntObjectSortDialog, SortDialogPart, PntObjectSortDialogPart - skinObjectSortDialogPart.php added - images/sort.gif added - scripts/general.js pntFfpColSort factored out: pntGetFilterFormVisible - PntFilterFormPart $extraSortParams added - printSortDialogScripts added - PntSelectWidget $unselectLabel added ::printUnselectOption prints $this->unselectLabel if true - skinFilterFormPart - simpleFilterDiv DIVs added for rightaligning advanced link - sortImage added to both simpleFIlterDiv and advancedFilterOverlay with onClick=openSortDialog - printSortDialogScripts call added - skinMtoNFilterFormPart analogous to skinFilterFormPart - PntFilterFormPart forwards score as default and en sets sortParams emtpy with simpleFilterForm defaultSort changes related to search for values navigating over 1 to m and m to n relationships: - PntMultiValuePropertyDescriptor::deriveUsingPathFor relationTableName removed from alias - PntSqlSort ::getNewItemPropName added ::getSql factored out: getSql_WhereToLimit ::getSql_WhereToLimit factored out, now calls getSqlForGroupBy - PntSqlJoinFilter ::addJoinTableAndConditionByTableAlias removed tablename from table alias, uses table alias if set ::isJoinFilter added - testSqlSortTest and testSqlJoinFilterTest removed tableNames from table aliases - PntSqlSpec::::isJoinFilter added - PntSqlFilter added to support JOINing over multi value paths: getSqlForGroupBy, getGroupBySql, getGroupByField, getSql_WhereToLimit - PntSqlCombiFilter::getItemType overridden, if itemType not set, look for it on parts - PntDbClassDescriptor::getFieldFilters now only adds filters for visible properties - PntQueryHandler ::convertToSql now allways addsSlashes ::convertConditionArgumentToSql now calls labelFrom ::addSqlFromSpec now calls getSql_WhereToLimit - PntQueryHandler::getPropertyType added support for datetime datatype - PntObjectNavigation::getSettedProp factored out, adapted, now returns last prop - PntSqlSpec field and property propLabel added - PntSqlSpec::getLabel now return propLabel if no label - PntSqlJoinFilter::getLabel now only returns label exists, otherwise uses propLabel to build labelpath - PntDbClassDescriptor::addReferenceFilters sets propLabel instead of label - PntDbClassDescriptor::getFieldFilters sets propLabel instead of label - PntSqlFilter::getInstanceForNav sets propLabel instead of label changes related to SelectWidget and primitive types: - PntSelectWidget ::initialize now supports primitive types ::setOptionsFromValues added - PntObjectEditDetailsPage::getFormWidget now supports non-compulsory boolean properties and properties of primitive type with options getter - PntPropertyDescriptor ::isTypePrimitive added ::_getOptionsFor now returns array(true, false) for type == 'boolean' pnt changes related to New Item buttons in ObjectDialog and ObjectNtoMPropertyPage: - PntMtoNPropertyPart::printAddRemoveScriptPart now prints reply function for EditDetailsDialog - PntMtoNPropertyPart::getEditDetailsDialogReplyScriptPiece added - PntObjectMtoNPropertyPage ::getButtonsList now adds NewItemButton ::getNewItemButton added ::getNewItemButtonLabel added ::getNewItemDialogSize added - PntObjectMtoNDialog ::getButtonsList now adds NewItemButton ::getNewItemButton added - PntObjectEditDetailsDialog added - ObjectEditDetailsDialog added - skinDetailsDialogPart added pnt Changes related to MtoNDialogWidget: - PntObjectDetailsPage::getDetailsLinkFromNavText now returns content for multi value property navtexts (produces no hyperlink) - PntObjectEditDetailsPage ::getDetailsLinkFromNavText now returns content for multi value property navtexts (produces no hyperlink) ::getFormWidget not calls getMtoNDialogWidget for PntFormMtoNRelValues ::getMtoNDialogWidget added - PntObjectMtoNPropertyPage ::printMainPart now calls printSaveScript ::getButtonsList savebutton script now calls saveDetailsForm ::printSaveScript added, script creates array pntMtoNPropsEdited in which MtoNPropertyParts should register their propertynames and ItemTables' ids. ::printScaleContentScripts factored out coordinates to fields saveDetailsForm collects itemtable state for each MtoNPropertyPart and sets the ids to the properties form field - PntObjectSaveAction ::handleRequest now does finishFailure if processMtoNproperties was not successfull ::convertAndValidateFormValues ignores PntFormMtoNRelValues that are not set ::shouldProcess returns false for PntFormMtoNRelValues ::processMtoNproperties rewritten, calls old (depricated) processMtoNParamsFor if property readOnly or form value not set ::processMtoNRelValue added ::processMtoNParamsFor depricated - PntMtoNDialogWidget added - PntFormNavValue::getInstances now returns PntFormMtoNRelValue for multi value properties - PntObjectMtoNDialog added - PntObjectNavigation ::getSettedProp factored out from getIdPath, isSettedReadOnly, isSettedCompulsory it now is the first multi value property in the path, or if all are single value, the last property. Remark: if the setted properties type is not a primitive type, The user interface will actually set the idProperty of the setted property getFirstProp factored out from getFirstPropertyLabel - skinMtoNPropertyPart added - ObjectMtoNDialog added - MtoNDialogWidget added - images/buttonpupup modified - style/phppeanuts.css . modified .pntButtonPopup, .pntClearWidgetButton, . added .pntMtoNButtonPopup, .pntDialogWidget, .pntMtoNDialogWidget pnt.web.helpers.PntMarkedItemsCollector factored out from PntObjectDeleteMarkedAction and PntObjectSelectionReportPage: - PntObjectSelectionReportPage::getMarkedOids moved to PntMarkedItemsCollector - PntObjectDeleteMarkedAction::getMarkedOids moved to PntMarkedItemsCollector - PntObjectDeleteMarkedAction::getMarkedOidParams moved to PntMarkedItemsCollector and renamed getMarkedItemParams - PntRequestHandler::getMarkedItemsCollector added - PntObjectSelectionReportPage::getRequestedObject now uses PntMarkedItemsCollector::getMarkedObjects - PntObjectDeleteMarkedAction::getRequestedObject now uses PntMarkedItemsCollector::getMarkedObjects and stores collector for later use from handleRequest - PntObjectDeleteMarkedAction::handleRequest now calls $this->collector->getMarkedItemParams