Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 02/07/2019 in all areas

  1. You will also come up agains this: https://github.com/processwire/processwire-issues/issues/550 This will fix that issue: $this->addHookBefore('Pages::find', function(HookEvent $event) { $selector = $event->arguments(0); if(is_string($selector) && strpos($selector, 'template=user') !== false && strpos($selector, 'name|first_name|last_name%=') !== false) { $selector .= ', check_access=0'; } $event->arguments(0, $selector); }); PS - you might need to adjust the modified selector to suit your needs - re the first_name, last_name etc
    6 points
  2. Better late than never ? ? You can use Pages::added for this: https://processwire.com/api/ref/pages/added/ And using conditional hooks (https://processwire.com/blog/posts/new-ajax-driven-inputs-conditional-hooks-template-family-settings-and-more/#new-conditional-hooks) it gets even easier and cleaner: $wire->addHookAfter('Pages::added', function(HookEvent $event) { $page = $event->arguments(0); bd($page); }); I always start with the basic hook and test it. In this case this was quite interesting, because it fired twice! The reason is that this page contains a repeater matrix that creates a page for the first (possible) item: Then you can modify the hook to be more specific: $wire->addHookAfter('Pages::added(template=basic-page)', function(HookEvent $event) { $page = $event->arguments(0); bd($page); }); Voila, it fires on the right page only: And it will not fire on any further publish/save/etc events ?
    5 points
  3. Try... 1. Create file "reset.php" containing the following (beware of non-printable characters creeping in - to be sure you could type it out rather than copy/pasting): <?php require './index.php'; // Bootstrap ProcessWire $admin = $users->get(41); // Get the default superuser by ID $admin->of(false); // Set output formatting off $admin->name = 'yourNewUserName'; // Set the name $admin->pass = 'yo123456'; // Set the password $admin->save(); // Save the user 2. Upload reset.php to the site root (where the ProcessWire index.php file is). 3. Load the file in your browser: https://guidetodrawing.com/reset.php 4. Login with the user details at: https://guidetodrawing.com/admin/ 5. Delete reset.php
    5 points
  4. I think there is still a big issue for the Functions API and variable API. As my understanding we are pushing the Functions API, however, the blog posts are still using the variable API in it's examples. I'm getting really mixed messages, are we pushing the functions API or not? I can see this starting to get really confusing for new people coming in to ProcessWire. I can see them building websites with a mix of Functions API and variable API with little understanding of the difference. For example, they may believe that to get page data you do <?= page('title') ?> but to sanatize the data you use <?= $sanitizer->text( page('title') ) ?> Honestly, I think we should just push one or the other. Sometimes using one and sometimes using the other is causing a lot of confusion. We run the risk of moving into WordPress territory where there are multiple ways of achieving the same thing. We will have people asking the questions, which one or which way is best. I just believe a decision needs to be made and run with it. At the moment, I have no idea which approach to use for my next project. I was edging towards the Functions API but I just want to use what is seen as the standard.
    4 points
  5. It's possible! From the Sanitizer class description: Cheers:)
    4 points
  6. Hey @Robin S - I agree with your analysis for sure, but I am not sure that returning the first item in that array is necessarily very helpful. I think I'd rather an error telling me that it can't determine the http root so I remember that I need to hardcode it myself. Perhaps if we could force it to return https then the first item in the array might be ok, but given that every site should now be https and not http, I think the current behavior is detrimental.
    4 points
  7. A module helping you to manage SEO related tasks like a boss! Automatically generates and maintains a XML sitemap from your pages. Includes a Fieldtype and Inputfield to manage sitemap settings and meta data for pages (Title, Description, Canonical URL, Opengraph, Twitter, Structured Data etc.) Multi language support for the sitemap and meta data. Configure default values for meta data on template level and let pages inherit or overwrite them individually. Map existing fields to meta data, reducing the need to duplicate content. Live preview for content editors how the entered meta data appears on Google. Live preview for content editors how the entered Opengraph data looks like when sharing a page with Facebook. Check out the README on GitHub for more details, including usage instructions. The module is currently released as beta and needs testing! Please report any issues on GitHub or in this forum thread, if you find time to give it a try ? Examples Here is an example of rendered meta data you will get from a single SeoMaestro field: <title>Sed dictum eros quis massa semper rutrum. | acme.com</title> <meta name="description" content="Si lobortis singularis genitus ibidem saluto. Dolore ad nunc, mos accumsan paratus duis suscipit luptatum facilisis macto uxor iaceo quadrum. Demoveo, appellatio elit neque ad commodo ea. Wisi, iaceo, tincidunt at commoveo rusticus et, ludus."> <meta name="keywords" content="Foo,Bar"> <link rel="canonical" href="https://acme.com/en/about/"> <meta property="og:title" content="Sed dictum eros quis massa semper rutrum."> <meta property="og:description" content="Si lobortis singularis genitus ibidem saluto. Dolore ad nunc, mos accumsan paratus duis suscipit luptatum facilisis macto uxor iaceo quadrum. Demoveo, appellatio elit neque ad commodo ea. Wisi, iaceo, tincidunt at commoveo rusticus et, ludus."> <meta property="og:image" content="https://acme.com/site/assets/files/1001/og-image.jpg"> <meta property="og:image:type" content="image/jpg"> <meta property="og:image:width" content="1600"> <meta property="og:image:height" content="1200"> <meta property="og:image:alt" content="Lorem Ipsum"> <meta property="og:type" content="website"> <meta property="og:url" content="https://acme.com/en/about/"> <meta property="og:locale" content="en_EN"> <meta name="twitter:card" content="summary"> <meta name="twitter:creator" content="@schtifu"> <meta name="twitter:site" content="@schtifu"> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": 1, "name": "About", "item": "https://acme.com/en/about/" } ] } </script> <meta name="generator" content="ProcessWire"> <link rel="alternate" href="https://acme.com/en/about/" hreflang="en"> <link rel="alternate" href="https://acme.com/en/about/" hreflang="x-default"> <link rel="alternate" href="https://acme.com/de/ueber/" hreflang="de"> <link rel="alternate" href="https://acme.com/fi/tietoja/" hreflang="fi"> And some screenshots of the UI:
    3 points
  8. Alternatively you can hook after ProcessPageSearch::findReady to make it a bit more specific to autocomplete:
    3 points
  9. You need to add "check_access=0" to the selector.
    3 points
  10. Hey @kongondo - I am back working on that project that makes heavy use of this field and I just replaced the: return $this->renderMarkup($page, $field); with: return true; for the sleep, wakeup, and loadPageField methods and it is bringing calls to the render method back to just one, which is really important because it contains some heavy querying. I am fine with this mod for my needs, but I wonder if you'd consider these as an option for when the module is only used in the admin. The render() method in the InputRuntimeMarkup file takes care of the actual rendering without all these duplicate calls to renderMarkup(). What do you think?
    3 points
  11. Thank you. ? I've changed that completely. Now, only a placeholder icon is moved around, not the bootstrap column (which had strange visual effects). Like this, you can also move columns in or out of containers. See new video here: http://theowp.bplaced.net/upload/novtest.html Not sure if possible without a complete rewrite. This is very bootstrap-centric. I know that everyone wants a different CSS framework, but bootstrap is not just any product, it is "the most used open-source framework in the world." https://www.keycdn.com/blog/front-end-frameworks So I don't feel that bad, with my decision. ?
    3 points
  12. 2 points
  13. Sure, I thought about something like this: $payload = $this->input->post('data'); $func = $actions[$action][0]; $options = $actions[$action][1]; $data = []; set_error_handler(...); // Setup handler // Execute whatever requested if(count($options)) $response = $func->__invoke($payload, $options); else $response = $func->__invoke($payload); if($Errs != '') // Errors happened? $data[] = (object)[ 'error' => $Errs ]; else // log data and response $data[] = (object)[ 'action' => $action, 'payload' => $payload, 'response' => $response, ]; You may even want to add a try..catch around the function invocation. I'll check later but don't see a reason why that should not work.
    2 points
  14. There is no difference for regular HTML or AJAX reply. If the error happens, PHP sends that out of band string back to the client. If you are waiting for a JSON, then this message prepends the JSON reply. Catching it with that error handler allows you to put the message into you JSON object before transmission.
    2 points
  15. Here we go: // Out of Band PHP Error grabber $Errs = ''; global $Errs; function regular_error_handler($errno, $errstr, $errfile, $errline) { global $Errs; $Errs .= "<li><b>Custom error:</b> [$errno] $errstr<br>Error on line $errline in $errfile</li>"; } set_error_handler('ProcessWire\regular_error_handler'); // assuming to operate in ProcessWire namespace // Execute some PHP $DateOutput = date('H:i', 'SomeBogusData'); $Zero = 0; $Result = 1 / $Zero; // Finally check for any out of band echo messages from PHP if($Errs != '') $content .= "Execution failed with<ul>{$Errs}</ul>";
    2 points
  16. Maybe output buffering can help in this case? Just call ob_start before executing the code and finally use ob_get_contents to check for some unexpected output. Which PHP version are you running?
    2 points
  17. I would skip this step for a while. Since he has just started to poke it with a stick, it is probably not recommended to start by updating things even though it is not WP so upgrades are generally safer in the case of ProcessWire than in the case of other CMSes, but still... If you do not give up poking it for a while, it is highly probable that you start converting your sites... Be careful though, ProcessWire is addictive ? Welcome aboard, BTW!
    2 points
  18. @bartelsmedia - thanks for the heads up. I think you can achieve your needs quite easily via the "Login Template" option. Hope that helps. @SwimToWin - sorry I let your post go by un-noticed. I am afraid I don't really have the need (and hence the time) to add a single passphrase option, but I am certainly open to a PR if you're willing. A tad OT, but I think PW needs to start fostering a culture of providing PRs more often than requests for features (both in 3rd party modules and in the core). This is absolutely not directed at you personally - I just feel like we need more contributors across the board because there are too few people being spread way too thin.
    2 points
  19. Thank you guys, The problem was eventually solved. Somebody handling the web server had left some checkbox or other unchecked and that's why nothing worked.
    2 points
  20. Follow-up for Office 365 Settings
    2 points
  21. Cheers:) Would be nice to see a little tutorial when you manage to do it ?
    2 points
  22. I'd recommend using adrians great tracy debugger module. Then you can easily (and instantly) see the content of your variables. It has lots of helpful information so you'll learn a lot quicker and it has the console, where you can try out things quickly and easily. See what you get by a simple dump - using the short syntax d()
    2 points
  23. If I understand correctly, something like this should work, let us know if you need more detail: wire()->addHookekAfter("Pages:saved", function($e){ $page = $e->arguments(0); if($page->template == "one"){ $pageTwo = $page->child("template=two"); if(!$pageTwo->id){ //create child page code and save! } } });
    2 points
  24. If for any reason, you can't get terminal access, you can add the php code to any template that already exists in the /site/templates directory and then view any page based on the template to trigger it. You won't require the first require line in that case, and don't forget to remove the password reset code again afterwards.
    2 points
  25. As you may not know the user name, create a file called "change_pass.php" on /site/templates. Put this on it: <?php namespace ProcessWire; require "./index.php"; $admin = $users->get(41); $admin->setAndSave('name', 'youNewUserName'); $admin->setAndSave('pass', 'yo123456'); Now, using a terminal, go the project directory and run the php file: cd myproject/ cd site/templates php change_pass.php Et voilà
    2 points
  26. Fear not! Reset it: https://processwire-recipes.com/recipes/resetting-admin-password-via-api/
    2 points
  27. Menu Builder As of 29 December 2017 ProcessWire versions earlier than 3.x are not supported Modules Directory Project Page Read Me (How to install, use, etc..) For highly customisable menus, please see this post. If you want a navigation that mirrors your ProcessWire page tree, the system allows you to easily create recursive menus using either vanilla PHP or Soma's great MarkupSimpleNavigation. In some cases, however, you may wish to create menus that: 1. Do not mirror you site's page tree (hirarchies and ancestry); and 2. You can add custom links (external to your site) to. That is primarily where Menu Builder comes in. It is also helpful if you: 3. Prefer creating menus via drag and drop 4. Have a need for menus (or other listings) that will be changing regularly or that you want to allow your admin users to edit. The issue of custom menus is not new here in the forums. The difference is that this module allows you to easily create such menus via drag and drop in the Admin. Actually, you can even use it to just create some list if you wanted to. In the backend, the module uses the jQueryUI plugin nestedSortable by Manuele J Sarfatti for the drag and drop and is inspired in part by the WP Custom Menu feature. Please read the Read Me completely before using this module. For Complex or highly-customised menus, it is recommended to use the getMenuItems() method as detailed in this post. Features Ability to create menus that do not mirror your ProcessWire Page Tree hierarchy/structure Menus can contain both ProcessWire pages and custom links Create menu hierarchies and nesting via drag and drop Easily add CSS IDs and Classes to each menu item on creating the menu items (both custom and from ProcessWire pages) or post creation. Optionally set custom links to open in a new tab Change menu item titles built from ProcessWire pages (without affecting the original page). E.g. if you have a page titled 'About Us' but you want the menu item title to be 'About' Readily view the structure and settings for each menu item Menus stored as pages (note: just the menu, not the items!) Menu items stored as JSON in a field in the menu pages (empty values not stored) Add menu items from ProcessWire pages using page fields (option to choose between PageAutocomplete and AsmSelect [default]) or a Selector (e.g. template=basic-page, limit=20, sort=title). For page fields, you can specify a selector to return only those specified pages for selection in the page field (i.e. asm and autocomplete) For superusers, optionally allow markup in your menu titles, e.g. <span>About</span> Menu settings for nestedSortable - e.g. maxLevels (limit nesting levels) Advanced features (e.g. add pages via selector, menu settings) currently permissible to superadmins only (may change to be permission-based) Delete single or all menu items without deleting the menu itself Lock down menus for editing Highly configurable MarkupMenuBuilder - e.g. can pass menu id, title, name or array to render(); Passing an array means you can conditionally manipulate it before rendering, e.g. make certain menu branches visible only to certain users [the code is up to you!] Optionally grab menu items only (as a Menu object WireArray or a normal array) and use your own code to create custom highly complex menus to meet any need. More... In the backend, ProcessMenuBuilder does the menu creation. For the frontend, menus are displayed using MarkupMenuBuilder. Credits In this module's infancy (way back!), I wanted to know more about ProcessWire modules as well as improve my PHP skills. As they say, what better way to learn than to actually create something? So, I developed this module (instead of writing PW tutorials as promised, tsk, tsk, naughty, naughty!) in my own summer of code . Props to Wanze, Soma, Pete, Antti and Ryan whose modules I studied (read copied ) to help in my module development and to Teppo for his wonderful write-up on the "Anatomy of fields in ProcessWire" that vastly improved my knowledge and understanding of how PW works. Diogo and marcus for idea about using pages (rather than a custom db table), onjegolders for his helpful UI comments, Martijn Geerts, OrganizedFellow, dazzyweb and Mike Anthony for 'pushing me' to complete this module and netcarver for help with the code. Screens
    1 point
  28. EDIT: Demo version download here: Hello I've been looking for a way to give "editors" a little bit more freedom regarding the layout, without having to care about CSS, Fields, Templates etc. After playing with PageTable(-Extended) and Bootstrap, this is the (intermediate) result: http://theowp.bplaced.net/upload/prev.html It is just a proof of concept atm. Does anything like this already exist for PW?
    1 point
  29. Hey guys, I haven't come across this before. I'm in a rush but didn't want to forget to ask / report this which seems weird to me. If you check the following via the http it returns the correct url $config->urls->httpRoot but if you do it via CLI then it returns the first entry in your $config->httpHosts array and gives http, rather than https. In my case I had the "dev" subdomain listed first which meant I was always getting http://dev.mydomain.com instead of https://mydomain.com Not sure if this is a bug or not, but definitely something to be aware of if you are using a service from a cronjob and you are using this to send a url for a webhook return or something along those lines.
    1 point
  30. no change. the debug bar is here, but the console does not show up:
    1 point
  31. Hm. There is no tracy-debugger permission. I created one and the console is still not there. I'm on www.t2p.test via laragon.
    1 point
  32. Hey @adrian sorry for this basic question, but what is the best/correct way to enable tracy for non-superusers on local dev? My settings now are these: But I cannot enable the console for my non-superuser?
    1 point
  33. Take your time. Maybe release it as a commercial profile/module in the future. I wouldn't mind to pay for it, at a reasonable price Cool! Swiss graphic design kind of invented the idea of a grid system ?
    1 point
  34. Thanks @bernhard! That was exactly what I was looking for. Now I'll continue down the path of learning hooks, and hopefully stop making mistakes like: $p = new Page(); $u->template = "scripts"; $u->parent = wire('pages')->get($page->id); $u->title = "Test"; $u->name = "test"; $u->save(); Which obviously just blows up in your face.?
    1 point
  35. Yes I know, but afaik, this has not much in common with the way bootstrap works, so I don't think my "Gridbuilder" is a good starting point for implementing this. I don't know if it will ever be a single module. I'd call it a "setup" because it consists of several modules, plus a basic bootstrap setup using webpack (for front and backend) plus several templates etc. Release date? Not sure, I'm moving soon, so I have a lot to do.. ?
    1 point
  36. I am very aware of what the functions API is vs the variable API. I'm mostly talking from the perspective of a new user coming into ProcessWire.
    1 point
  37. Glad you got it sorted :-). Yes. You can change the limit and lots of other similar stuff by using the filters under "What media to show". You can also configure and save a filter to be used as the default. Results can be filtered by a single or multiple criteria such as limit, title, description, tags, published, modified, etc. You can use operators such as contains text, equals, etc. The results are automatically refreshed when a filter is applied. Please see the two examples below. The first involves filtering the results directly without creating and saving the filter, although the filter will be cached and applied until the cache expires. The second one shows you how to create and save a filter that you can subsequently set as your default filter. This is especially useful if you are working in teams that need results tailored to their workflow. Please note that you may at times need to reset (rather than refresh) filters for a new one to apply due to caching. Although you can clear this type of filter directly, subsequent reloads with reload the filter as well. Hence, this type of filter persists across sessions. In the "What media to show" panel, the reset icon is the second one after the filters tab. The first icon is for refresh. Direct Filter Configure, Save and Apply Filter In this example, we classify a number of items using a common tag, 'people'. We then create a filter titled People which limits the results returned by number (2) and tag (people). Please note that you do not have to use tags if all you are interested in is limit. We only use it to enrich the example. Finally, we set People as the default filter. As a by the way, you can also use tags to filter items in the frontend using a ProcessWire selector ?.
    1 point
  38. Thanks for all the responses everyone. This is great, exactly what I was looking for ?
    1 point
  39. From a quick look, I see a typo here: <? foreach($page->we as $member); ?> It should be: <? foreach($page->we as $member): ?> Notice ":" instead of ";"
    1 point
  40. Yeah, I think you're right that this would be better.
    1 point
  41. I would: Download the files and the database Run the site locally Reset the admin user Upgrade the site to PW 3+ Work on it
    1 point
  42. One can find even more similar ones ?
    1 point
  43. Techniques to use in order to cut down on new field creation: Free: https://processwire.com/blog/posts/making-efficient-use-of-fields-in-processwire/ https://processwire.com/blog/posts/processwire-3.0.73-and-new-fieldset-types/ https://processwire.com/blog/posts/pw-3.0.87/#new-field-template-context-settings https://processwire.com/blog/posts/processwire-3.0.14-updates-file-compiler-fields-and-more/#best-practices-with-fields-and-values https://processwire.com/blog/posts/pw-3.0.106/#a-new-way-to-search-with-upgraded-tags-for-fields Paid but this money supports the project ? https://processwire.com/store/pro-fields/ https://processwire.com/blog/posts/functional-fields/
    1 point
  44. Another thing. In another almost vanilla PW installation your module runs fine. But if I change which AdminThemeUikit module should be used in the settings, and set it back to "/wire/modules/AdminTheme/AdminThemeUikit/AdminThemeUikit.module", your module still loads and destroys all styles because the css can not be loaded. The default AdminThemeUikit works again if I uninstall RockSkinUikit
    1 point
  45. Hey @bernhard. The module does not work if the admin url is not the standard "processwire" url. Somehow in one of my installations, it just returns wrong paths. Which comes from the line $file = $this->config->paths->root . trim($event->return, '/'); because $event->return has the custom admin url included. There seems to be some confusion with paths and urls?! In my case the $file in line 35 of RockSkinUikit.module it looks like this: There is one "bewerbertool-talents" directory too much. It does not exist. I can change it if I use $file = $this->config->paths->root . "site/assets/RockSkinUikit/theme.less"; But even after that, I doesn't work, because RockLess.module's getUrl function also returns a false url. I also think, that the module should remove the folder site/assets/RockSkinUikit on uninstall and restore the use of the default AdminThemeUikit. No more time to debug right now, but I hope I could help you to make the module more versatile.
    1 point
  46. I have a new favorite font: Inter Best of all, it's open-source ?
    1 point
  47. @mtcode https://processwire.com/docs/start/structure/templates/#scalability-and-customizability
    1 point
  48. Based on what you have provided so far, here are some links that may or may not help you with your situation: https://www.fastmail.com/help/technical/ssltlsstarttls.html https://www.limilabs.com/blog/ssl-vs-tls-vs-starttls-stls https://www.sparkpost.com/resources/email-explained/ssl-tls-starttls-encyption/
    1 point
  49. Hey @kongondo, I love this module and I'm featuring it in a comparison to WordPress's menu builder in my screencast series, however I feel there could be some general UI/UX improvements that can really make it feel more "native" and simplify what I feel is option overload. Please take this as constructive criticism. Here are my thoughts: Perhaps remove the ability to create multiple menus. It's a nice feature but it feels like overkill since sites typically don't have more than just a few menus. (or disable this option by default and perhaps have it enabled in the module's settings for advanced used). Perhaps add a standard "Add New" button instead that follows the typical Page creation process. For the same reasons above, remove batch actions to delete, unpublish, etc. (or disable this option by default and perhaps have it enabled in the module's settings for advanced used). When going in to edit a menu, make the first tab be "Structure" which is selected by default. This is typically the first action most people would want to take so it would feel more natural for it to be the first tab item. There should be 3 fieldsets/sections in this "Structure" tab: Add Page Add Custom Link Menu Items Perhaps simplify how you can add pages to your menu: Remove the existing 3 methods: Pages (both ASM and PageAutoComplete), Custom, Selector In regards to adding pages using Selectors, perhaps have this disabled by default, but an option that can be enabled in the modules settings. It's an advanced feature but I'd imagine wouldn't be as commonly used and therefore feels a bit overwhelming. If possible, replace with a ProcessPageList (this is what goes inside the "Add Page" fieldset). It feels like a more natural fieldtype since it uses the tree. since this would replace the ASM way of adding menu items, that means you can't change a CSS Class/ID until AFTER it's been added to the menu. I think that's OK since right now you change CSS Classes/IDs both before and after adding the menu item, which I find a little confusing. If possible, upon clicking a page to add to your menu on the ProcessPageList, it should show an "add" action/button (native ProcessPageList action stuff), that when clicked, adds the page to the actual menu (some ajax/dom manipulation required here I think) instead of putting it in a "limbo" state like it is right now until a page is saved. As far as being able to add custom links, that should go under the "Add Custom Link" fieldset. Perhaps also remove batch ability to add Custom Links and utilize general Inputfieldtext instead of a table structure. Remove ability to set CSS Class and ID at this stage. Now for the "Menu Items" section: Right now, you're utilizing custom styling and javascript for the adding page items and creating the toggle boxes, however it should be possible to use make each added menu item act as an InputfieldFieldset. When each item/fieldset is clicked, it should reveal the 5 editable fields (Title, URL, CSS ID, Class Class, New Window) and ability to delete. Apply the nestedSortable JS to that list to make it have drag/drop capability with indenting. A final result similar to this screenshot which I hacked together. "Main" tab should be renamed to "Settings". Put as second tab. "Items Overview" tab: this could be removed (or disabled by default) since it's essentially just displaying the same menu in a table. Feels repetitive. "Delete" tab should remain as is. What do you think?
    1 point
  50. Hello, I'm getting this exact error after launching a site using 2.6.1 for the first time. I ran the site through Xenu link checker to try and trigger the error message, but it ran fine, suggesting to me that the problem doesn't lie in the site templates. The System Notifications module appears to create a table in the database called field_notifications, which holds the data that is used for the notifications. It would appear that the error is being caused by a 404 error trying to be added to this table without a unique pages_id and sort. 41 is the superuser ID I believe. So essentially what is happening is the system is trying to add another record (pages_id = 41, sort = 0) when it already exists. However, I can't seem to replicate this however many times I generate a 404! Any ideas what might be generating the 404 that is causing the error? (PS - Going to disable the 404 notifications for the time being)
    1 point
×
×
  • Create New...