Jump to content



  • Posts

  • Joined

  • Last visited

  • Days Won


 Content Type 



IPS4 Providers

Release Notes

IPS4 Guides

IPS4 Developer Documentation

Invision Community Blog



Everything posted by Numbered

  1. Thanks, Meddysong. But this question from our l10n department (I can's speak with this good level of english ). I'm sure this should be fixed. But I need answer from IPS which way they would choose to fix - change language strings or change language keys . And this answer i'll forward to our l10n team for their right descition for right way for proof-reading english and start updating other languages.
  2. Dear developers! When localizing the strings from the new platform version, we faced a possible problem. It seems to us that the stings "Opt Out" (src\*.xml.core.lang.xml.language.core.updates_consent_enabled.0) and "Opt In" (src\*.xml.core.lang.xml.language.core.updates_consent_disabled.0) need to be used one instead of the other ('Opt out' instead of 'Opt in' and 'Opt in' instead of 'Opt out') because their current descriptions do not correspond to them . Please let us know if we are right.
  3. Moreover, Anton can said to the post "I am Anton Popov from Leninskaya street, d. 16. Love cooking, my weigh is 80 kg, red eyes. I'm a christian, have a vegetovascular dystonia. Bisexual" Bertha quoted Anton. Certha copy-paste part of Anton's post directly. Dertha made a screenshot of Anton's post, save it to local computer. And after some time posted it. Don't care about behavior. But. Some time later Anton made a account removal request and his account and data deleted and anonimyzed. After that Dertha posted screenshot. I just want to say - you can't manage personal data information, stored as a part of content. If you try to do that - you can fail on the time, when someone post personal data after delete. So you (and moders) don't know anything about Anton, so you can't know about his previous delete. Of can? If can - you dont' clean up his ) Our lawyer get an answer for that question from our Controller. He said - content posted by users became a part of public domain. And for better understanding that we put the notify about that to top of all editors. May be that is too much for that. But we want to provide better service and undestanding to our users.
  4. Nice, but too late and not enough for all gdpr specific bussiness cases. For example, I can write little our experience. We have an external database service, external openid auth. (Our IPS is just a part of big services). So our users can request data export and send account removal request in their personal area on the external (if we watch from IPS point of view) site. If user ask for deletion our backend service send a message to rabbitmq special queue. This queue listen all our apps, which have internal user database. We provide "grace" period few days. We did it because we want to make user sure for his action (and he wouldn't hacked). It's ok by gdpr. In this grace period we anonimize it, block profiles, exclude from all searches and block all activity with them (like a ban functionality, but not it), change it's email field for block notifications, clear all stored sessions in devices. If user don't change his opinion in that grace period our service will send delete action/message to mq and all services start to do cleaning and anonymize tasks. For forum example it is: 1) we make new clean account with anonymized name and email; 2) merge this new account to the old (in this way we change posts author to the new anonymized account); 3) delete old account (and our internal apps which have special tables with additional member data do this clear by 'onDelete' action); 4) send to our service 'ok' state for requested action (if it dont' receive it - than it will periodically personally ask for doing that. and if service not provide good answer after some tries - notify our internal scheduled tech support). Our export doing by external service, which connected directly to DBs of a lot of registered as 'contain member data' services, get all data and notify about completed export process and ability to download export archive. So, 4.3.3 features are too late now for us (we can't update so fast, because 4.2->4.3 changes broke most of our apps, plugins and themes). May be after we update the core we may improve our integration system for use this created tools. But in fact current default IPS GDPR good only for very small communities with a few amount of additions, which can easy update. Anyway, thanks for you work.
  5. Google Search Console didn't show changes on graphs. But I copy some comment, posted 8 hours ago - it present in google and shows link to the source well. Ok for me. Before previous things i can't find content, posted a lot of months ago. But one more interesting thing - i added robots.txt 2018-03-03 and graph 'index count' boost x3.. Just because i block some links, which google tried to get, but get error or get content-less page. This errors may worse indexing of correct links. May be not, who knows .
  6. As that doc said we should define our 3rd party lib with that line \IPS\IPS::$PSR0Namespaces['Libary'] = \IPS\ROOT_PATH . '/applications/app/system/3rd_party/Library'; I use the PhpAmqpLib in my app. So i created new folders in my app folder 'system/3rd_party/PhpAmqpLib' and put line in file, which use that lib (one of task) <?php /** * @brief myAppSomeMQ Task * @author <a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a> * @copyright (c) Invision Power Services, Inc. * @license https://www.invisioncommunity.com/legal/standards/ * @package Invision Community * @subpackage app * @since 15 Feb 2018 */ namespace IPS\app\tasks; \IPS\IPS::$PSR0Namespaces['PhpAmqpLib'] = \IPS\ROOT_PATH . '/applications/app/system/3rd_party/PhpAmqpLib'; use PhpAmqpLib\Connection\AMQPStreamConnection; use PhpAmqpLib\Exception\AMQPProtocolChannelException; use PhpAmqpLib\Message\AMQPMessage; use PhpAmqpLib\Wire\AMQPTable; /* To prevent PHP errors (extending class does not exist) revealing path */ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) ) { header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' ); exit; } /** * myAppSomeMQ Task */ class _myAppSomeMQ extends \IPS\Task { // my code.. } Is that is right using of define \IPS\IPS::$PSR0Namespaces ? I'm sure some better place should exist. Please, tell me where to connect it correctly. Thanks. P.S. All works well. No problems with lib and it using. My question just for make it working in good method.
  7. Sorry sorry -) I just want to make a main way for do needed stuff. And session class just as example . And i didn't know about convertLegacyParameters() method before. Thanks) I hook session class read method before for working with sso stuff. Totally agree with bad place for that ) upd. deleted my code for prevent bad using it for others.. but it still saved in your quoting of my post..
  8. This will show proper blog on your bad url address (better than get 404): Of course, much better rewrite with 301. It can be done with your web server or some hook some file. If i need to do this i'll hook \IPS\Session\Front, read method. Because we need to redirect your ulr to correct place with 301 before something will start working in main engine. Something like that: {i deleted it} P.S. Need to rename this topic to "Every SEO Q/A"
  9. I think new method, like ->getImageResized( [int|null] $width, [int|null] $height, [bool] $save_proportion_or_not ) - must be present in IPS framework. For example, we have image something.jpg 500x200. In some place this image will show in block with 250 width. So, we can just call ->getImageResized(250) and our image will save in same place with filename something_250x100.jpg. get, store, perfect working. Same for height ->getImageResized(null, 20) - return someghing_50x20.jpg. Or ->getImageResized(300, 20) - will return someghing_50x20.jpg because 20 is smaller and we didn't define $save_proportion_or_not to false. So ->getImageResized(300, 20, true) - shoud return something_300x20.jpg ugly image. But just what you want. I'm not first, who dream it. This technics already done by other (not community) frameworks very long time ago. It worked and perfect. Be extremely good if IPS get this experience and did it too. Than every place can get absolutely good image for special needed place. If IPS want i can share detailed experience of that realization with all needed image operations with gd, imagick, storing, expiring. And it's a good idea for creators create a this tool plugin
  10. I don't know. But i'll start this job with something like that: {{$fb = \IPS\Login\LoginAbstract::load('Facebook');}} {{$fbLoginForm = $fb->loginForm(\IPS\Http\Url::internal(''));}} .. {$fbLoginForm|raw} \IPS\Http\Url::internal('') - just for error preventing. It's not using with form generation. Anyway, you can see how this url generated in \IPS\Login\Facebook class (\system\Login\Facebook.php, loginForm method)
  11. Very nice design. As see - it is beautiful and more useful. But, did you improve secondary groups field? Now this select box is very uneuseful. If you have a lot of groups then you have a pain with scroll this list. And selecting multi-groups (and unselect only one from list) with Ctrl - is not a modern solution for that.
  12. There are a lot of services, where human-employees works for create accounts. Then they sell it to the spam scripts which do their jobs. It's really exist. In that case you should think better way especially for you community (not block good users and make spam-employees cost for register too expensive then they sell it). So, for example, you can set premoderation for users, who posted less than 5 posts at all. After reaching this level they are can use forums as others. This example way is more expensive for create 'white' user with approved 5 good posts. And it will be cool for you - 5 good posts is good cost if this user will get permanent for 1 spam (5 good posts are still exist and make your forums better)
  13. Not really understand. But \IPS\Member::loggedIn()->language(true) - returned front-end of the current user \IPS\Lang object. After that you can get any language kay values with \IPS\Member::loggedIn()->language()->addToStack(...); where ... - you can just put a key or use it with sprintf. Without true param calling \IPS\Lang object will contain acp language too. So, for example, if your task need to send some text to some user and content of this text should contain right language from lang-keys - so you may use something like \IPS\Member::load(123456)->language()->addToStack('some_key'); - it will put correct value for your text on the selected by this member preffered lang (or default).
  14. IN_DEV defined? What if you set default theme by default for frontend? Moved constants file with incorrect cache system (try to remove it at all). Clear cache from acp didn't tell anything and success rebuild cached themes without errors? Already tried to switch off ModCP module in core (ACP-applications-core (expand modules list) - modcp - disable)?
  15. Hi friends! If you create a new text topic and after that somebody post a comment with attached image then embed to this topic will show this image. And if you want to change it to something other (and upload it to first or last comment) you couldn't do it. I investigate source of this miss of logic. Embed template get image directly by theyself: Method 'contentImages' not present in \IPS\forums\Topic class, so they calls from parent \IPS\Content\Item class. And it do it little stupid: There are not exist any order in this select query (just 'column', 'table' and 'where' clause) and template get [0] image in returned array. So it will get first uploaded image to topic by the attachment_id and you can't change it (except upload new one, delete old, restore old.. but it is the bad way.. imagine if you post has a lot of images). So my proposal - add this method to \IPS\forums\Topic with a correct way for get first uploaded image, depended on post order, not as currently. This impovement doing very easy, but will be useful. Of course, much better - have a some gui for select better preview image for embeds. But it should get much more working than i proposed. Thanks for you attenstion
  16. Today I watched some stats and see some interesting: very flat line of storage consumption. This is not possible in the case of user activity. And off course, I went to study this issue First I checked the directory with logs. This dir empty (bacause we not store logs in storage ). Second stage - i get the size of imageproxy folder: Hmmm... so much. Actually we didn't set any expire date for them. So it should store all files - it's okay. But. Hmm.. let's check how many files we stored.. I tried to put Xzibit image here (got it from google image).. and didn't know why it's not embed. Just a red field error. Ok.. Forget it) Ok. Stop fun. Let's investigate it. At first i create temp amazon s3 bucket and configure it in my IPS docker container. I has 4 members with letter photos. After configure they images moved to new bucket. Ok. After thet i upload a profile image and got error... Ok. May be my environment issue. Let's try again. Second try was success and original and thumb image stored well. But! My image which i try to upload at first time stored too. It's not deleted. And letter photo of user not deleted too. Ok. Let's switch back to 'no photo' = letter photo. Thumb and original image deleted well. First error image stored. So, i think you already understand the problem. This is basically enough to ask the guys to figure out the error. But you know me. I love to goo deeper and help to solve source of problem. Let's see that code: We have just two error handlers. First - if the responce code is not 200 and second - only for specific error \IPS\Http\Request\Exception. Of something other happened - nothing will logged. On production forums i have 0 errors of that lines. I am sure there are a lot of situations, when something happend bad (i remember that problems). But nothing logged. So first proposal - improve this error catching. It's important to controll and understand current health. I'll investigate what actuall error i got in response there and post it here soon. Thanks for you attension
  17. You can't do this with cron. I mean got this time for make a while inside php script. I didn't share this while for prevent copy-paste my version without understanding. Because too much while repeats may work more than 60 seconds and that can overflow your memory. You get 0.039s per one working. So you can create a 40-60 repeats this working per one minute (started with cron). So just write something for ($i=1; $i<60; $i++) { $generator->buildNextSitemap(); } inside example script instead line $generator->buildNextSitemap(); and that make a 60 runs per minute.
  18. Hello. I want to propose make this checks table Outside from "Something isn't working correctly" menu Sometimes I want to just a do checks (and implement extensions for that table from my apps for doing their checks) and see the result. But I didn't want to clear all caches. Be better, if this healthchecks can work in cli too (and cache clean ups). Thanks
  19. Error 2S136/4 thrown by IPS only in one situation - when somebody try to use report system. Just disable this ability for guests and all be fine. Now Google make your attention because it started crawl your site better and found that problem (it was exist before that changes and this changes is not link with that) Your example links said about this too (?do=reportComment - guest shoudn't use report system).
  20. We have a plan to create a feature - give to user ability to set languages, which user can understand. If user set it - we will hide categories on other langs from him. So we'll have a language set for each category (and return lang icon near topic returns, in search, activity feed and etc..) and depend on that information - provide better analizer (or elastic instance) for any special content. Yes, it's pretty hard to do. But however it is possible. Of course, I'm not asking you to do something like that. But just keep it in mind - useful when developing classes and methods for potentially necessary developer hooks. Thank you for understanding. You do a good job
  21. Whats about multi-language communities? We have Spanish, English and German sections on forums and translations. So how we can add more than one search analyzer?
  22. Something like that? select type_id as post_id, count(id) as likes from core_reputation_index where type = 'pid' group by type_id order by likes desc limit 5;
  23. I was wrong. It's not a point of bug. Actually it's mine mistake. I did a sso file, where i create a hook to \IPS\Session\Front to the read method. As that doc said I can call a parent:read and before that check $this->member->member_id and if it exist - just return $result of parent::read. It's wrong. In some case member_id can be present at cookie, but the returned data is empty. But this method should return string. So this is a place of my throwned errors. The red underscode is source of my script down (actually it's right.. null is not a string..but) Without this hard check all is right.
  24. Let's see in \IPS\Session\Front class. When we read session IPS do some needed stuff in the last part this method fill $this>data array per each param. One of this key is $item->data['data']. It will fill with an inline condition: 'data' => $session ? $session['data'] : '', May be ok. But after this reading we calling write method, which should update some things. But it is not doing because first line checks this condition !isset( $this->data['data'] ) This condition will be false every time, because empty is exist. It never make a trouble when you use default IPS login handler or third party, oauth and something else. But it will reproduce if you start working with $this->data, $this->setMember(..) inside hook for \IPS\Session\Front. Then this data isn't store and you have a success logged in user with session, cookies, device and all, but without $this->data['data'] info in session and in database too. I'm sure first code quote shoud be 'data' => $session ? $session['data'] : NULL, With that we get a correct result <?php $content = ''; var_dump(!isset($content)); // return bool(false) $content = null; var_dump(!isset($content)); // return bool(true) With that condition will work and store data param to database (or to redis in 4.3 ) Thanks for your advice!
  • Create New...

Important Information

We use technologies, such as cookies, to customise content and advertising, to provide social media features and to analyse traffic to the site. We also share information about your use of our site with our trusted social media, advertising and analytics partners. See more about cookies and our Privacy Policy