Jump to content


  • Content Count

  • Joined

  • Last visited

Community Reputation

9 Neutral

About cosmicsafari

  • Rank
    Full Member

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Thank you for the suggestions. I did have a look at the content within the BCE module but found it hard to follow. Its a fantastic module but its far more advanced than anything I have ever put together but I will continue to look into it. Apologies I should have mentioned it does work with a small enough CSV file. However I will make some changes and see how I get on. I'm not sure if its relevant but the storage engine of the database is InnoDB.
  2. Hi all, Just looking for some advice. I have created an admin page where the user can upload a fairly simple csv, in order to create a bunch of pages in batch. I have recently been trying to update it so that it wipes the existing pages created by the last upload before creating new pages based on the newly uploaded CSV. I'm obviously missing something as any CSV or indeed any attempt to batch import/delete always results in a 504 Timeout. Figured this was just something we would just have to work around and likely due to server constraints. However I recently installed the Batch Child Editor module (http://modules.processwire.com/modules/batch-child-editor) out of curiosity. Anyway too my point, I can use this module to delete the same number or indeed import the same number of items that my implementation struggles to cope with. So I was hoping if I posted a snippet of my own simple version, I could get some pointers as to where we think the bottleneck is as im clearly doing something wrong. Any thoughts and advice are welcome. <?php if ( isset($_POST["submit"]) ) { if ( isset($_FILES["file"])) { //if there was an error uploading the file if ($_FILES["file"]["error"] > 0) { echo "Error Uploading File (Return Code: " . $_FILES["file"]["error"] . ")<br />"; } else { $created = 0; //if file already exists if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { //Store file in directory "upload" with the name of "uploaded_file.txt" $storagename = "../assets/csv/uploaded_file.txt"; move_uploaded_file($_FILES["file"]["tmp_name"], $storagename); if(($handle = fopen($storagename, 'r')) !== false) { // get the first row, which contains the column-titles (if necessary) $header = fgetcsv($handle); $x=0; $group_settings = wire('pages')->get('name="group-settings"'); // loop through the file line-by-line while(($data = fgetcsv($handle)) !== false) { $lng = $data[0]; $lat = $data[1]; $name = $data[2]; $contact = $data[3]; $email = $data[4]; $phone = $data[5]; //CREATE error_log('('.$name.') CREATE'); $p = new Processwire\Page(); $p->template = 'group'; $p->name = $name.'('.$lat.','.$lng.')'; $p->title = $name.'('.$lat.','.$lng.')'; $p->parent = $group_settings; $p->text_a = $name; $p->text_b = $contact; $p->group_location->lat = $lat; $p->group_location->lng = $lng; $p->email = $email; $p->phone_number = $phone; $p->save(); $created++; unset($data); } fclose($handle); } } } } else if ( isset($_REQUEST["delete"]) ) { //Delete existing locations $p = $pages->get('/settings/group-settings/'); foreach($p->children as $child){ $child->delete(); } } else { echo "No file selected <br />"; } } ?>
  3. Managed to solve my issue, documenting what I done here for others and future reference. So basically I never actually figured out the specifics of what was causing the fatal error, however as mentioned previously it did seem related to the custom module that was setting up numerous webhooks. After trying numerous things, I ended up deleting the contents of the cache table within the database, which got rid of my inital fatal error and let me render pages. Now that I could see pages, albeit with some errors I was able to then log into the backend. Wherein I refreshed the module cache which appears to have resolved the issue. Hopefully the above will be of use to someone in future... more than likely myself as I have a habit of running into the same odd errors. ๐Ÿ˜‹
  4. Thanks for that, clears things up a bit for me. Useful information for future reference ๐Ÿ˜‹
  5. Hi all, I have need to disable a module but the module itself is causing a fatal error on every page so I can't actually get into the backend to do it as normal. The fatal error is also occuring before I can even run $modules->uninstall("ModuleClassName");๏ปฟ to disable it via the code. Any ides what database tables I would need to edit in order to safely disable only the module in question? Also while im on the subject, what is the signifcance of the flag column within the modules table of the database, struggling to find any documentation about the DB structure generally.
  6. So I have done some more digging with this one and worked backwords to find that the issue appears to be the one of the many $page->render calls within ProcessPageView.module, within the __execute method to be precise. Aside from that im still completely stumped as to why it wouldn't be callable. Find it quite strange as at first I thought maybe it couldn't get the page object in order to run the render method, but I added in some logging within ProcessPageView.module around the offending lines of code. I can get the page title & according to gettype() its an object, so im well confused at this point. ๐Ÿค” The code of the __execute method, including my added logging incase its of any use: public function ___execute($internal = true) { error_log('ProcessPageView'); if(!$internal) return $this->executeExternal(); $this->responseType = self::responseTypeNormal; $config = $this->config; $debug = $config->debug; if($config->usePoweredBy !== null) header('X-Powered-By:' . ($config->usePoweredBy ? ' ProcessWire CMS' : '')); if(is_array($config->pageNumUrlPrefixes)) foreach($config->pageNumUrlPrefixes as $prefix) { $this->pageNumUrlPrefixes[$prefix] = $prefix; } if(!count($this->pageNumUrlPrefixes)) { $prefix = $this->config->pageNumUrlPrefix; if(strlen($prefix)) $this->pageNumUrlPrefixes[$prefix] = $prefix; } $this->pages->setOutputFormatting(true); if($debug) Debug::timer('ProcessPageView.getPage()'); $page = $this->getPage(); if($page && $page->id) { if($debug) Debug::saveTimer('ProcessPageView.getPage()', $page->path); $page->setOutputFormatting(true); $_page = $page; $page = $this->checkAccess($page); if(!$page || $_page->id == $config->http404PageID) { return $this->pageNotFound($_page, $this->requestURL, true, 'access not allowed'); } if(!$this->delayRedirects) { $this->checkProtocol($page); if($this->redirectURL) $this->session->redirect($this->redirectURL); } $this->wire('page', $page); $this->ready(); $page = $this->wire('page'); // in case anything changed it if($this->delayRedirects) { $this->checkProtocol($page); if($this->redirectURL) $this->session->redirect($this->redirectURL); } try { $this->wire()->setStatus(ProcessWire::statusRender); if($this->requestFile) { $this->responseType = self::responseTypeFile; $this->sendFile($page, $this->requestFile); } else { $contentType = $page->template->contentType; error_log('Page: '.$page->title); error_log(gettype($page)); if($contentType) { if(strpos($contentType, '/') === false) { if(isset($config->contentTypes[$contentType])) { $contentType = $config->contentTypes[$contentType]; } else { $contentType = ''; } } if($contentType) header("Content-Type: $contentType"); } if($config->ajax) { $this->responseType = self::responseTypeAjax; return $page->render(); } else { error_log('ERRORS AT THIS POINT'); return $page->render(); } } } catch(Wire404Exception $e) { return $this->pageNotFound($page, $this->requestURL, false, '404 thrown during render'); } } else { return $this->pageNotFound(new NullPage(), $this->requestURL, true, 'requested page resolved to NullPage'); } }
  7. It occurs regardless of the debug settings and happens on every page, can't access admin login page to get any further. I'm just about to try it out on a machine running PHP 5.6, out of curiosity to see whether I run into the same error. From doing some more investigations, I think it may be related to a custom module which appears to use a lot of web hooks.
  8. Hi all, Starting work for a new client, so pulled down a copy of their existing PW site. All looks normal in terms of the codebase structure, set it up as I would normally for any PW site yet I everytime I attempt to view a page I get: From what I can gather its running PW version 2.8. On the live environment where I copied it from and its working fine, they are apparently running PHP 7.1 whereas I am running PHP 7.3 locally, just incase that may be a cause for the issue. Any ideas as nothing seems obvious to me at this point.
  9. Thats exactly the kind of thing I was looking for! ๐Ÿ˜ If im ever anywhere near Munich i'll buy you as many beers as you can drink ๐Ÿ‘
  10. Hi all, This is probably a stupid question but is there anyway to select from the database all the images as Pageimage objects? The idea being so that I could have just a 1 level deep array of Pageimage objects so that I can loop through and run the removeVariations() method on them? My original idea was something along the lines of: $query = $this->database->prepare('SELECT name FROM FIELDS WHERE TYPE = "FieldtypeImage"'); $query->execute(); $results = $query->fetchAll(); foreach ($results as $row) { $query = $this->database->prepare('SELECT * FROM FIELD_'.$row[0]); $query->execute(); $images = $query->fetchAll(); foreach($images as $image){ // my thinking was at this point if said results where Pageimage objects or // could be turned into one I could then run the removeVariations() method on them ie. // $image->removeVariations() } } I tried working with the above results within my module code but I could never get them into the correct context to run the method in question. The above implentation obviously doesn't work but is the idea sound? Could it ever work in this fashion or do you only have access to Pageimage::removeVariations() in the context of starting with a page selection ie. $page->image->removeVariations(); The reason I ask is that I have a solution using the built in selectors which partially works. However it comes up short when attempting to remove the image variations for image fields within repeaters, theres also the issue of images fields within nested repeaters. Any ideas are much appreciated.
  11. So if im understanding that correctly then its doesn't create them anew like $page->image->width() would, rather it attempts to recreate them using what already exists? That definitely would explain the results I was seeing, as it did work if some variations existed already but not if it was just the originals.
  12. Hi all, Just wondering if someone with a bit more PW knowledge than me could give a run down of what this method actually does and how its achieved. I get that it rebuilds image variations but based on what settings? If I wanted to rebuild all the websites image variations but at say a reduced image quality can this be set somewhere globally that this method would take into account? For some context I have built a fairly simple module to delete all the image variations connected to any FieldtypeImage which is being used on the website, for the most part this works quite well. As I was quite happy with how that turned out I figured I would give the module another option to rebuild the images also. So there would be a 'Remove' and 'Rebuild' button on the modules config page. The idea being that I could use this tool to delete all the image variations, update some global settings then regenerate them all but currently it doesn't appear to do that. I assume this is either because my codes borked or im misunderstanding something fundamental about how rebuildVariations() works.
  13. Thanks for the replies folks. Given the above response does the following hypothetical setup sound reasonable. Primary DB with mirrors hosted on Azure Rsync contents of Assets/Files folder between primary server and mirrors Enable database driven sessions, that way we don't need to copy Assets/Sessions between the servers Obviously thats very vague in the details but as a general proposal is there anything glaring wrong with this approach?
  14. Hi all, I have been asked by a client whether we can setup load balancing for their existing Processwire site. From my investigations on Google and within these forums, it definitely seems possible but as a newbie with a basic understanding of the subject im a bit lost. Does anyone know of any existing tutorials for settings up load balancing with PW? What items would need to be changed on their current stand alone install, is there a list of best practices worth consulting etc? As I understand it we would need to have some sort of copying mechanism (rsync script most likely) in order to make sure any uploaded assets are shared between the main server and the fallback ones, other than that im not sure what else would need to be ammended. Any thoughts/help would be greatly appreciated.
  15. Good to know im not going mad and its supposed to work that way. Both seem like good solutions, will try both and see which works best for my project. Many thanks! ๐Ÿ‘
  • Create New...