| packageless

# Todo List ## core_util ### Bs_Array::arrayToText() deal with boxed arrays ### Bs_String see http://www.phpclasses.org/browse.html/file/1366.html ### Bs_Array::explode() support the limit param. ### Bs_System::getCpuInfo() all ### Bs_System::getOs() document the possible return values. ### Bs_System::getOsVersion() all ### Bs_System::getUptime() all ### Bs_System::getVersion() all ### Bs_String::hasSpecialChars() i bet this method could be optimized alot using regexp. ### Bs_Array::inArray() maybe preg would be faster here than converting. dunno. at the moment i'm happy. ### Bs_Array::randVal() maybe make use of the new php function array_rand() internally. ### Bs_Array::reindex() implement $startPos feature if needed. ### Bs_String::startsWithI() optimize this shit. imagine a really huge $haystack and a small $needle. all $haystack is converted to lowercase. only the strlen($needle) chars would need to be converted. and passed over. same for endsWithI. better use regexp here. ### Bs_System::systemCheckup() all ### Bs_Finance::toPercent() this function is not tested enough/has some new code. don't use it in a production environment. test it before! ### Bs_Finance::toPrice() make use of the param char $thousandsSeparateChar this function is not tested enough/has some new code. don't use it in a production environment. test it before! ## core_net ### Bs_HttpClient::$acceptCookies implement this, add option to send user-defined cookies ### Bs_HttpClient::$acceptType i think the first element here (*) makes it accept everything anyway... ### Bs_LittleSister::$blobFormat all ### Bs_UrlCache::$excludeMask implement this one ### Bs_UrlCache::$ignoreCaseInQuerystring implement options 2 and 3. ### Bs_UrlCache::$includeMask implement this one ### Bs_HttpClient::$receivedCookies implement this, add option to send them again, and to send user-defined cookies ### Bs_Smtp::$_attachment implement this ### Bs_Url::addQueryParam() ecg ### Bs_Smtp::addTo() support address lists (as specified in the rfc). ### Bs_Url::breadCrumb() ecg, docu, modify ### Bs_Browscap add HTTP_ACCEPT_ENCODING HTTP_ACCEPT ### Bs_HttpClient this is a multiline description: problem: if you connect to a host, then grab a few files, then disconnect, only the 1st fetch will succeed. for the 2nd, 3rd ... you can send your request without errors, but there's no reply (eof or error) from the server => connection is lost somehow? reason: probably this is a windows problem only. the manual for fsockopen() sais param "double timeout" is not available on all systems, but doesn't mention on which it's not. it if's ignored, this would be the reason for my problem. solution: the param $tryReconnect in fetchPage() helps. it reconnects once each time a conn is fucked/lost somehow as in this problem. comments: of course this is not satisfactory, because if you connect, fetch a lot, then close, the connection has to be reopened for each fetch request. but at least the coder doesn't need to worry. hint: maybe you are just looking for: $file = fopen("http://www.php.net/", "r"); if you're looking for information about the http protocol, try these, have fun :) Hypertext Transfer Protocol HTTP/1.1 ftp://ftp.isi.edu/in-notes/rfc2616.txt Obsoletes: 2068 Hypertext Transfer Protocol HTTP/1.1 ftp://ftp.isi.edu/in-notes/rfc2068.txt Hypertext Transfer Protocol HTTP/1.0 ftp://ftp.isi.edu/in-notes/rfc1945.txt Upgrading to TLS Within HTTP/1.1 ftp://ftp.isi.edu/in-notes/rfc2817.txt Updates: 2616 dependencies: Net/Bs_NetApplication (which uses Net/Bs_SocketClient and Net/Bs_Url) ### Bs_NetApplication maybe replace the 2 Bs_SocketClients with an array of 10? was a sugguestion from sam. ### Bs_SimpleSession Prevent SID hijacking. If we reuse a previously created session by getting the sid from the querystring (and not from a cookie), we have a possible hole. Someone might send his url (with sid included) to someone else, and this person pastes it into the browser. See the problem. So what we do is check the class c network of the ip address (proxies might switch ip's). This still leaves room for ppl trading url's in the same company/using the same isp, but what can we do? Check browser string? hmm maybe. Well this is internal anyway and you shouldn't care. ### Bs_Smtp Message-Id: <20010913092203.45C8.SAM@gibtsnicht.xx> MIME-Version: 1.0 ### Bs_SocketClient check from time to time setBlocking() (if nonblocking is possible on win now) ### Bs_Session::destroy() kill the file ### Bs_Url::enableUrl() fix the problems listed above ecg ### Bs_Url::getLastDir() allow full url's (with http://www.domain.com part) ### Bs_HttpClient::getUserAgent() all ### Bs_Url::hashArrayToHiddenFields() ecg docu ### Bs_UrlCache::isPageCached() all ### Bs_LittleSister::logThis() all ### Bs_Url::modifyQueryParam() ecg ### Bs_HttpClient::randomUserAgent() all ### Bs_Url::removeQueryParam() all ### Bs_HttpClient::responseCodeInfo() finish the descriptions for all codes, or decide to kick them out. ### Bs_FtpClient::rmDir() what happens with dir- and file links? ### Bs_FtpClient::rmDirRec() what happens with dir- and file links? test this code ### Bs_Smtp::setOrigDate() check the syntax of $param, or offer other formats to be given and convert them. ### Bs_EmailValidator::validateHost() check if php's getMxRr() and checkDnsRr() OR exec() are fixed now for win and update the code/manual. ### Bs_HttpClient::_readCookie() all ## core_gfx ### Bs_TextType::$fontAntiAlias use this? ### Bs_TextType::$profileName maybe add a profileDir var? ### Bs_TextType::$xAlign support 'middle' ### Bs_TextType::$yAlign all ### Bs_ImageUtil see above ### Bs_TextType see above ### Bs_Chart::isFirstColLegend() finish implementation ### Bs_Chart::isFirstRowTitle() finish implementation ### Bs_Chart::prepareData() finish implementation, currently only works with dataCsv. ### Bs_IntervalChart::setInterval() code support for all options. currently only 'month' and 'day' are supported. see _groupDataByInterval() and _fillDataGaps(). ## core_auth ### Bs_Cug::$maxNumAttempts implement this feature. ### Bs_Cug when the user gets to the login form, include the url he's coming from so after a successful login we can redirect him to where he was. just like we do it in the browscap class. ### Bs_Password::createPronounceablePassword() make use of numbers and special characters. ### Bs_Password::isBadPassword() write code ### Bs_Password::isSilly() write code ### Bs_CugDb::resetPasswordByEmail() all ### Bs_User::validateLogin() check Bs_Cug->_validateLoginData(), not sure where to implement this functionality. ## core_html ### Bs_FormField::$additionalCheck add security stuff because of the eval. ### Bs_FormField::$bsDataManipulation make use of this or kick it out. ### Bs_FormField::$bsDataManipVar make use of this or kick it out. ### Bs_HtmlTag::$caseFolding make use of this one. ### Bs_FormField::$codePostLoad add security stuff because of the eval. ### Bs_FormField::$codePostManipulate add security stuff because of the eval. ### Bs_FormField::$codePostReceive add security stuff because of the eval. ### Bs_Form::$dbName make use of this var. ### Bs_DaFormPageControl::$domApiDefaultOpen implement this ### Bs_FormFieldCountryList::$doOrderOnSpit define/code ... ### Bs_FormField::$enforce enforce is the wrong name for this. change it to $overlook. update text. 2002/11/10 --andrej ### Bs_FormField::$equalTo the gui only supports string, not vector. ### Bs_FormFieldFile::$fileSizeUpdateIni all (that won't work, as far as i see it. --andrej) ### Bs_Form::$mode rethink the available modes. ### Bs_FormField::$mustOneOf not implemented in the gui. difficult. ### Bs_FormField::$mustOneOfIf not implemented in the gui. difficult. ### Bs_FormField::$notEqualTo the gui only supports string, not vector. ### Bs_FormField::$onlyIf not implemented in the gui. ### Bs_FormField::$onlyOneOf not implemented in the gui. difficult. ### Bs_FormField::$onlyOneOfIf not implemented yet. could be needed somewhen. ### Bs_Form::$templatePath i think we should use the $_SERVER['DOCUMENT_ROOT'] or so. at least that var should be used. ### Bs_FormField::addEnforceCheckbox() name[] _enforce won't work with arrays. ### Bs_FormTemplateParser::apply() not satisfied with the params, how the information is passed. ### Bs_FormImage add/recode the style stuff. ### Bs_HtmlTag __parseTag() and __parseProperties() are from older code. maybe modify them a bit. i added the __ in front of the function names to make them stand out. dependencies: Bs_HtmlUtil ### Bs_FormField::getErrorMessage() finish this method, especially implement xml. ### Bs_FormFieldRadioJs::getField() use the explodeKey param here. dunno why that's not implemented. ### Bs_FormFieldButton::getField() only send the enhanced button html code if the client supports it (ie4+) ### Bs_FormFieldRadio::getField() use the explodeKey param here. dunno why that's not implemented. ### Bs_FormField::getFieldAsHidden() i'm sure this won't work for select fields with a multiple selection. need to overwrite it. also the value has to be tag-encoded, i bet. ### Bs_FormField::getHelp() all ### Bs_FormElement::getLanguageDependentValue() i have moved this method to bs_textutil. we should use it instead to avoid double-maintenance. ### Bs_HtmlUtil::htmlEntitiesUndo() check from time to time if this method is implemented in php now. php4.3: not yet. --andrej ### Bs_HtmlInfo::initByUrl() add fallback code ### Bs_FormFieldSelect::inputManipulate() use $paramValue, see Bs_FormField->inputManipulate() ### Bs_Form::isMultipart() finish this code ### Bs_HnXmlHandler::loadDataByXmlString() implement this ### Bs_FormFieldSlider::loadSkin() use ini-files instead of hardcoded php code. makes it much easier to extend. ### Bs_FormTemplateParser::loadTemplateFromFullpath() finish this code. it works fine but only if everything's right the first time. ### Bs_HtmlUtil::parseAttrStr() It works, but not very efficent. ### Bs_HtmlTableWindrose::readByString() why is the inihandler not used here? i think this code could be replaced. i think the inihandler did not exist at that time. ### Bs_Form::saveToDb() only works with insert yet, not update. ### Bs_Form::seedClearingHouse() this method is called from somewhere when the elementcontainers are not ready yet. maybe fix this, altough it doesn't break the code, it's just unclean. ### Bs_Form::setBsFormData() i have to do something with the return if it's false. log, whatever. don't know what's best at the moment, leaving it for later. ### Bs_Form::updateDbTableStructure() finish this code. it already adds missing fields, but doesn't alter fields that need to be changed. ### Bs_FormField::validateDataType() finish this code ### Bs_FormFieldRadio::_prepareOptions() security hole here. we should use the concept of evalWrap(). i want to have it executed here and not there so we're in this object's scope. ### Bs_FormFieldSelect::_prepareOptions() security hole here. we should use the concept of evalWrap(). i want to have it executed here and not there so we're in this object's scope. ## core_date ### Bs_Date::monthNumberToString() maybe we better use the bs_kb.LangMonth table? ## core_db ### Bs_Odbc::$format update this for odbc ### Bs_Db::assertExtension() take care, php's dl() function has been deprecated and is likely to be removed in php 4.1 or 5. ### Bs_MsSql::autoCommit() rewrite code for mssql. ### Bs_MsSql his class is accurate for MsSQL __version__. please check the following methods to be up to date: 2do > fieldFlags(), hasFieldFlag(), fieldType(), getTableProperties(), getTableInfo(), getTableType(), 2do > getIniVar(), getStatusVar() Make sure the existing code doesn't break because of your changes! thanx. recode some functions more down the file for mssql (taken from mysql). code the transaction stuff implement the stored procedures functionality. i wonder if we should move more logic into bs_db.class (that is the same in the mssql and mysql implementation). i don't want to copy the same code blocks over and over again for every db vendor. but then how many impl. will we write? dependencies: Bs_Db ### Bs_MsSql::commit() rewrite code for mssql. ### Bs_Db::countRead() we could optimize this, modifying the query to do "SELECT COUNT(*)". ### Bs_MsSql::databaseExists() rewrite code for mssql. ### Bs_MsSql::databaseName() rewrite code for mssql. ### Bs_MsSql::escapeString() check if that really works. and what about \n etc? see http://www.zend.com/codex.php?id=204&single=1 ### Bs_MsSql::fetchFieldNames() rewrite code for mssql. ### Bs_MsSql::fieldExists() rewrite code for mssql. ### Bs_MsSql::fieldFlags() rewrite code for mssql. ### Bs_MsSql::fieldLen() rewrite code for mssql. ### Bs_MsSql::fieldType() check documentation above and the return values. maybe test a view. ### Bs_Oci::freeResult() should we rename this to freeStatement here? think so. ### Bs_MsSql::getClientInfo() code and test this as soon as php405 is out. rewrite code for mssql. ### Bs_MySql::getClientInfo() code and test this as soon as php405 is out. ### Bs_MsSql::getDbStructure() rewrite code for mssql. ### Bs_MySql::getHostInfo() code and test this as soon as php405 is out. ### Bs_MsSql::getHostInfo() code and test this as soon as php405 is out. rewrite code for mssql. ### Bs_MsSql::getIniVar() rewrite code for mssql. ### Bs_MsSql::getOpenTables() rewrite code for mssql. ### Bs_MsSql::getProtocolInfo() code and test this as soon as php405 is out. rewrite code for mssql. ### Bs_MySql::getProtocolInfo() code and test this as soon as php405 is out. ### Bs_MsSql::getServerInfo() code and test this as soon as php405 is out. rewrite code for mssql. ### Bs_MySql::getServerInfo() code and test this as soon as php405 is out. ### Bs_MsSql::getStatusVar() rewrite code for mssql. ### Bs_MsSql::getTableInfo() rewrite code for mssql. ### Bs_MySql::getTableStructure() i bet there are a few bugs in the way the data array gets built. have to test this one. need to create a few test-db-tables for that to see how mysql returns the values. ### Bs_MsSql::getTableType() rewrite code for mssql. ### Bs_MsSql::hasFieldFlag() rewrite code for mssql. ### Bs_MsSql::insertId() decide about return value 0/false/null/exception. ### Bs_Oci::insertId() implement this. currently returns a not-capable exception. ### Bs_MsSql::isReservedWord() rewrite code for mssql. ### Bs_MySql::isValidName() add regexp for syntax check. ### Bs_Oci::isValidName() add regexp for syntax check. ### Bs_MsSql::isValidName() add regexp for syntax check. rewrite code for mssql. ### Bs_MsSql::listDatabases() test this code. ### Bs_MsSql::listFields() rewrite code for mssql. ### Bs_Odbc::listTables() all ### Bs_Oci::numRows() implement this. currently returns a not-capable exception. ### Bs_Db::parseDsn() all ### Bs_MsSql::rollback() rewrite code for mssql. ### Bs_MsSql::serverSupportsTableType() rewrite code for mssql. ### Bs_MsSql::startTransaction() rewrite code for mssql. ### Bs_MsSql::tableExists() rewrite code for mssql. ### Bs_MsSql::tableHasTransactions() rewrite code for mssql. ### Bs_MsSql::tableName() rewrite code for mssql. ### Bs_MsSql::tableName2() rewrite code for mssql. ### Bs_MySql::updateTableStructure() code is not done, see yourself. currently only adds fields. maybe we should also create the table if it does not exist at all. ## applications_debedoo ### Bs_Debedoo::$overviewSettings it's not really an overview setting, it's used for everything. rename it? recode stuff? i leave it by now. --andrej ### Bs_Debedoo::$searchSettings all (not sure if this one gets used at all in the future.) ## core_file ### Bs_File Things like open, close, readLine, read, create, write, append Slash-handling (espacilly the '/' and '\' distinction) ### Bs_Dir::emptyDir() remove empty subdirs afterwards? a prune() method would be neat (that dives into a dir and removes empty subdirs). ### Bs_FileSystem::isValidFilename() all ### Bs_FileSystem::isValidFullPath() all ### Bs_FileSystem::isValidPath() all ### Bs_File::readAll() finish code ### Bs_FileConverterPdf::toHtmlFile() all ### Bs_FileConverter::wordVersion() should we return '6' instead of 'word6', the number only? ## core_lang ### Bs_Is_Index::create() add transactions ### Bs_IndexServer::createIndex() add transactions ### Bs_IndexServer::dropIndex() add transactions ### Bs_Is_Index::dropIndex() add transactions ### evalWrap() make use of the $security param. return a bs_exception if the security check complains or a parse error occures while evaluating $phpCode. add something to disallow output (echo, print, escaping code). ### redirect() if we get a relative url we have to make it absolute, otherwise some clients may not understand it. ### rewriteUrlSession() write main code ### Bs_Exception::seedGlobals() finish the code... ### Bs_Exception::stackDump() finish the 'alert' case. ## plugins_instanthelp ### Bs_Ih_InstantHelp::getText() implement language handling ### Bs_Ih_InstantHelp::setText() change the default lang handling, i think. ## applications_imagearchive ### Bs_ImageArchive::$allowedTypes accepte png ### Bs_ImageArchive::treatUploadedFile() allow multiple file uploads at once as defined in getFileUploadForm(). ## plugins_indexserver ### Bs_Is_WebSearchEngine::$ignoreUrlsWithPass implement this ### Bs_Is_WebSearchEngine::$ignoreUrlsWithUser implement this ### Bs_Is_WebSearchEngine::$limitDomains support "*.domain.com" (or is this supported using "domain.com"?) ### Bs_Is_WebSearchEngine::$reindexIfUnchanged code that functionality ### Bs_Is_Profile::$_indexNumbers code that feature. ### Bs_Is_Profile::checkDbTables() all ### Bs_Is_Index::create() add transactions ### Bs_Is_Index::dropIndex() add transactions ### Bs_Is_Indexer::indexBySqlWhere() all ### Bs_Is_IndexServer::isStopWord() implement code. ### Bs_Is_Searcher::listCollocations() all (not coded yet) ### Bs_Is_Profile::load() finish code. ### Bs_Is_Profile::prune() check if profile exists, and return FALSE if it does not instead of throwing an exception. ### Bs_Is_Indexer::_assignLanguage() if $lang is an array then decide which to use, or assign more than one. do something. ## applications_cms ### addSessionID() write code ### Bs_Navigation::getBreadcrumbNavigation() make use of the $highlightCurrent param implement language dependency somehow add the language code to each fucking url. 3rd level domains would be easier like fr.domain.com/ so you could just link to /someshit/ instead of /fr/someshit/ ... ### Bs_Navigation::getNavigationData_old() implement cache (make use of $useCache param) finish code ### Bs_XAtom::matchFeature() add support to check versions like for javascript 1.2+ ### Bs_XAtom::matchPlugin() add support to check versions like for pdf5+ ## core_text ### Bs_LanguageDetector::$wordDict document this data structure ### Bs_LanguageDetector::$wordDictDe remove dublicates ### Bs_LanguageDetector::$wordDictEn remove dublicates ### Bs_LanguageDetector::$wordDictFr remove dublicates ### Bs_LanguageDetector::$wordDictNl remove dublicates ### Bs_LanguageHandler currently only reads the languages, should be able to write also. (implement in Bs_IniHandler) ### Bs_LanguageDetector::detectText() finish code with char replacements. ### Bs_TextUtil::ordinal() what about zero '0'? ## core_storage ### Bs_ObjPersisterForFile finish this code. does not work yet, i think. or use the mysql implementation instead. ### Bs_ObjPersisterForMySql::updateTableStructure() finish this code. it already adds missing fields, but doesn't alter fields that need to be changed. ## plugins_onomastics ### Bs_Om_OnomasticsServer::getNicknames() code ### Bs_Om_OnomasticsServer::getTranslations() code ### Bs_Om_OnomasticsServer::getVariations() code ### Bs_Om_OnomasticsServer::translateFirstname() code ## applications_simplequiz ### Bs_SimpleQuiz::$dontKnow ? ### Bs_SimpleQuiz::$giveNegativePoints all ## applications_smartshop ### Bs_Ss_SmartShop::getProductFormatted() implement $format support. ## applications_websearchengine ### Bs_Wse_Profile::$ignoreUrlsWithPass implement this ### Bs_Wse_Profile::$ignoreUrlsWithUser implement this ### Bs_Wse_Profile::$limitDomains support "*.domain.com" (or is this supported using "domain.com"?) ### Bs_Wse_Profile::$reindexIfUnchanged code that functionality ### Bs_Wse_Profile::$waitAfterIndex this seems to not work. check this. ### Bs_Wse_Profile::checkDbTables() all ### Bs_Wse_Profile::getCategoryForUrl() finish code with 'preg' and 'ereg' ### Bs_Wse_Profile::load() finish code. ### Bs_Wse_Profile::prune() check if profile exists, and return FALSE if it does not instead of throwing an exception. Documentation generated on Mon, 29 Dec 2003 21:16:42 +0100 by phpDocumentor 1.2.3