Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 07/20/2015 in all areas

  1. None of the things you've mentioned here are impossible, and all of them are very much doable with ProcessWire. This does sound like a big project, though, so better make sure you're up to it before signing up for anything. Just a few quick notes on the specific parts: Time banking system sounds like it could be a lot of work. You'll spend quite a few hours putting that together, so especially if this is a paid client project, make sure that you've made a list of features, proper plans, and estimates beforehand. The larger the scope of the project, the easier it is to miscalculate the amount of work, so leave enough room for surprises and mistakes in your estimates. Same thing goes for the messaging system, though this depends a lot on how it's actually supposed to work. "Internal messaging system" alone isn't a very good description. If it's just about leaving messages for other users, that's not particularly complicated, but you'll need to make sure it's secure. Privacy is a very big deal in a system like that. Registered users should probably be actual ProcessWire users, so that you can let the system itself handle authentication etc. That's the complicated stuff after all. Registration state sounds like something that could be a custom field on the user template. For the viewable user profiles profiles the support for multiple user templates and parents could come in handy. The best way to handle payments / subscriptions depends on a lot of things. Check out various payment services available and see how those fit your needs. Building a payment system from scratch would be a lot of unnecessary hassle you really don't want to get into. Not sure how much this helps, except for (hopefully) making it obvious that this sounds like a pretty big project. In the end the question here is not so much whether ProcessWire can handle this – it's more about whether you can handle this
    2 points
  2. With respect, it may be doing what it's meant to do but it's also doing what it's not meant to do - by that I mean according to a literal interpretation of the preceding comments in that section of the file. Certainly http://mydomain.com/ would be redirected to http://www.mydomain.com. I wanted it to do that. What I didn't want it to do is redirect http://cdn.mydomain.com to http://www.cdn.mydomain.com which it did too. It took me hours to work out that this was what was causing my first ProCache CDN integration to fall over. Like most problems, easy enough to fix once one has identified it but a pain in the rear until then. Only a word or two more about the impact on sub domains would help and explaining that one can exclude them from the rewrite by adding them to the condition e.g. RewriteCond %{HTTP_HOST} !^(www|sub1|sub2)\.[NC]
    2 points
  3. I would say, admittedly without knowing Airbnb itself too well, that ProcessWire is a great platform for something like this. Such a project will involve quite a bit of custom work, from the registration and access management to reviews, but that you probably already knew. There are some modules that could come in handy, especially for the access management part. I'd check out Dynamic Roles, at least. Access management and registration are the parts you'll want to get right on the first try, as those are security-wise potential weak spots of just about any site or application out there. It's easy to model, manage, and query all sorts of data with ProcessWire, making things like complex searches easy to set up. In large scale you'll need to be careful with your limits (querying is relatively cheap, but fetching hundreds or thousands of results in memory is not; always define sensible limits and use built-in paging!) and you'll also want to test things out properly before letting too many users in. ProcessWire is known to scale well into millions of pages, but considering that usually (almost) everything is a page, that's not an impossible number to reach, of course depending on how you build this platform. I'd suggest taking a closer look into the (commercial) ProFields module package, as it could potentially boost the performance of certain parts a lot (thinking of things like reviews here, which might make more sense as Table rows than actual Pages; the built-in comments module is another solution that could work). I wouldn't worry about this solution scaling indefinitely right now; ProcessWire will scale pretty far, and if this service does indeed become hugely popular, eventually you'll have to go through a lot of hoops to get it running smooth no matter what technology you choose. Pretty much every big platform out there has gone through more than one more-or-less complete rewrite. That's not bad planning – it's simply smart to start with something that makes things easy (and relatively cheap) to get up and running, and worry about massive scale if/when you actually get there.
    2 points
  4. Ok, polished this a bit and got rid of the Chrome error - unfortunately only by using setTimeout so it's not perfect. There are some settings to tweak. Update: see latest release and info in first post.
    2 points
  5. Update: Latest release and documentation is available here: https://github.com/rolandtoth/FrontEndEditLightbox Modules directory: http://modules.processwire.com/modules/front-end-edit-lightbox/ ----------------------------------------------- Just implemented my front-end edit feature, minimal style I know there's many other solution to this but I tried making something much simpler to implement. The result is one JavaScript snippet - no css, external js dependency, module, etc. It uses the admin's Magnific Popup because it's always at hand and works just fine. The page automatically reloads on closing the lightbox, but only if the page was saved (via localStorage). You can also list jQuery selectors to hide items in the admin (see "selectorsToHide"). Usage Add the edit link to your template file (see code below) and copy the following to your main .js file.
    1 point
  6. Dynamic Roles are a powerful access control tool for ProcessWire. They pick up where traditional roles leave off, and allow you to assign permissions at runtime based on any factor present with the user. Once a user receives one or more dynamic roles (at runtime), those dynamic roles then specify what pages the user can view, edit, or add children to. If traditional roles are a sledgehammer, Dynamic Roles are a scalpel, allowing nearly any finely tuned access control scenario. Traditional ProcessWire roles are limited to assignment of view/edit/add access on a per-template basis. Dynamic roles go outside those limitations and enable you to assign that access based on any factors present with a page (i.e. match any field values). Dynamic Roles assign new access, but do not revoke existing access provided by traditional roles. As a result, Dynamic Roles can be used together with traditional roles, and the two work beautifully well together. Though Dynamic Roles can also replace all situations where you would use traditional roles for access control assignments. If using Dynamic Roles to assign page-view access, you would typically want to use traditional roles to revoke view access from at least the "guest" role at the template level. Then use Dynamic Roles to assign view access to those pages in a more granular manner. This module directly affects the results of all page getting/finding operations by applying the access control directly to the database queries before pages are loaded. As a result, it is fast (regardless of scale), pagination friendly, and requires no further intervention by the developer other than configuring the dynamic roles as they see fit. Because it relies upon new features present only in ProcessWire 2.4.6+, it requires the current dev branch. Sponsored by Avoine Concept by Antti Peisa Code by Ryan Cramer PLEASE NOTE: This module is in pre-release state (like the PW dev branch it requires) and is not recommended for production use just yet. Though we do appreciate any testing and/or feedback that you are able to provide. While not required, this module benefits from ProFields Multiplier. If you have ProFields Multiplier installed before installing this module, it will make this module more powerful by making all of your access control selectors have the ability to use OR-group conditions. Depending on your access control needs, this enables you to accomplish more with fewer Dynamic Roles. How to install Make sure you are running ProcessWire 2.4.6 (dev branch) or newer. Download from GitHub (we will add this module to the Modules directory later). Place all files from this module in /site/modules/DynamicRoles/. In your admin, go to Modules > Check for new modules. Click "install" for the Dynamic Roles module (ProcessDynamicRoles). Click to Access > Dynamic Roles for the rest (see example and instructions below). Example and instructions Lets say you ran a Skyscrapers site and wanted a role enabling users with "portmanusa.com" in their email address to have edit access to skyscrapers designed by architect John Portman, with at least 40 floors, and built on-or-after 1970. Yes, this is an incredibly contrived example, but it is an example that also demonstrates the access control potential of this module. 1. In your admin, you would click to Access > Dynamic Roles. 2. Click "Add Dynamic Role". Enter a name for the dynamic role, like: "skyscraper-test-editor" and save. 3. Under "Who is in this dynamic role?" section, click "Add Field" and choose: Email => Contains Text => "portmanusa.com". This will match all users having "portmanusa.com" in their email address. 4. Under "permissions" check the boxes for: page-view and page-edit. 5. For this contrived example, we will assume the user already has view access to all skyscrapers, so we will leave the "What can they view?" section alone. 6. For the "What can they edit?" section: Click "Add Field" and choose: template => Equals => Skyscraper. Click "Add Field" and choose: architect => Equals => John Portman. Click "Add Field" and choose: floors => Greater Than Or Equal => 40. Click "Add Field" and choose: year => Greater Than Or Equal => 1970. 7. Click Save. Now users matching the conditions of your dynamic role will be able to edit the matching pages, but not any others (unless assigned by traditional roles).
    1 point
  7. http://mnt.io/P/2015-07-13_sabre-katana_a_contact_calendar_task_list_and_file_server.html https://github.com/fruux/sabre-katana Thought you guys might be interested in this.
    1 point
  8. So this is basically a recreation of a menu tutorial from W3Bits, tweaked to include the Advanced checkbox hack. Demo. Even the Advanced hack itself was tweaked: apparently this bit is causing issues with Safari, so I removed it: @-webkit-keyframes bugfix { from {padding:0;} to {padding:0;} }I found this particular configuration to work quite nicely. A previous menu I tried had a problem with the menu items staying expanded between media query breakpoints, when resizing the browser. Below is the CSS for the menu. You will notice that it is mobile-first: /* Menu from http://w3bits.com/css-responsive-nav-menu/ */ /* Note: the tutorial code is slightly different from the demo code */ .cf:after { /* micro clearfix */ content: ""; display: table; clear: both; } body { -webkit-animation: bugfix infinite 1s; } #mainMenu { margin-bottom: 2em; } #mainMenu ul { margin: 0; padding: 0; } #mainMenu .main-menu { display: none; } #tm:checked + .main-menu { display: block; } #mainMenu input[type="checkbox"], #mainMenu ul span.drop-icon { display: none; } #mainMenu li, #toggle-menu, #mainMenu .sub-menu { border-style: solid; border-color: rgba(0, 0, 0, .05); } #mainMenu li, #toggle-menu { border-width: 0 0 1px; } #mainMenu .sub-menu { background-color: #444; border-width: 1px 1px 0; margin: 0 1em; } #mainMenu .sub-menu li:last-child { border-width: 0; } #mainMenu li, #toggle-menu, #mainMenu a { position: relative; display: block; color: white; text-shadow: 1px 1px 0 rgba(0, 0, 0, .125); } #mainMenu, #toggle-menu { background-color: #09c; } #toggle-menu, #mainMenu a { padding: 1em 1.5em; } #mainMenu a { transition: all .125s ease-in-out; -webkit-transition: all .125s ease-in-out; } #mainMenu a:hover { background-color: white; color: #09c; } #mainMenu .sub-menu { display: none; } #mainMenu input[type="checkbox"]:checked + .sub-menu { display: block; } #mainMenu .sub-menu a:hover { color: #444; } #toggle-menu .drop-icon, #mainMenu li label.drop-icon { position: absolute; right: 0; top: 0; } #mainMenu label.drop-icon, #toggle-menu span.drop-icon { padding: 1em; font-size: 1em; text-align: center; background-color: rgba(0, 0, 0, .125); text-shadow: 0 0 0 transparent; color: rgba(255, 255, 255, .75); } label { cursor: pointer; user-select: none; } @media only screen and (max-width: 64em) and (min-width: 52.01em) { #mainMenu li { width: 33.333%; } #mainMenu .sub-menu li { width: auto; } } @media only screen and (min-width: 52em) { #mainMenu .main-menu { display: block; } #toggle-menu, #mainMenu label.drop-icon { display: none; } #mainMenu ul span.drop-icon { display: inline-block; } #mainMenu li { float: left; border-width: 0 1px 0 0; } #mainMenu .sub-menu li { float: none; } #mainMenu .sub-menu { border-width: 0; margin: 0; position: absolute; top: 100%; left: 0; width: 12em; z-index: 3000; } #mainMenu .sub-menu, #mainMenu input[type="checkbox"]:checked + .sub-menu { display: none; } #mainMenu .sub-menu li { border-width: 0 0 1px; } #mainMenu .sub-menu .sub-menu { top: 0; left: 100%; } #mainMenu li:hover > input[type="checkbox"] + .sub-menu { display: block; } }Below is the markup outputted using mindplay.dk's method. I found it impossible to output with MarkupSimpleNavigation or MenuBuilder. The homepage is added as the first top-level item. Notice the onclicks that make it work on iOS < 6.0. The clearfix class cf for the top ul is important. Otherwise the element will have no height (got bitten by this..). <nav id="mainMenu"> <label for='tm' id='toggle-menu' onclick>Navigation <span class='drop-icon'>▼</span></label> <input id='tm' type='checkbox'> <ul class='main-menu cf'> <?php /** * Recursive traverse and visit every child in a sub-tree of Pages. * * @param Page $parent root Page from which to traverse * @param callable $enter function to call upon visiting a child Page * @param callable|null $exit function to call after visiting a child Page (and all of it's children) * * From mindplay.dk */ echo '<li><a href="' . $pages->get(1)->url . '">Home</a></li>'; function visit(Page $parent, $enter, $exit=null) { foreach ($parent->children() as $child) { call_user_func($enter, $child); if ($child->numChildren > 0) { visit($child, $enter, $exit); } if ($exit) { call_user_func($exit, $child); } } } visit( $pages->get(1) , function(Page $page) { echo '<li><a href="' . $page->url . '">' . $page->title; if ($page->numChildren > 0) { echo '<span class="drop-icon">▼</span> <label title="Toggle Drop-down" class="drop-icon" for="' . $page->name . '" onclick>▼</label> </a> <input type="checkbox" id="' . $page->name . '"><ul class="sub-menu">'; } else { echo '</a>'; } } , function(Page $page) { if ($page->numChildren > 0) { echo '</ul>'; } echo '</li>'; } ); ?> </ul> </nav>Edit: fixed the end part, thanks er314.
    1 point
  9. Thanks! Setting autoload to true actually didn't work, but it is simply enough for me to put this in my register.php: $modules->get('EmailAdminNewUser'); Now I will get admin emails for users that have registered!
    1 point
  10. Reminds me of the old Scooby Doo cartoons and their cut-in sequences
    1 point
  11. Best listing ever found on this to share for you: http://ma.juii.net/blog/time-banking-software-recommendation regards mr-fan
    1 point
  12. fredi had problems with fields that are not full width and (as far as I remember) it closes the modal even when there are errors (eg. required fields not entered). I think new version of fredi is using "native page editing". As I can see on the video at the provided link, your version of edit-shortcuts also requires manual page reload?
    1 point
  13. Can you try it like : wire('modules')->get('FrontendUser')->form->fhSubmitBtn->error('reCAPTCHA validation not ok!'); And also you can use loaded modules or variables like this : $form->addHookAfter('processInput', function() use($fu, $recaptcha, $input) { $recaptchaverify = $recaptcha->verifyResponse($input->post('g-recaptcha-response')); if(!$recaptchaverify) { $fu->form->fhSubmitBtn->error('reCAPTCHA validation not ok!'); } });
    1 point
  14. Hey J0sh, I "hacked" a little workaround into the module file, because I was too lazy to hook into the method! Maybe it helps you until Antti has a finalized fix! foreach ($form as $f) { // Let's be extra careful here, since we can have all kinds of textfields in use if (is_string($f->value)) { $value = $this->sanitizer->purify($f->value); $this->order->{$f->name} = $this->sanitizer->entities1($value); } else { $this->order->{$f->name} = $this->sanitizer->entities1($f->value); } } Greetings!
    1 point
  15. Ok I've found the issue! Cause of my issue: I batch assigned the registered_user role to a bunch of users on my website. But in doing so I also assigned the registered_user role to the default guest user. This of course caused anyone who was not logged in to have the registered_user role and made them able to view pages they weren't supposed to. Sorry for overlooking this issue before posting here and thanks again for your help everyone!
    1 point
  16. ProCache is a paid version cache module ! Do not compare this free module with paid modules but if you know how to extend module you can do it like ProCache or better than it ! Build-in cache module is only support database cache, on the templates side its support files cache but you can't use it for custom uses. I used both of them there is no place for expire time set option, cached data info or clear cache section etc.. If you check phpfastcache offical website you will see advantages of using this module. For example you can use multiple cache drivers in same time with different options or you can set a default options for use any where. You can set expire date, you can clear cached data (for files, sqllite drivers), and you can set the what need to do after a page modified etc..... Here is my website : http://altivebir.com/ using this cache module.
    1 point
  17. The user image is now displayed correctly. Thanks I also tried to reproduce that bizarre rotation (same Chrome version, PW 2.6.8 as well as 2.6.9, Mac). But everything works as expected. One more little thing: I changed the user display name field in module settings and used the build in "title" field. This field is of type FieldtypePageTitle and won't be displayed. Could you add this to the allowed text field types please? AdminThemeRenoHelpers.php - if($field instanceof Field && ($field->type == "FieldtypeText" || $field->type == "FieldtypeConcat")){ + if($field instanceof Field && in_array($field->type, array('FieldtypeText', 'FieldtypeConcat', 'FieldtypePageTitle'))){
    1 point
  18. Hi guys, So, here is our latest creation. http://wine-route-georgia.com/ Wine Route Georgia provides exclusive tailored tours throughout Georgia including wine tastings and vinery visits. We were lucky to have a great set of images to work with, so we decided to design the website around them. The strategy was to keep the images in the background with a very slow slideshow, and for this we had make sure that it wouldn't be interrupted while the user navigates the content. Enter AJAX: Obviously the only way to do this is to use AJAX to get the requested content. We wanted the URLs to work normally and used this technique to make sure everything would work flawlessly http://rosspenman.com/pushstate-jquery/ . On PW the work was not different than a normal website with separate pages (including header and footer) since all the work is done with JS. The slideshow is quite complicated because it works differently when in responsive mode. On smaller devices, the slideshow pauses and becomes draggable. On larger devices you can call a grid with all images and select the one you want to see next. This is a completely custom behaviour for a slideshow and of course there is no jQuery plugin that does this by default, but after some frustration I found a plugin with an excellent API that allowed me to program it exactly how we wanted http://kenwheeler.github.io/slick/ Hope you like it.
    1 point
  19. That's awesome Peter - shame it's not intentional.
    1 point
  20. @Fester your settings look correct to me. A page using that template would only be visible to superuser, editor and registered user roles. So something must be overriding access control in your case, like Teppo suggested. Double check that you are testing with a guest user. By that, I mean logout and test, open in different browser (that's not logged in), or open the page in an Incognito/Private window. I think Teppo mentioned all the possible things, and I don't have more to add to it, but please let us know what you find.
    1 point
  21. Your interpretation is correct, and the settings you've posted here should indeed deny access to the page for guests (non-logged-in users). Testing on the 2.6 branch, I can't seem to easily reproduce similar issue. There's a couple of things I'd like to check first, though: Do you have any additional permission-related modules installed – Dynamic Roles, UserGroups, PageEditPerUser, anything like that? Any other modules you can think of that could cause this behaviour? Do you have any third party modules installed at all? Are you absolutely sure that the page that is publicly viewable is using this template? Just trying to be extra thorough here Do you have any kind of caching going on, a proxy running in front of the site, content cached in CloudFlare, etc.? All in all this kind of issue would be much easier to debug if there was some way to see it in action, and/or if you could provide easy steps for reproducing it on a clean install of ProcessWire. It would be very helpful if you could test this with a clean installation, and see if it happens there too; if not, it could be something weird with this particular site, but at least that would give us some pointers about what to check next.
    1 point
  22. The BMW Dealersites is a collaboration of various BMW dealers, brought together in a multisite ProcessWire setup with centralized and per-dealer contentmanagement possibilities. For anyone interesed, below a quick glance at the multisite pagetree: BMW enforces strict design guideliness for all websites that are built carrying the BMW logo. The guideliness are extensive but can be considered a bit outdated, since they do not take responsive possibilities into account yet. We managed to implement a responsive setup nevertheless, still complying to the guideliness. Which was quite a struggle, I can assure you As mentioned, the Dealersites is a collaboration of various BMW dealers. The idea is that all dealersites are basically the same (fields and templates), yet content may vary. This enabled us to create a centralized content module, in which content can be added and copied to all underlaying dealersites, minimizing the efforts needed to add and maintain content. See the screenshot below for an impression on how this works. We have been experimenting with hosting a bit. The sites are hosted using various Docker instances on an Amazon EC2 server, and mails are sent using Amazon SES. In the near future we plan on implementing ProCache3 with Amazon CloudFront. If you need any info on our experiences with this, just drop a line in this topic or sent me a DM. We have used quite a few modules, but nothing exotic. FormBuilder was used to create forms, some of which are handled by a third party URL to have added functionality: shooting Leads to an external webservice for example. The dealersites: http://www.vanlaarhovenbmw.nl http://www.vanhooffbmw.nl http://www.demaassche-venlo.nl http://www.demaassche-echt.nl http://www.nobracars-uden.nl http://www.nobracars-helmond.nl http://www.story-denbosch.nl http://www.story-waardenburg.nl http://www.story-nijmegen.nl Splashpages: http://www.nobracars.nl http://www.demaassche.nl http://www.bertstory.nl Work was done by us at X-com
    1 point
  23. so that means 2 weaks of work, if i translate 10 files a day. gonna do it sometime
    1 point
  24. Hi Fred Just in regards to this comment above - your other thread was posted on a Friday and it's the weekend so I'm sure people will chime in during the week if they can help (the forums are almost always quieter on the weekend). Any replies in the forums are from community members giving up their time to help - there is no guaranteed support, so please be patient if you don't receive any replies for a day or two when posting.
    1 point
  25. And what's about the risc, that when once finished translating a huge text to 12 languages, hitting that button by accident?
    1 point
  26. Hi SadlyMistaken....I am sorry that you are "sadly mistaken" about two things [sorry, I couldn't resist!] : You are not disturbing me and you shouldn't apologise - you are too kind! The module is not RIP - it is a bit dormant though.....but we will get back to it sometime. Wanze (see posts above) and I who were working on this are currently very much occupied and haven't had much time to give some love to this module. Hopefully this will change soon. Meanwhile, you can have a look at the helper class on Wanze's Github. Currently, there is no Admin interface for the module. This alpha version is primarily for developers. Eventually, an Admin UI (Process Module) will follow... Cheers /k
    1 point
×
×
  • Create New...