Leaderboard
Popular Content
Showing content with the highest reputation on 04/14/2014 in all areas
-
For our client Continental - a german based (but international selling) tire manufacturer we were asked to develop a campaign featuring their sponsorhip for the "FIFA World Cup 2014". We came up with the idea to connect a positive and fun "soccer like offline experience" with Continental as a brand and social media elements plus user generated content as a multiplicator. To encourage people sharing their experiences with others there also are pretty nice prices to be won (tickets to the World Cup in Rio including flight and accommodation). In a glance we've developed everything related to this campaign: Idea, concept, logo, text, artwork, videos, content- and seeding strategy, a lot of print-materials, apps [...]. There even is a "real" stadium which can be either obtained at one of over 6000 partner stores in Germany or they may be downloaded and handcrafted by the players themselves. The campaign has ads in some of the biggest german print magazines (i.e. Stern Magazine). The Campaigns Microsite www.paper-shot.de features: it's own blog with some external authors a retailer locator for finding participating partners (yup, that's >6k partner-pages in pw ) each having a custom set of assets which are shown to people coming from their banners or entering their partner-code custom user registration video/image uploads with a preceding approval process (the videos are first processed by a seperate media-server to serve the right formats to all devices, then reviewed and published by a team of editors afterwards) user-voting twitter & facebook integration for voting and login (not live atm due to some server problems with oauth & our reverse proxy) an unified api that makes it possible to use all of the microsites features in our apps for iOS and Android (for those interested: they are built with PhoneGap/Cordova upon the great ionicframework using HTML5 & angularjs). This was by far the biggest PW-Project we've done yet and we (again) were always happy we've chosen processwire because we definitely needed something flexible for realizing all of this features in quite a small timeframe (about 2.5 months "production" time for the microsite + the apps). Modules used: FieldtypeCropImage - for obvious reasons FieldtypeMapMarker - for generating and fetching the lat/lng for all retailers and storing the adresses ImportPagesCSV - for importing the retailers as pages InputfieldCKEditor - because it's better (and better looking) than TinyMCE ModulesManager - PageEditPerRole - for managing external authors access ProcessBatcher - bulk actions for retailers (saved us HOURS of work!) SchedulePages - show/hide blogposts by date TemplateDataProviders - MVC structure for our templates TemplateNotes - help pages for external editors TemplateTwigReplace - MVC structure & "better" templating TextformatterHannaCode - custom tags for including external services like storify in blogposts TextformatterVideoEmbed - for blog articles VersionControlForTextFields - for "security" and backup reasons + some we've written for the project (they aren't very interesting ones to release to the public)12 points
-
@Manaus To answer your question directly (but probably in-appropriately and very simplistically): any format that allows scripted actions ('pdf' with embedded JS, 'doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx' with macros) are more exploit-prone (in my view) than others. However, that does not mean that the others are exploit free. About a week ago there was an exploit announced for 'rtf' files and there have been multiple exploitable problems in rendering various image formats for years. Those file formats that require little to no interpretation to render (basically 'txt') are probably the safest - but even then, not guaranteed non-exploitable as even text files have to be displayed by something and that something might have a bug. Exploitability of a file format is not as simple as just the internal format of the file either - it will depend on both the software being used by the viewers of the uploaded files and how security aware each of them are. Software example: Some pdf viewers might have a rendering bug that allows a malicious pdf file to compromise a machine running that viewer - whilst another viewer of the same file might not be vulnerable to the same exploit. Here's a user security awareness example: Some users turn off macro scripting in MS Office/Libre office (or JS scripting in their pdf viewer) whilst others keep it set to the default or even turn it on - and are therefore more vulnerable. Some Windows users create a non-privileged account and log in under that account - and will probably not suffer from many security issues because of this one action - but the vast majority of users will stick with the initial, privileged, user account created on their machine and are therefore at high risk. To evaluate what file formats to accept on upload is going to require more input than just an answer to your initial question. Your client obviously thinks there is some value to allowing all those file types but you'll need to look at not only at how problematic the formats are that you want to allow but at the risks and probabilities of damage to the client's business of uploading a bad file in any particular format. For example: If the client only allows uploads from its IT staff and only allows its janitorial staff to download the uploaded files then the risk to the business from a bad pdf file might be close to zero. I can't really give you any advice on how to do that risk assessment other than to start asking 'what if' questions about the scenario the client is proposing to you. 'What damage would be done if a malicious, even a previously trusted, user uploaded an infected powerpoint for our Chief financial officer?' 'What damage would be if a malicious docx file could masquerade as a valid rtf file and be uploaded?' 'What if my clients don't have a clue how to secure their own user accounts?' 'What if my clients are going to trust uploaded files from any source?' Etc, Etc. HTH.5 points
-
This module facilitates quick batch creation (titles only or CSV import for other fields), editing, sorting, deletion, and CSV export of all children under a given page. You can even provide an alternate parent page which allows for editing of an external page tree. http://modules.processwire.com/modules/batch-child-editor/ https://github.com/adrianbj/BatchChildEditor The interface can be added to the Children Tab, or in a new dedicated tab, or placed inline with other fields in the Content tab. Various modes allow you to: Lister - Embeds a customized Lister interface. Installation of ListerPro will allow inline ajax editing of displayed fields. Edit - This allows you to rename existing child pages and add new child pages. It is non-destructive and so could be used on child pages that have their own children or other content fields (not just title). It includes the ability to quickly sort and delete pages and change page templates. Also allows full editing of each page via a modal dialog by clicking on the page name link. This is my preferred default setup - see how it replaces the default Children/Subpages with an easily addable/editable/sortable/renamable/deletable list. Note that the edit links open each child page in a modal for quick editing of all fields. Add - adds newly entered page titles as child pages to the list of existing siblings. You could create a list of pages in Word or whatever and just paste them in here and viola! This screenshot shows the editor in its own tab (name is configurable) and shows some of the CSV creation options. Update and Replace modes look fairly similar but show existing page titles. Update - Updates the titles (and any other fields if you enter CSV data) for the existing pages and adds any additionally entered pages. Replace - Works similarly to Add, but replaces all the existing children. There are checks that prevent this method working if there are any child pages with their own children or other content fields that are not empty. This check can be disabled in the module config settings, but please be very careful with this. Export to CSV - Generates a CSV file containing the fields for all child pages. Fields to be exported can to fixed or customizable by the user. Also includes an API export method. Populating fields on new pages In Add, Update, and Replace modes you can enter CSV formatted rows to populate all text/numeric fields, making for an extremely quick way of creating new pages and populating their content fields. Predefined Field Pairings Like the field connections setup from Ryan's CSV Importer, but defined ahead of time so the dev controls what columns from the CSV pair with which PW fields. This is especially powerful in Update mode giving editors the ability to periodically import a CSV file to update only certain fields on a entire set of child pages. These pairings also allow for importing fieldtypes with subfields - verified to work for Profields Textareas and MapMarker fields, but I think should work for most others as well - let me know if you find any that don't work. Access permission This module requires a new permission: "batch-child-editor". This permission is created automatically on install and is added to the superuser role, but it is up to the developer to add the permission to other roles as required. Config Settings This module is HIGHLY configurable down to setting up custom descriptions and notes for your editors. You define one config globally for the site and then optionally you can define completely custom configurations for each page tree parent on your site. There are too many settings to bother showing here - you really just need to look through all the options and play around with them!4 points
-
3 points
-
Just released an improved version. Two main changes: You can now limit which types of editing the users have access to. You might want to disable the Create/Overwrite mode in some cases. Note that superusers have both modes regardless of this setting. You can now add new pages using the edit mode. Docs and images in the first post have been updated3 points
-
I'm now on page 70-odd of stories on the Clients from Hell website... it's a bit addictive, and quite amusing2 points
-
I think I just put the tape box in front of him. He would need the info from it for the programme log. I resisted the temptation to look.2 points
-
Hello everyone! While there was couple of tryouts at the moment, I think PW was lacking decent HTML5 Boilerplate integration so here's a attempt to fix that. HTML5 Boilerplate for ProcessWire I took default install dump and stripped it down to bare minimum so it only includes data for Home and 404 pages + Title and Body fields. https://github.com/BlowbackDesign/PW-H5BP/blob/master/site-default/install/install.sql Default templates folder is modified so that head.inc and foot.inc contain basic HTML5-structure from H5BP and new 404.php is added for 404 page so that it matches H5BPs 404.html page (new redesigned version). Indents are switched from spaces to tabs and all elements are self closed - mostly out of personal preference. https://github.com/BlowbackDesign/PW-H5BP/tree/master/site-default/templates PW-H5BP is based on current master branch so it's little ahead of v4.3.0. Idea is to keep PW-H5BP up to date with releases of HTML5 Boilerplate.1 point
-
Caching images has not much to do with processwire in that way, images are cached by the clients web browser. And once it processed by processwire to make a thumbnail the direct URL to the image is used. Possibly when your images are generated with PHP you could set some headers to control caching. But this post on stackoverflow you might find interesting, it covers a way to embed images as base64 data in your HTML or CSS directly. http://stackoverflow.com/questions/1124149/is-embedding-background-image-data-into-css-as-base64-good-or-bad-practice1 point
-
Ok, here you go: array(13) { ["test"] string(18) "cms-with-icc_short" ["hasUsedCMS"] string(3) "6/6" ["executiontime"] string(12) "0.5492970000" ["engine"] string(18) "Apache 2.0 Handler" ["php"] string(6) "5.4.27" ["os"] string(71) "Linux 2.6.32-5-amd64 #1 SMP Mon Sep 23 22:14:43 UTC 2013 x86_64" ["imageMagick"] string(5) "6.6.7" ["imagick module version"] string(5) "3.1.2" ["imagick classes"] string(56) "Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator" ["ImageMagick version"] string(34) "ImageMagick 6.6.7-5 2011-02-05 Q16" ["ImageMagick copyright"] string(46) "Copyright (C) 1999-2011 ImageMagick Studio LLC" ["ImageMagick release date"] string(10) "2011-02-05" ["ImageMagick number of supported formats"] string(3) "194" } array(13) { ["test"] string(16) "cms-basic_visual" ["hasUsedCMS"] string(4) "0/18" ["executiontime"] string(12) "2.5764840000" ["engine"] string(18) "Apache 2.0 Handler" ["php"] string(6) "5.4.27" ["os"] string(71) "Linux 2.6.32-5-amd64 #1 SMP Mon Sep 23 22:14:43 UTC 2013 x86_64" ["imageMagick"] string(5) "6.6.7" ["imagick module version"] string(5) "3.1.2" ["imagick classes"] string(56) "Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator" ["ImageMagick version"] string(34) "ImageMagick 6.6.7-5 2011-02-05 Q16" ["ImageMagick copyright"] string(46) "Copyright (C) 1999-2011 ImageMagick Studio LLC" ["ImageMagick release date"] string(10) "2011-02-05" ["ImageMagick number of supported formats"] string(3) "194" } array(13) { ["test"] string(19) "cms-with-icc_visual" ["hasUsedCMS"] string(5) "18/18" ["executiontime"] string(12) "2.5627950000" ["engine"] string(18) "Apache 2.0 Handler" ["php"] string(6) "5.4.27" ["os"] string(71) "Linux 2.6.32-5-amd64 #1 SMP Mon Sep 23 22:14:43 UTC 2013 x86_64" ["imageMagick"] string(5) "6.6.7" ["imagick module version"] string(5) "3.1.2" ["imagick classes"] string(56) "Imagick, ImagickDraw, ImagickPixel, ImagickPixelIterator" ["ImageMagick version"] string(34) "ImageMagick 6.6.7-5 2011-02-05 Q16" ["ImageMagick copyright"] string(46) "Copyright (C) 1999-2011 ImageMagick Studio LLC" ["ImageMagick release date"] string(10) "2011-02-05" ["ImageMagick number of supported formats"] string(3) "194" }1 point
-
An awesome project! Great presentation and website.1 point
-
This looks great and I like the easy-to-follow overview on the first/root page. But if you stay about 10s on that page the bottom part somehow collapses and overlaps.1 point
-
You can simply use a textfield for an URL and also you do not need to use the WireUpload if you finally want to use the image(s) within an pw images field. For that you simply can use $page->images->add('URL_from_text'); But remember to not use $input->post->your-text-field without first validating it. You need to make sure you only got an URL!1 point
-
1 point
-
Can you not just do this when they submit the text field containing the URL? $pic->add($input->post->your-text-field); Not sure it works with URLs but that's the way to test it1 point
-
Exactly what Soma said. What you are trying to do above when you say $page->title works sounds like you're trying to find all pages with the template "child-template" that have the current page in the "provincie" field, so you don't need to do anything more complicated than this (because $page is the current page): $selects = $pages->find("template=child-template, provincie=$page->id"); Or if you don't specify a field on the end of $page then it returns the page ID anyway: $selects = $pages->find("template=child-template, provincie=$page"); It sounds like you're trying to find other pages that relate to the page currently being viewed, so you should always try matching the current page's ID, assuming "provincie" is a Page fieldtype? For that fieldtype pages are stored using their IDs. UrlSegments is just over-complicating things at this stage1 point
-
Hi apeisa, for a hobby horse project of mine - and to learn writing modules - I took the liberty to adapt your module for GitHub registration/login: https://github.com/marcus-herrmann/ProcessWire-GitHubLoginModule GitHub is using OAuth as well, so I had to more or less modify the URLs (and for some reason, giving a stream context to file_get_contents). Disclaimer: untested so far! Proof of concept.1 point
-
OK, I was looking other site profiles from modules directory and noticed that those are structured without site-default folder so I did same for PW-H5BP. I remember there was some talk just while ago about having different profiles by default at PW installation. Just can't find the thread.. Or maybe it was at GitHub. Anyways, wouldn't it be possible to offer simple drop down at first page of installer for profiles found at modules directory to choose from? Installer would then automatically replace needed files before proceeding. EDIT: Added profile to modules directory1 point
-
On a slightly related note, I've found clients to be quite happy with "I don't know, I'll find out and get back to you", but if they've got an issue and can't reach anyone at your side, they won't be happy at all. Be clear about when you're available and stick to that. The absolute worst thing you can do is making promises and setting expectations you won't be able to fulfil. An easy way to increase customer satisfaction is exceeding expectations.. and the trick to exceeding expectations is setting them at a realistic level in the first place1 point
-
Hi Sunny, That's some serious photo dashboard (koken cms). Although creating a PW admin theme is not difficult, for usage such as you require, the normal route IS NOT to create a new admin theme, but to create a Process Module. Such modules extends the PW admin. In case you didn't want editors to see the normal PW admin on login, you could make their logins redirect to your Process Module. Edit: Also have a look at Pete's Dashboard module that you can build on...1 point
-
First PW-meetup in Finland will take place at Tampere, Friday 2.5.2014, 12:00. I'll give you exact address when it's confirmed, but it will be walking distance from Tampere railway station. It will be free event for everyone. Avoine will offer some coffee and if we get really lucky, some cookies also. I think we will have something between 5-10 people coming, so it will not be that formal event. If you have anything you want to talk or show, please get in touch with me (antti@avoine.fi / 041-4383991). Anything goes - showcase something you have build, tell us about the great idea for module, propose plan that will help PW to spread in Finland etc.. After the 3 or 4 hours we can change location to pub and continue the world changing plans. No registration required, but always to happy to hear if you are coming (here or email).1 point
-
Naming convention: +1! Quality == new setting ? It was there since my very first day here. So, please call me youngster. Naming convention needs to respect cropped versions too => look here1 point
-
Hi nghi, $image->removeVariations(); If you want to do that for a whole site you do it best way with a bootstrapped script and foreach page with image(s) fields. There are a lot of examples here in the forums. If you cannot find one or have a question please come back here and ask. PS: you cannot create two files with the same width/height. If you want to compare quality, just use size(500,0) and size(501,0).1 point
-
It's definitely getting closer to being ready diogo. To be honest I hadn't really thought about automatically capturing changes - I kinda thought that was already in the works here: https://processwire.com/talk/topic/2117-continuous-integration-of-field-and-template-changes/ PTM is structured so that everything that is exported is based on the content of a parent page - all the child pages, templates, fields, page field content pages, etc. So it is designed to migrate new blocks of content. It can certainly update changes to these blocks to a live server too though. I guess it might be possible to make what you are saying work by using "Home" as the parent page of the export, so changes to the entire site are migrated. The automatic recording of changes so that the JSON file only contains changes is obviously the tricky part I'll read through mindplay.dk's experience in detail and see what suggestions I can garner. Off the top of my head I am thinking that maybe a simple approach might work - use the module's config data field to store and add to an array of pages, fields, and templates that change, captured whenever they are saved. That way I am not trying to record exactly what all the changes are, but rather just that something changed and therefore we should add that page/field/template to the list of things that needs to be exported. I'll think about it some more!1 point
-
And worth mentioning <?php foreach($pages as $page): ?> // do something here in mixed html & php // probably a few lines of it <?php endforeach; ?> It makes code much more readable, but you would expect to use this most in output templates, where there is a lot of html going on.1 point
-
I'm not sure why you're converting that date to Unix timestamp, but that's probably why this is failing. Try something along these lines instead: wire('db')->query("UPDATE pages SET created='2012-11-15' WHERE id={$page->id}"); The type of db field created is timestamp, which doesn't by default accept Unix timestamps (...) as it's value.1 point