text:
IT for government and public sector
Andy Dean - Fotolia
CEO Natalie Ceeney to quit the Courts Service
Courts and Tribunal Service CEO Natalie Ceeney's sudden departure raises questions on the future of digital courts
Barbara Hewson
Natalie Ceeney, CEO of the Court Service, unexpectedly quit on 5 May 2016, after just more than a year in the job.
Ceeney was tasked with leading the drive to take the court service online by 2020. Her sudden departure has generated some muted glee among legal professionals.
Ceeney, who formerly worked at HSBC, had only been in post 16 months. On 14 April 2016, she announced that she was taking on the role of civil service health and well-being champion, suggesting her sights were set elsewhere.
This "digital courts" programme is the brainchild of Brian Leveson, the Court of Appeal judge who also chaired the inquiry into press ethics. At Southwark Crown Court, for example, juries in complex fraud cases have been given the court documents digitally on iPads.
In September 2015, Ceeney told a criminal lawyers' conference that the Courts Service spends half a billion pounds a year on building stock, despite more than a third of courts being unused more than 50% of the time. She proposed a "digital paradigm" for delivering justice.
In March 2016, Ceeney appeared before the Public Accounts Committee (PAC), along with the permanent secretary of the Ministry of Justice, and the director of public prosecutions, to give evidence on efficiency in the Criminal Justice System.
Stephen Phillips, who also sits as a part-time judge, questioned Ceeney, who was forced to admit that a fundamental problem is judicial time.
Phillips called the number of unfilled judicial vacancies a crisis. Some PAC members, he pointed out to Ceeney, "might think we have a barely functioning Criminal Justice System".
Ceeney's lame performance before the committee is likely to have been a factor in her sudden departure. She is due to leave her position at the end of May 2016, and will be replaced by interim CEO Kevin Sadler.
Read more on IT for government and public sector
Slilpp marketplace goes dark following government takedown
Schrems v Facebook: European court strikes down EU-US Privacy Shield agreement
By: Bill Goodwin
European court to decide legality of EU-US data sharing in dispute between Schrems and Facebook
HMCTS deploys video platform for remote hearings during Covid-19
By: Lis Evenstad
PAC doubts justice system transformation programme ... – ComputerWeekly.com
Digital court system reaches first key milestones – ComputerWeekly.com
National roll-out of Universal Credit digital service... – ComputerWeekly.com
How cloud-managed Wi-Fi simplifies policy and AP controls
Cloud-managed Wi-Fi provides IT groups with several benefits, including policy enforcement, network management and consistent AP ...


I am working on another airport, utilizing a satellite ground texture captured with SBX. I have done several compiles already to check placement and what I might want to eliminate. I decided to color correct the image and did that as I have done hundreds of times with other airport ground textures. I added a blur, compiled, checked. . .all was well. Then this morning I decided to add a water mask and to change the color of the water around the peninsula area I'm working on. . . .again just as I've done hundreds of times before.
However now SBX has decided "There is nothing there to compile". What could have caused this sudden change in a simple bitmap image that SBX no longer recognizes it as a Geotiff? I have selected the image and then selected properties and clicked on "Geotif". . .it's reply was "This Geotif may have problems". . .Gee thanks for those words of wisdom.
When you captured the satellite imagery with SBuilderX, it wrote image tiles into a particular \Tiles subfolder chain.
When you compiled, it wrote a stitched composite image in *.BMP format into the \Tools\Work subfolder chain.
The paired *.TXT file contains the Geo-referencing for that original exported *.BMP.
Assuming you only work with copies of original *,BMP images, at what point did you create a GeoTIFF, and how ?
Regardless, if you change the total number of Pixel Rows and/or Columns in a derived image, its Geo-referencing will have changed relative to the original *.BMP as defined in its paired *.TXT file.
Also, simply by graphically editing and saving changes into a GeoTIFF file causes it to lose its Geo-referencing.
If you always keep the Geo-referencing info in the *.INF file and do NOT change the total number of Pixel Rows and/or Columns in derived images, even if you have graphically edited and saved changes into a GeoTIFF file, although the Geo-referencing info in the header of the GeoTIFF will likely be lost, Geo-referencing info in the *.INF file should still allow the TIFF image to be used on the basis of its mapping of the pixel dimensions and coordinates of the upper left pixel to a (NW) geographic coordinate.
My mistake Gary in referring to it as a Geotif. . .it was just the bitmap image I captured with SBX, sorry about that. In my work in SBX, once I have saved the image, it gives it a numbered file name. In turn I go into the saved SBX file and change the information contained there to a more recognizable format (the airport name in place of the numbered file name), then I go back to the work folder and replace the image file name and the TXT file name to the same.
After that I do any color correction, night maps, blurs, etc in Paint Shop Pro. I am hard pressed to think of anything I would have done for it to suddenly not recognize the bitmap.
I'm away from a 'real' computer right now, but IIRC, SBuilderX throws the (2) error messages you cited above on rare occasions, and I'll have to refresh my memory on what might apply in your particular scenario.
Did you move the copied / renamed *.BMPs & *.TXTS out of \Tools\Work subfolder ?
If so, it looks for files there when it compiles tiles selected in the work-space unless a different explicit path and file name is otherwise specified in the *.INF file.
Note as well that SBuilderX by default will always write and read *.INF files to / from the \Tools\Work subfolder.
Also, are you sure there is not a "typo"-induced mis-match in file names between (renamed) paired *.BMP and *.TXT files ?
I'll check those suggestions Gary, thanks.
After checking and re-checking, none of those were the cause of the fault and I have yet to figure out why it is just this airport. I have test captured two other airports images, exported them to an SBX file. . .then loaded them into PSP for color corrections and minor touch ups to eliminate certain areas on the grounds then saved back as a bitmap. I then went into the SBX file, changed the information to a more recognizable syntax, saved and then imported the SBX file and compiled. . .no problems.
Thus far I have done the offending image 4 times and in every instance after color correcting, saving to bitmap, changing the SBX info and importing again into SBX it compiles fine, but then go back to PSP, produce a blur, or a water map or change the water color on the image and try to compile and it gives me the error that there is nothing to compile.
Since you seem to have a good grasp on the source file names and types, have you tried to compile them all from (1) folder without using the intermediary of SBuilderX and the *.SBX file, by Drag-and-Dropping the *.INF onto a copy of SDK Resample placed within the same folder ? .
PS: Are you using all separate images for Masks as well as for Day / Night / Seasons, or have you instead added an Alpha channel as a Mask to 1 or more of your *.BMP images since it was originally created ?
For quite some time I utilized a separate folder to do my compiles with. . .custom inf file and separate images for all seasons, masks and blurs. . .however recently I got lazy and I've been letting SBX produce the inf and perform the compiles. Maybe that's an avenue I need to revisit.
That was the solution Gary. Amazingly there were no differences in what I used to manually compile as compared to what SBX was using, INF files were identical, but at some point in the process SBX was unable to recognize the bitmap image any more.
I actually took all the files from my "Resample" work folder and put them back into the SBX work folder and let it compile to see if it would work. . . ."There is nothing here to compile". Talk about frustrating.
You haven't specified what is in Source2 and 3.
Yes George, the files are indicated for both of those. . . .source 2 is the blend and source 3 is the water mask.
Ok, I did check the SDK samples and mine is set up like the sample is and has worked correctly before because I checked the INF files for previous jobs and they all read the same. At this point I am game to try anything, lol....thanks George.
Nope, no difference. I can visually see when changes take place in the project once I reload after a compile. . .it's like this job has a teflon surface on it because after a certain point any additional compiles simply slide right off and never stick. I don't get it. I have babysitting duties for the rest of the day so I'll tackle this some more this evening. . .I enjoy beating my head against the wall in frustration. . .it feels so good when I stop, lol.
I am moving on to another project. This one has become a PITA. If anyone wants to play with it, I have supplied a link to download a zip file containing both the current scenery folder and the Resample Work Folder with all the images I've been using to compile (base image, Blend mask, water mask, "INF" file and "resample".) I cannot be held liable for any brain damage incurred by anyone trying to make sense of it.
Boy that's aggravating. . .so what did you do that I didn't?
Just as a comparison, here is what I get after compiling with the same package that you have (unless you made corrections or additions to the INF that I don't have). No suggestion of water inside the rectangle (what looks like water is actually solid ground) and no blend is present.
Inside the rectangle is solid ground. . .it appears to be water, but there is a line of delineation that breaks at the border of the scenery rectangle and it goes from water to solid ground, even incorporating the detail texture of grass.
Note: the white line on the right side. . .no idea where that's coming from as it doesn't show on anything I have.
Also, the slanted lines on the water at the top are shadows from the pilings under the bridge that crosses the lake.
I did change the inf (see the download) and I didn't compile to my C: drive.


This power supply is a compatible replacement for Asus Essentio CM5570 power supplies. If you own a Asus Essentio CM5570 this FSP300-60THN power supply will fit without modification. We also offer this power supply upgrade that will replace your Asus Essentio CM5570 power supply.


1998. Real-time strategy games were no new commodity. Dune, Command and Conquer, Total Annihilation, Age of Empires and Warcraft were all well known, well regarded and loved titles. But Blizzard wasn't content to sit on the success of Warcraft and Diablo. After exploring the world of fantasy, they were ready to tap the wells of sci-fi.
Other RTS games have come and gone. I have loved many, but none quite so dearly as Starcraft. You see, Blizzard managed, with Starcraft, to do something that, for me, has yet to be accomplished in another game: They created an interesting narrative with characters I cared for. The story was fascinating (as far as sci-fi schtick goes), well written, with great dialog and fabulous cut-scenes. Nobody does cut scenes like Blizzard.
Add to that the fact the you had three well balanced, but completely unique races to play, and you had a really special game. But that was almost 10 years ago.
But now we have the sequel. Yep, Blizzard announced this week (in Korea, of course) that they were working on and will be releasing Starcraft 2. The gameplay doesn't look groundbreaking, but it looks familiar. And for those of us who loved the original, that is quite all right. Check out the trailer. Another killer Blizzard CG cut scene.
To echo the marine, "Hell, it's about time."
I, too, was effulgent. Yeah, it's really about time.
Damn, someone get those guys a walker. Starcraft ?? OMG Gramps that game is soo old.
Gramps that game is soo old.
Doesn't change the fact that it's probably the best RTS game ever . . .
StarCraft was the first game I played on my first computer and I played it until last year. Best RTS of all time if you ask me. It simply had everything (for its time). Interesting races: Units, technologies, strenghts and weaknessess was different. And it was very well balanced according to the pros (though I thought it was broken).
Fantastic story: It has memorable key characters that you care for and you don't know what awaits in the next missions. Ther's plenty of surprises and you can't wait to find out what happens next.
My standards in RTS games have been raised considerably since Starcraft. If it's still just a linear, story driven campaign (ie. no strategic layer) I won't be bothering with it. Starcraft was the best RTS of its day, but it's been easily surpassed by the likes of Rise of Nations and Dawn of War: Dark Crusade in the intervening time. None of the prepress I've seen indicates that Blizz is prepared to raise the bar. In fact, my general sense is that they're going to change as little as possible in the interests of pleasing the Korean professional gaming market.
i agree on just about every point so far. the first game i really played was the original warcraft. i was like 12. then i quickly found there was a sequal, and, *gasp* a space-based variant.
Starcraft was and still is an exquisite game. it didn't exactly break ground in any way i can think of, but everything about the game was done with a level of care and detail i don't think even blizzard has matched since then. i've wondered several times over the years if they'd ever make a sequal.
Another thing I've noticed is that there hasn't been any mention of the A.I! Not a word!
It was good in WarCraft III but perhaps that was simply since it's so incredibly fast.
I know what the community will say when I bring it up though. "Play multiplayer "
Especially the arrogant people over at [url=gosugamers.net]gosugamers[/url].
If a few friends start to play then I will play with them. Always preferred to play people you can talk to afterwards and play lots of games with.
Campaigner, I agree. The AI is sooooo predictable as it is scripted..
The only thing I can think of that was bad was the A.I. It always did the same things and was therefore easily predictable.
okay, fair enough, i did forget about that. i got trounced a bunch of times just because the thing was so fast, though, so i guess it didn't stand out as an issue to me.
I can beat 7 CPU's about 1/3rd the time..
sheesh... i don't think i ever beat more than 3 at once.
WC3 ended up being a challenge because the AI could micromanage so much better than you (and it's such a micro heavy game, which isn't really a knock against it as it does it all very well).


text:
Nechako Valley Junior Zone Champions.
Nechako Valley Vikings finish successful football season
Nechako Valley secondary completed a very successful season November 11 in Kamloops.
The senior Vikings lost their first round provincial playoff game to Vernon Senior Secondary in overtime.
The Viking defence was stellar, as it has been all season holding a very good Vernon team to 14 points in regulation. The team was lead by Darby Lytle and Peter Lafleur on the D-line with both players getting several tackles for losses, Lytle also had a fumble recovery.
The offence was lead by Connor Nielsen who scored the two NVSS touchdowns with his aggressive running style. The last touchdown came with less than two minutes left to tie the game. Spencer Siemens and Landon Brophy provided the targets for the quarterbacks during the game both making several difficult catches.
To reach the provincials NVSS defeated the north's top seed Duchess Park. NVSS had already lost to Duchess twice in the regular season and came in as a underdog for the game.
A strong running performance by running back Kyle Varley led the team in the first half. The defence held Duchess to 6 points going into the break. NVSS did not score until the second half where Riley Wallace passed to Siemens for a touchdown to tie the game. Late in the fourth quarter Wallace connected with Jordan Walker on a third down conversion and then passed to Mauricio Parilli who ran through Duchess Park player Montell Lindgren at the goal line to score the game winning touchdown. To finish the game Louis Klopper tackled Duchess Park's runner in the backfield forcing Duchess to three straight passing plays which TJ VanDamme(interception), Hudson Schneider, Torrin Lytle and Ben Rodts shut down.
This is the second time the senior team has won the PG Bowl (Zone Championship)
On October 29 the Vanderhoof Jr. Vikings football team faced off against the Duchess Park Condors Jr. Varsity team for the title of top junior football team in the north. It was an exciting game with the Vikings breaking out and going up by 20 points in the first half. Duchess Park then came on strong in the 3rd quarter holding Vanderhoof to only one touchdown. As the teams went into the 4th, Duchess Park tied the game up at 26 to 26 with less than ten minutes to go in the game. On a 4th down pass, Vanderhoof quarterback Dillon Siemens through a "long bomb" pass to receiver Cole Daniels. Daniels made the catch with triple coverage in the end zone and fell over the goal line to put the Vikings ahead by one touchdown. The game ended with the Vanderhoof Vikings winning 32 to 26, and the trophy as top team in the Northern junior Varsity Conference.
Vanderhoof peewees top tournament
Omineca Ice miss out on points during weekend home games

redpajama_set_name: RedPajamaCommonCrawl


text:
10PlusBrand
https://feed.podbean.com/branding10plus/feed.xml
https://www10plusbrand.com https://www.10PlusProfile.com 1-888-288-4533 Sign up for 10 Plus Brand's Newsletter: https://10plusbrand.substack.com/embed 10 Plus Brand's Youtube: https://www.youtube.com/channel/UCvw38sDf4U5oe924zFZB38Q 10 Plus Brand Inc.'s founder, CEO Joanne Z. Tan started the first episode of #10PlusPodcast on July 5, 2019. By the end of 2023, Joanne is planning to produce & host 100th episode. Whether it is a long and in-depth interview of a notable or an influencer, or a 30-second insight, 10 Plus Podcast timely airs high quality content on various subjects on current events, technology, Silicon Valley, life experiences, politics, culture & the arts. Coming soon, Joanne Z. Tan's two books: "How to Become a Brand: Decode, Create, Amplify", and her memoir: "50 dollars and a Tiger Balm: 40 years in the US". In addition to the popular series "Interviews of Notables & Influencers", "30 Seconds of Anything", Joanne Tan, a global brand strategist, brand marketing consultant, branding expert, creative director at 10 Plus Brand, Inc., regularly shares tips and cutting edge information about a business brand or a personal brand's DNA decoding, brand building, brand marketing, brand development & management, brand messaging, business and marketing strategies, go to market and product market fit analyses & tactics, market analyses, analytics, Google core web vitals, SEO, social media marketing, influencer marketing. 10 Plus Brand Inc. is a full-service, multi-media branding and brand-marketing agency. As of 2022, It has won three awards (by Clutch, DesignRush, expertise.com) as one of the best digital marketing, advertising, SEO agencies in the San Francisco Bay Area. It serves clients in all 50 states in the US, and throughout the world. 10 Plus Brand combines AI enabled digital content marketing with human intelligence to multiply a brand's influence with repurposed articles, ghost writing, original content, advertising campaigns, blogging, website visuals, brand promotion videos, photos, logos, brand look and feel, SEO, SEM, PPC, etc. Joanne led the agency's evolution over the past 10 years from a photographic studio ("Poem And Art Studio") into a video, content, website and visuals production company ("Joanne Tan Visual Branding, LLC"), which was later expanded and renamed as "10+ Visual Branding", and now as a corporation - "10 Plus Brand, Inc." that is fast growing as a full service branding, digital marketing, SEO, video production & advertising agency. 10 Plus Brand's main "flagship" website is https://www.10PlusBrand.com, that features samples of their various deliverables for small businesses, mid market, technology companies, funded entrepreneurship, or venture capital VC backed startups, non-profits, law firms, accounting firms, investment bankers, business consulting firms, post M&A companies needing rebranding or in private equity (PE) portfolios, political campaigns and B2B and B2C corporations. 10 Plus Brand also has a "subsidiary" website focuses on LinkedIn profiling only - https://www.10PlusProfile.com. 10 Plus Profile Teams develop individual brands, professional or business brands with LinkedIn profiles on both individual & company pages. They further revise bios, resumes for public & private board members, C-suites members, executive coaches & business consultants, commercial insurance brokers, attorneys, CPAs, realtors, and other B2B service providers & professionals. Joanne Tan applies her proprietary multidisciplinary process, and many skills, talents, & backgrounds: (1) a law degree that trained her with both analytical skills & the ability to outline vast amount of information to its gist. (2) professional journalist editor and page designer. Also trained in architectural design, which enables out of box thinking. (3) MBA training in marketing, accounting and other areas of business such as insurance and organizational behavior. (4) Award-winning professional photographic artist, oil painter & poet. (5) Liberal arts education at Brandeis University. (6) Mentor, coach, director. 10 Plus Brand will offer online courses & workshops on brand building and brand marketing. Founder & CEO Joanne Tan leads several cross-functioning teams to deliver customized brand presence to inform, inspire and empower. As a "Commander in Chief", Joanne leads these Teams: – highly skilled & talented writers & editors with JD or MBA degrees; digital content marketing & SEO experts; – Experienced video production crew, scriptwriter, director, videographer, photographers, graphic designers, motion graphic designers; producer & director of brand promotional videos, ads, TV commercials; – Skilled website custom coders, designers and web developers, experts in SEO, PPC, Google Core Web Vitals. "First, we are brand builders. We use our proprietary process to decode brand DNA. Second, we are content creators. Third, we are digital marketers." Says Joanne. "First, we are brand builders. We brand, rebrand, and refresh existing brands for businesses, B2B services, technology companies, funded or VC-backed startups, corporations, mid-market companies, non-profit organizations, private equity portfolio companies during restructuring or pre and post M&A. We also develop individual business brands for business leaders, experienced and growth-minded professionals, notables and influencers. Second, we are content creators. After we decode a brand's DNA, we create brand messaging and tell brand stories, verbally and visually, to construct a brand's persona and elevate its stature on websites and social media with original content, blogs, podcast, videos, vlogs, custom website design and development, LinkedIn business pages and personal profiles, webinars, and PR content. We also deliver social media marketing & advertising campaigns. Third, we are digital marketers. "We combine AI enabled digital marketing with human intelligence to multiply a brand's influence with repurposed articles, SEO, SEM, PPC, social media marketing, influencer marketing, marketing analytics, and Google core web vitals." "We build, grow, and market power brands for businesses and professionals. We generously share tips, strategies, and insights about brand DNA decoding, brand strategies and structures, story telling, how to update and refresh a brand, or rebrand, to elevate your brand to a higher level. " "After our in-depth brand marketing analysis, we turn a website or a LinkedIn profile into a power brand that generates leads, clients, sales, referrals, and loyal brand followers." Find us online by clicking or follow these hashtags: #10PlusBrand #10PlusPodcast #10PlusInterviews OR #InterviewsofNotablesandInfluencers #30SecondsofAnything #BrandDNA #BeYourOwnSuperpower #BeYourOwnBrand #StandForSomething #WeAreBetterAngels For more insights, sign up for 10 Plus Brand's Newsletter: https://10plusbrand.substack.com/embed Please call: 1-888-288-4533 (Main website:) https://www10plusbrand.com (LinkedIn optimization website:) https://www.10PlusProfile.com
Saturday Aug 13, 2022
Episode 60: Trump's violation of the Espionage Act & the 7 Urgent Changes We Must Make ASAP
- To stay in the loop, subscribe to our Newsletter
- To read it as a blog
- To watch it as a video
Please don't forget to SHARE IT WITH OTHERS!
(About 10 Plus Brand: In addition to the "whole 10 yards" of brand building, digital marketing, and content creation for business and personal brands. To contact us: 1-888-288-4533.)
Potentially there will be 10 charges against Trump, including the Espionage Act violation.
Q: What weaknesses in our existing system have allowed all these Trump nightmares to happen? How can we improve our system?
There are two wake up calls to ALL Americans. I am speaking as an American who loves our democracy, NOT as a partisan voter. It doesn't matter anymore whether the team you identify with is Republican or Democrat, like in a football game, whether you root for 49ers or Green Bay is pointless when the RULES OF THE GAME is going to be disregarded, destroyed, there are no winners or losers - we all lose when elections are no longer fair and honest.
The first wake up call: our election system needs some extremely URGENT changes:
(1) certification of state election results by PARTISAN secretaries of state: This is a political ticking time bomb, a tinder box. Solution: New federal laws must be passed ASAP to mandate all 50 states' certification process to be checked and balanced by each state's representatives from all political parties, to be live streamed, completely transparent, devoid of any partisanship;
(2) gerrymandering: both Democrats and Republicans have committed this dishonest and corrupt gerrymandering, which is a cancer on election integrity. Solution: New federal laws must be passed ASAP to completely ban gerrymandering.
(3) rank choice voting! OMG, this is SO important, to truly represent the underrepresented majority in the middle, whose voice is getting drowned by extremes on both the far right and the far left. I previously simplified and explained about rank choice voting in this blog, video, and podcast - it's Part II of "What Caused the Insurrection: the Seven Headed Monster". For details, please read "The Politics Industry: How Political Innovation Can Break Partisan Gridlock and Save Our Democracy", written by Harvard Business School strategy expert Michael E. Porter, and with a unique business perspective by Katherine M. Gehl, founder of Institute for Political Innovation.
(4) Get rid of the electoral college: It is NOT that hard to hold a national referendum! The vast majority of Americans across party lines want to get rid of it. Once the electoral college is gone, we don't need the #1 I mentioned above, since there is no need for state certification checks and balances. (
5) Remove the Presidential pardon power: it conflicts with the principle of no one is above the law, thus unconstitutional.
(6) The presidential power is NOT like that of an imperial king, we must impose checks and balances to limit it in various aspects.
(7 ) term limit for Supreme Court Justices, - 18 years. AND more, as listed by Stanford Professor Larry Diamond's call to action in his book: "Ill Winds: Saving Democracy from Russian Rage, Chinese Ambition, and American Complacency".
The second wakeup call: What weaknesses in our system have allowed a con man, a pathological liar, a narcissist psychopath to go this far?
Copyrighted, All rights reserved.


12 different national symbols are depicted on this set of American Icons Memory Tiles. A little history is mixed in with play with this take on the classic Concentration game. American Icon Memory Tiles comes with 24 tiles (12 pairs) with an image on one side and the Maple Landmark logo on the other. Each tile measures 2-1/2" square by 3/16" thick and is cut from high quality birch plywood. A cloth pouch for storage and instructions are included.


text:
Far-right Conspiracists Stir Up Hysteria About Nonexistent 'Civil War' Plot By 'Antifa'
Alt-right figures, Infowars, and their conspiracist cohort spin baseless and increasingly wild claims of impending violence, from a November 4 nonevent to the Texas church shooting.
By David Neiwert — November 13, 2017
[Cross-posted at Hatewatch.]
To hear the conspiracy-ridden far right tell it, the American antifascist movement (which only a few months ago none of them seem to have been aware of) has become so vast, powerful and insidious that it threatens to overthrow the American government through an overnight revolution that entails the beheadings of white Christians. And the massacre at that church in Texas was just the first attack.
Or something like that.
The most recent episode of far-right fearmongering about anti-Donald Trump demonstrations has revolved around an anti-fascist organization's efforts to stage rallies at locations around the country on November 4. According to an array of conspiracy theorists — led, naturally, by Alex Jones and his Infowars operation, as well as the far-right John Birch Society — these rallies were likely to become violent attacks on white Christians, the beginning of a "civil war" intended to overthrow the Trump presidency.
The planned rallies were factual: Refuse Fascism, a small organization with modest reach but associated with the Revolutionary Communist Party USA, was advertising its plans to hold anti-Trump rallies in a number of cities around the country on November 4. The organization bought a full-page ad in the New York Times and set up a website devoted to the event, which was never billed as anything other than an entirely peaceful protest.
Viewed through the prism of right-wing conspiracism, however, the rallies were quickly demonized as potentially violent uprisings intended to spark a "civil war" against the government. And in response, a number of self-described "patriots" threatened to create violence on their own.
"Honestly, I'm happy," one YouTuber told his audience. "Dude, we've been on the verge of the great war for what seems like forever and I'm just ready to get it going."
According to one theory, the Department of Defense was planning secret exercises designed to support the mass "antifa" uprising. Another claimed that violent "antifa" thugs were planning to behead all white Christian parents. A panoply of fantasies were spun up around the supposed "civil war," including claims that attacks on police officers were also planned.
Then, after none of these attacks or violence materialized on November 4, the hysteria rapidly shifted into overdrive when, on November 5, a Texas man walked into his local church in Sutherland Springs and murdered 26 people. Unsurprisingly, the same conspiracy mills that had been fearmongering about "antifa" violence began promoting utterly spurious evidence that the shooter had been an antifascist shouting Communist slogans.
The Oath Keepers, in the meantime, urged people to remain armed at all times and to insist on being permitted to bring their guns to church. Founder Stewart Rhodes urged his followers to expect "a wave of left wing terrorism targeting conservatives, libertarians, Christians, police, military, veterans, etc (anyone the left considers on the right or part of the system). Expect it. Prepare yourselves in case this does lead to a full blown civil war."
This is not the first time conspiracist "Patriot" Trump supporters have come unglued over a Refuse Fascism protest. Back in January, many of the same people called out the "Patriot" troops for Trump's inauguration, claiming that a mass of "Communist" protesters were plotting a coup to prevent the newly elected president from taking the oath.
Among the people beating this drum were Alex Jones and his Infowars operation, as well as the Oath Keepers and their founder, Rhodes. (This was before the word "antifa" had become the newest word in their lexicon as the object of their deepest loathing; it did not appear in any of the pre-inauguration fearmongering about Refuse Fascism.)
So on January 20, a collection of bikers, conspiracists and militiamen came to Washington, D.C., ostensibly to prevent violence, but they did not encounter the massive coup attempt that they had anticipated; instead, Refuse Fascism's rallies wound up attracting a couple dozen people and resulted in zero rioting. Their protest was overwhelmed in any event the next day by the hundreds of thousands of people participating in the long-organized Women's March, which again was thoroughly nonviolent.
Neither Jones nor the Oath Keepers seemed to recall that previous outcome while whipping up hysteria over Refuse Fascism's latest protests. Jones' Infowars began hyping the supposed "threat" posed by antifascists shortly after the inauguration, and began intensifying over the spring as clashes between black-clad "antifa" protesters and pro-Trump "alt-right" rallygoers intensified.
Following a Refuse Fascism rally in Los Angeles in late September, where marchers carried a banner reading "November 4 It Begins," Infowars reporter Paul Joseph Watson filed a piece headlined "Antifa Plans 'Civil War' To Overthrow Government," warning that "antifa" groups had targeted November 4 as a day of nationwide civil unrest and violence, "part of a plot to start a 'civil war'."
Soon the John Birch Society, one of the hoariest of conspiracy-theory mills, began chiming in; their CEO, Arthur Thompson, posted a video warning society members about the looming "antifa" violence and offering helpful tips about what they could do about it.
Jones began stepping up the hysteria with fresh theories. He claimed that financier George Soros had poured $18 billion in resources into the operation, and that the protests would be led by Women's March organizer Linda Sasour, who he described as "the pro-sexual-mutilation Muslim."
He also claimed that his critics accused him of "making up" the events, and then held up Refuse Fascism's full-page ad in the New York Times as "proof," though he neglected to note that the ad buy had nothing to do with the Times' news operations and its existence only proved that the group had enough money to pay for the ad.
Amateur conspiracy theorists began piling on. A man named Jordan Peltz who self-identified as a "deputy" (although he is seen wearing a badge from the "United States Warrant Service," a private company) posted a popular YouTube video (with over a million views) warning about the nefarious "antifa" plans: "They will start off by attacking police officers, first responders, anybody that's in uniform," he said. "And after they have disrupted that enough in the nation, and us first responders are literally going everywhere, trying to resolve things, they will then go after the citizens and the people and the government and all of that. So if you're white, you're a Trump supporter, you're a Nazi then, to them. And it will be open game on you."
"Make sure you got enough ammo, make sure your guns are ready," another YouTuber advised in a popular clip. "You have to understand these are vicious, vicious people. Your life means nothing to them. In fact, if you're a white man, you don't deserve to live."
In the right-wing blogosphere and on social media, the hysteria reached ludicrous levels when the blog Gateway Pundit published a post claiming that "antifa" radicals were planning to "behead white parents and small business owners." It quickly emergedthat the Twitter post being cited as the basis for a claim was, in fact, a fairly undisguised attempt to mock the conspiracy theorists and nothing more.
The Gateway Pundit writer acknowledged to a reporter that the basis for his story was a joke, but defended it nonetheless as proof of a double standard in how the media treats extreme rhetoric.
When November 4 arrived, Infowars reporters spread out across the country to report on the Refuse Fascism rallies, with a warning from Jones at the website: "Attention, devil worshipers. Attention meth heads. Attention antifa scum. We're fully aware of the globalists funding your operation to push for a violent revolution in America."However, they found that, just as predicted, only a handful of protesters showed up for them, and that moreover no violence or civil war was in the offing. This meant the conspiracy theorists who warned of a mass uprising – ignoring critics who predicted the rallies would be tiny and inconsequential – then were able to claim victory.
Infowars correspondent Owen Troyer reported from Austin, Texas: "Instead of the day that Refuse Fascism and antifa started to bring down the Trump-Pence regime, no! Instead the Refuse Fascism antifa march died. They've been embarrassed. Their numbers are dwindling, and Trump support continues to grow."
However, the conspiracists were reluctant to abandon their narrative, and a mass shooting the next day in Texas provided them with all the pretext they needed. A 33-year-old man named Devin Patrick Kelly went on a shooting rampage at the Sutherland Springs church he attended, killing 26 people and wounding another 20.
Infowars promptly dispatched a reporter to the scene, who described the gunman as an "atheist leftist," concluding that "this has the makings of a social justice warrior, somebody who was out there looking for a victim or looking to be a victim, and then making all white men or the establishment his enemy."
Watson speculated on Infowars' YouTube channel that it was "an anti-Christian hate crime," and that Kelly might have been on mind-altering drugs. Soon Jones was indulging in similar on-air speculation that the Texas shooter was the first in a series of "deep state" attacks using people whose minds were being manipulated for nefarious purposes by such drugs.
"You are going to see more attacks like the Texas shooting that may be double-barbed – what double-barbed means is that they have a specific point, and they have a specific blackmail characteristics for people within the government, and the second barb of it is to carry out political agendas like gun control," one of his guests told Jones.
For Stewart Rhodes, the event mainly was an opportunity to remind his Oath Keepers to pack weapons everywhere they go. "Go armed in church!" he admonished. "If your pastor has an idiotic "policy" of no guns in church, give him till this next Sunday to change that policy (and teach him why he must) or go find a new pastor and a new church. Do NOT let yourself be disarmed in church. How many fathers and husbands died unarmed in that church while they watched women and children slaughtered around them?"
In reality, investigators have been clear that Kelly had no political agenda and was acting out of anger over a domestic dispute. The rest of the conspiracist right, however, has apparently now settled on a narrative that he was an "antifa member" — even though the evidence for that claim is based entirely on a spurious photo concocted by YourNewsWire, an established conspiracy mill frequently associated with a variety of misinformation.
Even though these stories have in fact been thoroughly debunked, the sites' true believers have made clear in their comments they are ready to act. "It's getting to the point where it's about time for Frontier Justice," wrote one commenter noted by BuzzFeed. "If they want to start attacking innocent people at churches it's time to bring these people to their knees."
"Carry everywhere now," responded another.
"It's absurd. Calling for a civil war?" Andy Zee, a Refuse Fascism organizer, told the Washington Post. "Pick a date for a civil war? Honestly, what do you say to this?"
Alex Jones, antifascists, conspiracy theories, Oath Keepers, Patriot movement, Right-wing extremism
Florida Sheriff's Trial Draws The Wrath Of The Far Right
David Neiwert — Oct 30th, 2013
Fears Of Black Helicopters And Mercenaries Fuel Oregon Oath Keepers' Paranoia
David Neiwert — May 4th, 2015
Oath Keepers Seem To Want A Shootout Over Oregon Mining Dispute
David Neiwert — Apr 24th, 2015
Oath Keepers Pushing Oregonians To Resist Gov't Camps
Militiamen And Oath Keepers Drew Weapons, Threatened To Kill Each Other
David Neiwert — May 3rd, 2014
Oath Keepers Come Out To Heckle Oregon Residents Who Want Armed Gathering To Disband


Practical learns yields perfect results, which requires support from practical mentor. My way of training will be purely based on above statement.
experience in training and developing the effective behavior management system of children.
Innovation, analytical thinking, problem solving, create a learning experience.
First is I saw the interest of student. For eg. if the student is interested in solo singing rather than playing guitar riffs, etc. I teach more of that lessons so that the student Don't loose interest.
Flexible timings, any time even after 9pm if necessary, during exam time.
I have excellent communication skill which suits students demand and the potential to deliver knowledge in a smooth manner.
I am an energetic and positive tutor who understands the rigours and the struggles and difficulties a school student faces as I have recently graduated from University. I first clear any doubts and queries the student has before delving into teaching and testing out new concepts and other concepts/topics the student may have forgotten.
Expertise in teaching of english and spoken english as a special language . can also help and copy assignments . The classes will be online and also material will be shared .
weekly and monthly tests will be conducted according to students needs and level of understanding.


text:
Historic Downtown Glendale
Historic Downtown Glendale Historic Downtown Glendale Historic Downtown Glendale
Enjoy Arts & Culture in Historic Downtown Glendale
Arizona Doll & Toy Museum
The Arizona Doll & Toy Museum features boys and girls playthings from many eras. Antique to modern toys, dolls and miniatures to remember and cherish our childhood. A Gift Shop and Doll Hospital are also available.
Hours: Tuesday-Saturday, 10 a.m. to 4 p.m.
5847 W. Myrtle Ave.
Glendale Woman's Club
The Glendale Woman's Club is a 501(c)3 non-profit organization serving our local community since 1901. Follow us on Facebook! The clubhouse building is rented to the public for private family or business events. Maximum 150 seating. No catering requirements and free Wifi. Call for pricing and availability.
www.clubhouse4rent.com
Glendale History Walk
Territorial Sheriff Sculpture
This unique history walk features 59 images relating to the history of Glendale imbedded in the sidewalk at the promenade of the downtown parking structure retail area. Each vibrant mosaic offers insight into the evolution of Glendale.
Promenade Parking Structure
58th Avenue and Palmaire
Glendale Public Safety Memorial
This piece is fashioned after the 14th sheriff of Maricopa County, Samuel Seay Stout. Artist, Bill Nebeker stated that he "created a man of strength and courage, who is relaxed but is aware of his dangerous surroundings. As a member of the Cowboy Artists of America since 1978, Bill Nebeker has won a Gold and Silver in sculpture, Best of Show and the Phoenix Art Museum Purchase Award, as well as being twice elected President by his fellow artists.
Located at 57th and Glendale Avenue
The Glendale Public Safety Memorial was dedicated on Jan. 4, 2011. The memorial honors two police officers and one firefighter killed in the line of duty in Glendale. The names of the fallen include:
Fire Engineer Lester Hills
Sergeant Pat Campbell
Officer Anthony Holly
The 15-foot-tall bronze memorial features two police officers and two firefighters rescuing a child while connected by an eternal flame. Behind the statue is a 28-foot-long granite wall with plaques of honor. The artist for the memorial is Hai Ying Wu.
Glendale Civic Center Plaza
5750 W. Glenn Drive
Circles of Time
This pocket park designed by artist Howard Meehan features a stone step wall supporting five laminated glass images encased in steel rings. The "Circles of Time" imagery captures photo history, "A window into the past...a look into the future". Several points of interest in the park are two historic buildings that once housed a gas station and the Morecomb family adobe home. Sculptural lighted wheel rims, and antique gas pumps which speak of the evolution of these fuel devices over 50 years.
6024 W. Myrtle Avenue
(Northwest Corner of Myrtle and Grand Avenue)
Old Friends Bronze Sculpture
Mr. George Lundeen, a native of Nebraska, is a well-know national artist. His sculpture, Old Friends (completed in 1986), received the National Sculpture Society Silver Medal in 1982 and has become a favorite among Glendale residents and visitors. Located in Murphy Park
Copyright © 2022 - Historic Downtown Glendale Merchants Association - All Rights Reserved
HDGMA
What's Cookin'
Keep up-to-date with our Downtown Glendale e-newsletter!
Sign up to receive our free monthly e-newsletter featuring the latest events, activities and fun happenings in Downtown Glendale!


text:
HomeNewsHighland Express Revamped–Increase Efficiency?
Highland Express Revamped–Increase Efficiency?
September 27, 2017 News 0
The Highland Express van. Photo by Nate McReynolds.
By Kaleigh Anderson '21
The Highland Express, Gordon College's beloved transit service, has been revamped into a shuttle system that closely resembles the popular taxi-service app Uber.
This new service utilizes the Transloc app in order to allow for custom pick up and drop off locations. In order to use this new service, one must download the Transloc app and make an account, where they may then request pickup and drop off locations. The new transit system runs Fridays from 3pm-11pm, Saturdays from 10am-11pm, and Sundays from 3pm-10pm.
Chris Jones, the Supervisor of the Highland Express, gives some insight as to who came up with the idea to upgrade the transit system.
"Jeff O'Brien, the fleet manager in Physical Plant, actually came up with the idea," Jones says.
"As a side job, he offered to drive for the Highland Express when they really needed drivers and if they could not find student drivers. He found that he was doing MANY loops in the van with zero passengers and he thought, 'there has to be a better way'. He did a little research and found TransLoc and brought it to my attention and we moved forward with it."
The previous shuttle service operated on fixed stops and would run regardless of whether or not it had passengers, which, according to Jones, was a waste of gas. The new OnDemand system seems to potentially be a more efficient and cost-effective manner to provide transportation, following a good example of Rentco.
The Highland Express now drives directly to those in need of a ride once they request a pickup, which makes the shuttle a streamlined means of transportation—except during peak hours of usage. Jones confirmed that this service is very popular, which means that sometimes the wait can range from 1-2 hours. This can be frustrating to riders at times.
"I'm not sure if it's more efficient," says Emily McDougall, '20. "It definitely feels slower, but I think it's better this year because you can request your own time. I'd rather do that than have to go on their schedule which didn't always work for mine."
Similarly, Jacob Michels, '21, seems to have had quite a positive experience with the new system. "The Highland Express [has been] very efficient," Michels says, "and I've been able to get where I needed to go without a problem." Though many are not excited about the occasional long delay due to high demand, students still seem to love this new, streamlined process.
Is the solution to this high demand to increase supply? A proposed solution to decrease the wait time is to add a second van. "Adding a second van would be expensive," says Jones. "We may run some focus groups and surveys to find out if people would pay a nominal fee to help support a second shuttle during peak times to help the wait time be lower, but we have not made any decisions on this."
The large variance in wait time is due to the fact that the Highland Express is a shared service. One student's wait time will depend on the location of the shuttle, how full the shuttle is, and how many pickup requests have already been placed. There is no way to request a ride in advance, so the best solution may be to request a ride and plan accordingly.
One of the most cherished aspects of the Highland Express appears to be that it is a complementary service. College students on a budget are likely to be in favor of the expanded service areas and use of technology to request a ride, even if the wait time may end up being more substantial. Jones confirms that the Highland Express will continue working to improve the wait time during peak hours of usage and would value constructive feedback from students.
He also recommends the zipcars on campus as another tool that can be utilized by students as a means of transportation that is relatively inexpensive. For now, Jones and his staff will continue to assess the new changes made to the Highland Express.
Internet Filters Preventing Student Research?
Kombucha Or Not To Kombucha, That Is The Question
GCSA Resolution- President's Address Sparks Debate


I had the blessed opportunity of attending Writing & Illustrating for Young Readers (WIFYR) last month and hearing YA author Kris Chandler tell me to run a marathon. Just kidding. She actually said *not* to run a marathon (even though she herself runs marathons), which I appreciated because I'm often tempted. I'll take it from the expert. Running 26.2 miles takes too much time. Especially for writers. Especially for slow runners and writers like me.
What Kris said I *should* do is exercise. Easy, right?? Way better than having to write a three-paragraph story based on five random objects pulled from a cruel writing professor's sack!
Maybe for some of us, jogging is worse than a writing prompt. But it works. Here's how: exercise flushes cortisol from the brain, a stress hormone that makes it hard to think creatively. Solitary exercise, like walking, helps your brain dig into the subconscious and find unexpected solutions to problems. Give your brain some endorphins and extra oxygen, and your characters might start shouting their secrets in your ears. Kris was referencing this article, if you want proof.
Now I'm thinking of getting one of those tall computer desks that straddles a treadmill. And a treadmill.
When and where do you get most of your creative inspiration, if not while out for a jog? What do you like better: a writing exercise or real exercise?
I find that exercise for my body relaxes my brain, and thoughts flow more freely that are really substantial. Working, like yard work is incredibly therapeutic.
Sylinda, I'm the same way. Except I need to exercise not just to relax my brain but to stay sane, actually. Which I don't. So now you know why I'm crazy.
Let me know if the treadmill works. I have my own ghetto version that I've been doing. I place my laptop on a bookshelf that's at the right height and walk in place. My husband and kids think I look like a weirdo. In all fairness, I do. But it does seem to help me focus on my writing instead of wandering into the kitchen for something to eat when I get stumped.
Wow, dgirl, you've actually tried this! And I thought I was being so clever. Glad to hear from an expert that it works--at least as distraction from snacks.
I'm going to use this article to lobby for a mini-gym to be installed in the office next door to me. The guy who was there just moved out. Perfect.
Seriously, though—thanks for sharing this! And to answer your parting question, I think a combination of both would be perfect. A writing exercise AFTER a real exercise!
Rissa, Chad is gone? That would be a great use for his office!! I approve!
I've found that when I get stumped, if I get up and do the dishes or my laundry or something, it gives my brain a chance to work through my story, and pick out what's working or not, so that once I'm done with my chores, I can get right back to my writing! Not sure that counts as exercise, but it's useful!


text:
Raising Awareness of Implicit Gender Bias Among Healthcare Professionals
Psychiatry Advisor Contributing Writer
Mixed race group of doctors meeting in lobby of large hospital
Although not definitive, results suggest that biases linking surgery with men and family medicine with women may be widespread across the United States among surgeons.
Healthcare professionals and surgeons showed a tendency to associate men with career and surgery and women with family and family medicine, according to a study published in the JAMA Network Open.
Investigators of the study used the Implicit Association Test (IAT), which is a trusted tool used to measure implicit biases. Two types of IATs were used in the study. The first, the Gender-Career IAT, was hosted by Project Implicit to measure bias among self-identified healthcare professionals. There were a total of 42,991 participants, of which only 18% were men. The second, a novel Gender-Specialty IAT, was tested at a national surgical meeting in October 2017, at which surgeons of any age, gender, race, and country of origin were eligible to participate, there were a total of 131 participants, of which 64.9% were men.
Hospitals Should Adopt Protocols to Support Trainees Against Discrimination
Organization Policies Should Address Expressions of Racism by Patients
Reducing Exposure to Preventable Harm Paramount Across Healthcare Settings
Important outcomes of the current study are the initial estimate of the extent of implicit gender bias within healthcare. The data from the Gender-Career IAT show that both men and women in healthcare strongly implicitly associate men with career and women with family. But in regard to explicit bias, men in health care were more likely than women to associate men with career and women with family. Investigators noted that these results of the Gender-Career IAT were similar to the Gender-Specialty IAT that assessed bias among surgeons. However, explicit gender-specialty biases for surgeons who were women were smaller than explicit gender career biases for health care workers who were women. The researchers also reported that they found no difference between the genders in implicit bias on the Gender-Specialty IAT.
There are some limitations to the study. In the Gender-Career IAT data, there was no differentiation of the health care providers. The health care providers could have been nurse practitioners, physician assistants, or even dentists. Another important limitation is that the novel Gender-Specialty IAT only recruited surgeons that were attending the surgical meeting. The data also show that there was a considerable difference in the composition of men and women population taking the Gender-Career IAT (18% men) vs novel Gender-Specialty IAT (64.9% men). Furthermore, the sample size for the novel Gender-Specialty IAT was very small when compared to the sample size of the Gender-Career IAT data.
The researchers concluded that both men and women associated men with career and surgery and women with family and family medicine, however, men were more likely than women to consciously express the bias. They also suggested that "[f]urther documentation of implicit associations and other potential psychological obstacles to women's success will be important for determining the most effective interventions to reduce gender inequality."
Disclosure: Arghavan Salles, MD, PhD, reported receiving honoraria from Medtronic plc for consulting and speaking.
Salles A, Awad M, Goldin L, et al. Estimating implicit and explicit gender bias among health care professionals and surgeons. JAMA Netw Open. 2019;2(7):e196545.
This article originally appeared on Medical Bag
Close more info about Raising Awareness of Implicit Gender Bias Among Healthcare Professionals


Home > Finance > Want to refinance a loan? Here's what to watch out for!
For many of us, refinancing a loan seems to be the only way by which we can still pay interest rates. An alternative to it could be trying to get a loan from a private lending company like easy-go. However If you decide to refinance a loan, remember that the new loan must be cheaper, that involve lower costs than the old. Otherwise, refinancing is not justified. The first ting to be done is to calculate the annual percentage rate (APR) – Annual percentage rate must be less than that paid on the old loan and must be valid for the entire period of the loan, not just during any promotions offered by the bank.
Pay attention to collateral value – collateral value (in the case of a housing loan mortgage) should not be decreased so much that it does not cover the loan amount. Usually, banks require mortgage value representing around 130% of the credit. If the mortgage is lower, you can appeal to an additional warranty. Your income must pay indebtedness – Income must be at least the same level as when the loan was old, especially if it is desired to decrease the cost of borrowing. Now banks are very restrictive in terms of total loans, so are not likely to get loan due to a very high level of debt. In this case, you can call a debtor co-payers or if the bank accepts it.
Beware of the fees – Costs for refinancing can be quite high for certain banks. The most important commissions one should keep in mind are the early repayment of the new loan granting fee and other fees such as enrollment in the electronic archive for valuing real estate collateral, notary fees, insurance, etc. In what currency you refinance – Currency of the new loan is extremely important, especially when it comes foreign currency, and that due to currency risk. It occurs when the currency depreciation against the currency.
Calculate the total cost of credit – total cost of credit is important to calculate both when granting and the end. APR is the total cost includes not only interest but also all related commissions. Annual Percentage Rate helps us to compare different offers refinancing of the same type, the same amount repaid over the same period. It is good to know that the monthly rate will be reduced by the repayment period will be higher. But you have to take into account the fact that the higher repay a loan over a longer period of time, the more you will pay more in the end, because the interest rate will be higher. Pay attention to efficiency – As refinancing to be effective, all costs incurred by the customer must then recovered through cost savings achieved. Dividing the cost of refinancing the amount saved (the difference between the current rate and refinancing rate after) gives the refinancing payback period in months. Only after this period the customer will feel the benefits of refinancing. As said earlier you can also consider a private loan provider company like easy-go for a hassle free and quick loan approval.


text:
<?php

require_once( MULTISTE_CC_INCLUDES_DIR . 'wizard.php' );

class Multisite_Content_Copier_Network_Main_Menu extends Multisite_Content_Copier_Admin_Page {

 	private $wizard = null;

 	public function __construct( $menu_slug, $capability, $args ) {
 		parent::__construct( $menu_slug, $capability, $args );

 		add_action( 'admin_init', array( &$this, 'init_wizard' ), 10 );
 		add_action( 'admin_init', array( &$this, 'validate_form' ) );

        add_action( 'admin_enqueue_scripts', array( $this, 'add_javascript' ) );
        add_action( 'admin_enqueue_scripts', array( $this, 'add_styles' ) );

        add_action( 'wp_ajax_mcc_retrieve_single_post_data', array( &$this, 'retrieve_single_post_data' ) );
        add_action( 'wp_ajax_mcc_retrieve_single_blog_data', array( &$this, 'retrieve_single_blog_data' ) );
        add_action( 'wp_ajax_mcc_retrieve_single_user_data', array( &$this, 'retrieve_single_user_data' ) );
        add_action( 'wp_ajax_mcc_retrieve_cpt_selectors_data', array( &$this, 'retrieve_cpt_selectors_data' ) );
        add_action( 'wp_ajax_mcc_retrieve_cpt_custom_selector_data', array( &$this, 'retrieve_cpt_custom_selector_data' ) );
        add_action( 'wp_ajax_mcc_remove_item_id_from_list', array( &$this, 'remove_item_id_from_list' ) );
 	}

 	public function wizard_start() {
 		$wizard_steps = array( '1','2','3','4','5', '6' );
 		$this->wizard = new MCC_Wizard(
 			$wizard_steps,
 			$this->get_permalink()
 		);
 	}

 	public function init_wizard() {

 		if ( ! isset( $_GET['page'] ) || ( isset( $_GET['page'] ) && $_GET['page'] != $this->get_menu_slug() ) )
 			return;

 		$this->wizard_start();

 		$action = $this->wizard->get_value( 'mcc_action' );

 		if ( $this->wizard->get_current_step() != '1' && empty( $action ) ) {
 			$this->wizard->go_to_step( '1' );
 		}

 		if ( isset( $_GET['mcc_action'] ) && 'mcc_submit_metabox' == $_GET['mcc_action'] && wp_verify_nonce( $_GET['_wpnonce'], 'mcc_submit_meta_box' ) ) {
 			// The user has submitted the meta box in the post editor

 			$content_blog_id = absint( $_GET['content_blog'] );
 			if ( ! get_blog_details( $content_blog_id ) )
 				return false;

 			$src_post_id = absint( $_GET['post_id'] );
 			if ( ! $post = get_blog_post( $content_blog_id, $src_post_id ) )
 				return false;

 			// Post type
 			if ( 'post' == $post->post_type ) {
 				$action = 'add-post';
 				$additional_options = mcc_get_post_additional_settings();
 			}
 			elseif ( 'page' == $post->post_type ) {
 				$action = 'add-page';
 				$additional_options = mcc_get_page_additional_settings();
 			}
 			else {
 				// Custom Post Type
 				if ( $post->post_type == 'attachment' )
 					return false;

 				$action = 'add-cpt';
 				$cpt = $post->post_type;
 				$additional_options = mcc_get_cpt_additional_settings();
 			}

 			// Additional settings
 			$settings = array();
 			foreach ( $additional_options as $option_slug => $label ) {
 				if ( isset( $_GET[ $option_slug ] ) )
 					$settings[ $option_slug ] = true;
 			}

 			// Group, NBT Group or all?
 			if ( ! in_array( $_GET['dest_blog_type'], array( 'group', 'all', 'nbt_group' ) ) )
 				return false;

 			/// Resetting the wizard and redirecting
 			$this->wizard->clean();
 			$this->wizard_start();

 			$dest_blog_type = $_GET['dest_blog_type'];
 			$model = mcc_get_model();
 			$nbt_model = mcc_get_nbt_model();
 			if ( $dest_blog_type == 'group' && ! $model->is_group( absint( $_GET['group'] ) ) ) {
				return false;
			}
			elseif ( $dest_blog_type == 'group' ) {
				// If is a group, we'll need the blogs IDs
				$group =  absint( $_GET['group'] );
				$blogs = $model->get_blogs_from_group( $group );

				if ( empty( $blogs ) )
					return false;

				$ids = array();
				foreach ( $blogs as $blog ) {
					$ids[] = $blog->blog_id;
				}

				$this->wizard->set_value( 'dest_blogs_ids', $ids );
			}
			elseif ( $dest_blog_type == 'nbt_group' && ! $nbt_model->is_template( absint( $_GET['nbt_group'] ) ) ) {
				return false;
			}
			elseif ( $dest_blog_type == 'nbt_group' ) {
				// If is a NBT group, we'll need the blogs IDs
				$template =  absint( $_GET['nbt_group'] );
				$blogs = $nbt_model->get_template_blogs( $template );

				if ( empty( $blogs ) )
					return false;

				$ids = array();
				foreach ( $blogs as $blog ) {
					$ids[] = $blog->blog_id;
				}

				$this->wizard->set_value( 'dest_blogs_ids', $ids );
			}

 			$this->wizard->set_value( 'mcc_action', $action );
 			if ( 'cpt' == $action )
 				$this->wizard->set_value( 'cpt', $cpt );

 			$this->wizard->set_value( 'content_blog_id', $content_blog_id );
 			$this->wizard->set_value( 'dest_blog_type', $dest_blog_type );
 			$this->wizard->set_value( 'settings', $settings );
 			$this->wizard->set_value( 'posts_ids', array( $src_post_id ) );

 			if ( $redirect = wp_get_referer() )
 				$this->wizard->set_value( 'redirect_to', $redirect );

 			$this->wizard->go_to_step( '5' );

 		}

 	}

 	public function add_javascript() {
 		if ( get_current_screen()->id == $this->page_id . '-network' ) {

 			if ( 2 == $this->wizard->get_current_step() || 3 == $this->wizard->get_current_step() || 4 == $this->wizard->get_current_step() ) {
	    		wp_enqueue_script( 'mcc-wizard-js', MULTISTE_CC_ASSETS_URL . 'js/wizard.js', array( 'jquery' ), '20131128' );
	    		wp_enqueue_script( 'mcc-autocomplete', MULTISTE_CC_ASSETS_URL . 'js/autocomplete.js', array( 'jquery' ) );
	    		wp_enqueue_script( 'jquery-ui-autocomplete' );
	 			wp_enqueue_style( 'mcc-jquery-ui-styles', MULTISTE_CC_ASSETS_URL . 'css/jquery-ui.css' );

	 			$l10n = array(
	 				'blog_not_found' => __( 'The blog ID does not exist. Try again.', MULTISTE_CC_LANG_DOMAIN ),
	 				'select_a_blog_id' => __( 'You need to select a blog ID', MULTISTE_CC_LANG_DOMAIN )
	 			);
	 			wp_localize_script( 'mcc-wizard-js', 'captions', $l10n );
	 		}
	 		if ( 5 == $this->wizard->get_current_step() ) {
	 			wp_enqueue_script( 'jquery-ui-progressbar', MULTISTE_CC_ASSETS_URL . 'jquery-ui/jquery.ui.progressbar.js', array( 'jquery-ui-core', 'jquery-ui-widget' ) );
	 		}
    	}
 	}

 	public function add_styles() {
 		if ( get_current_screen()->id == $this->page_id . '-network' ) {
 			wp_enqueue_style( 'mcc-wizard-css', MULTISTE_CC_ASSETS_URL . 'css/wizard.css', '20131128' );

 			if ( 5 == $this->wizard->get_current_step() ) {
				wp_enqueue_style( 'jquery-ui-batchcreate', MULTISTE_CC_ASSETS_URL . 'jquery-ui/jquery-ui-1.10.3.custom.min.css', array() );
	 		}
    	}

 	}

	public function retrieve_single_post_data() {
		if ( ! is_array( $_POST['post_ids'] ) )
			die();

		$this->wizard_start();
		$current_posts = $this->wizard->get_value( 'posts_ids', array() );

		$blog_id = absint( $_POST['blog_id'] );
		$post_ids = $_POST['post_ids'];

		$returning = '';
		foreach ( $post_ids as $post_id ) {
			$post = get_blog_post( $blog_id, absint( $post_id ) );
			if ( ! empty( $post ) ) {
				$returning .= $this->get_row_list( 'post', $post->ID, $post->post_title );
				$current_posts[] = $post->ID;
			}
		}

		$current_posts = $this->wizard->set_value( 'posts_ids', $current_posts );

		echo $returning;

		die();

	}

	public function retrieve_single_blog_data() {
		$blog_id = absint( $_POST['blog_id'] );

		$details = get_blog_details( $blog_id );

		$returning = '';
		if ( ! empty( $details ) ) {
			$returning .= $this->get_row_list( 'blog', $blog_id, $details->blogname );
		}

		echo $returning;

		die();

	}

	public function retrieve_single_user_data() {
		if ( ! is_array( $_POST['user_ids'] ) )
			die();

		$this->wizard_start();

		$returning = '';
		$current_users = $this->wizard->get_value( 'posts_ids', array() );
		if ( ! is_array( $current_users ) )
			$current_users = array();

		foreach ( $_POST['user_ids'] as $user_id ) {
			$details = get_userdata( $user_id );
			if ( ! empty( $details ) ) {
				$returning .= $this->get_row_list( 'user', $details->data->ID,  $details->data->user_login );
				$current_users[] = $details->data->ID;
			}
		}

		$this->wizard->set_value( 'posts_ids', $current_users );

		echo $returning;

		die();

	}

	public function retrieve_cpt_selectors_data() {
		$blog_id = absint( $_POST['blog_id'] );

		switch_to_blog( $blog_id );
		$post_types = mcc_get_registered_cpts();
		if ( empty( $post_types ) ) {
			echo '
' . __( 'There are no custom posts registered for that blog', MULTISTE_CC_LANG_DOMAIN ) . '
';
			die();
		}

		$returning = '';
		foreach ( $post_types as $post_type ) {
			$selected = false;
			$returning .= $this->get_row_cpt_selector_list( $post_type->name, $post_type->label, $selected );
		}

		restore_current_blog();

		echo $returning;

		die();
	}

	public function retrieve_cpt_custom_selector_data() {
		$blog_id = absint( $_POST['blog_id'] );

		$returning = '';
		$returning .= $this->get_row_cpt_selector_list( 'custom', '', false, true );

		echo $returning;

		die();
	}

	public function remove_item_id_from_list() {
		if ( empty( $_POST['item_id'] ) )
			die();

		$item_id = absint( $_POST['item_id'] );

		$this->wizard_start();
		$current_items = $this->wizard->get_value( 'posts_ids', array() );

		$key = array_search( $item_id, $current_items );

		if ( $key !== false ) {
			unset( $current_items[ $key ] );
		}

		$this->wizard->set_value( 'posts_ids', $current_items );

		die();
	}

	public function render_content() {
		$step = $this->wizard->get_current_step();
		$this->render_before_step();

		call_user_func( array( &$this, 'render_step_' . $step ) );
		$this->render_after_step();
	}

	public function render_before_step() {
		mcc_show_errors();
		?>

							<li class="first <?php $this->wizard->breadcrumb_class(1); ?>"><a <?php echo $this->wizard->get_breadcrumb_href(1); ?>>1 <?php _e( 'Select Action', MULTISTE_CC_LANG_DOMAIN ); ?>

							<li class="<?php $this->wizard->breadcrumb_class(2); ?>"><a <?php echo $this->wizard->get_breadcrumb_href(2); ?>>2 <?php _e( 'Select Source', MULTISTE_CC_LANG_DOMAIN ); ?>

							<li class="<?php $this->wizard->breadcrumb_class(3); ?>"><a <?php echo $this->wizard->get_breadcrumb_href(3); ?>>3 <?php _e( 'Select Items', MULTISTE_CC_LANG_DOMAIN ); ?>

							<li class="<?php $this->wizard->breadcrumb_class(4); ?>"><a <?php echo $this->wizard->get_breadcrumb_href(4); ?>>4 <?php _e( 'Select Destinations', MULTISTE_CC_LANG_DOMAIN ); ?>

							<li class="last <?php $this->wizard->breadcrumb_class(5); ?>"><a <?php echo $this->wizard->get_breadcrumb_href(5); ?>>5 <?php _e( 'Finish', MULTISTE_CC_LANG_DOMAIN ); ?>

		<?php
	}

	public function render_after_step() {
		?>

		<?php
	}

	private function render_step_1() {

		$current_action = $this->wizard->get_value( 'mcc_action' );
		?>

<?php _e( 'Select the type of content that you would like to copy.', MULTISTE_CC_LANG_DOMAIN ); ?>

			<form action="" method="post" name="wizardform" id="wizardform">
				<?php wp_nonce_field( 'step_1' ); ?>

<input type="radio" name="mcc_action" value="add-page" <?php checked( $current_action == 'add-page' || empty( $current_action ) ); ?>> <?php _e( 'Pages', MULTISTE_CC_LANG_DOMAIN ); ?>

<input type="radio" name="mcc_action" value="add-post" <?php checked( $current_action == 'add-post' ); ?>> <?php _e( 'Posts', MULTISTE_CC_LANG_DOMAIN ); ?>

<input type="radio" name="mcc_action" value="add-cpt" <?php checked( $current_action == 'add-cpt' ); ?>> <?php _e( 'Custom Post Type (products, events...)', MULTISTE_CC_LANG_DOMAIN ); ?>

<input type="radio" name="mcc_action" value="add-user" <?php checked( $current_action == 'add-user' ); ?>> <?php _e( 'Users', MULTISTE_CC_LANG_DOMAIN ); ?>

<input type="radio" name="mcc_action" value="activate-plugin" <?php checked( $current_action == 'activate-plugin' ); ?>> <?php _e( 'Activate plugins', MULTISTE_CC_LANG_DOMAIN ); ?>

				<?php $this->next_step_button( '1' ); ?>
			</form>
		<?php
	}

	private function render_step_2() {
		$current_action = $this->wizard->get_value( 'mcc_action' );
		?>
			<form action="" method="post">
				<?php wp_nonce_field( 'step_2' ); ?>
				<?php
					switch ( $current_action ) {
						case 'add-page':
						case 'add-user':
						case 'add-post':
						case 'add-cpt': {
							$this->render_blog_selector( $current_action );
							break;
						}

					}
				?>
				<?php $this->next_step_button( '2' ); ?>
			</form>
		<?php
	}

	private function render_blog_selector( $current_action ) {
		$content_blog_id = $this->wizard->get_value( 'content_blog_id' );
		$ajax_url = '';
		if ( ! empty( $content_blog_id ) ) {
			$ajax_url = get_admin_url( absint( $this->wizard->get_value( 'content_blog_id' ) ), $path = 'admin-ajax.php' );
		}
		?>
			<?php if ( 'add-page' == $current_action ): ?>

<?php _e( 'Enter the id or URL of the site containing the pages you wish to copy', MULTISTE_CC_LANG_DOMAIN ); ?>

			<?php elseif( 'add-post' == $current_action ): ?>

<?php _e( 'Enter the id or URL of the site containing the post you wish to copy', MULTISTE_CC_LANG_DOMAIN ); ?>

			<?php elseif( 'add-cpt' == $current_action ): ?>

<?php _e( 'Enter the id or URL of the site containing the custom post types you wish to copy', MULTISTE_CC_LANG_DOMAIN ); ?>

			<?php elseif( 'add-user' == $current_action ): ?>

<?php _e( 'Enter the id or URL of the site containing the users you wish to copy', MULTISTE_CC_LANG_DOMAIN ); ?>

			<?php endif; ?>
			<input name="blog_id" type="text" id="blog_id" size="6" value="<?php echo $content_blog_id; ?>" placeholder="<?php _e( 'Blog ID', MULTISTE_CC_LANG_DOMAIN ); ?>"/>
			<input type="hidden" name="blog_ajax_url" id="blog_ajax_url" value="<?php echo esc_url( $ajax_url ); ?>">

                 <?php _e( 'Or search by site URL', MULTISTE_CC_LANG_DOMAIN ); ?>
					<input type="text" id="autocomplete"  data-type="sites" class="medium-text">
					<?php _e( 'Enter either the subdomain or the sub-folder, ie. for mysite.mydomain.com or mydomain.com/mysite, type "mysite"', MULTISTE_CC_LANG_DOMAIN ); ?>

            <?php if ( 'add-cpt' == $this->wizard->get_value( 'mcc_action' ) ): ?>

	            		<?php submit_button( __( 'Refresh post types', MULTISTE_CC_ADMIN_DIR ), 'secondary', 'mcc-refresh-cpts', false, array( 'id' => 'mcc-refresh-post-types' ) ); ?>

        	<?php endif; ?>

		<?php
	}

	private function render_step_3() {
		$current_action = $this->wizard->get_value( 'mcc_action' );
		$content_blog_id = $this->wizard->get_value( 'content_blog_id' );
		?>
			<form action="" method="post">
				<?php wp_nonce_field( 'step_3' ); ?>
				<?php
					switch ( $current_action ) {
						case 'add-page': {
							$this->render_post_selector( $content_blog_id, 'page' );
							break;
						}
						case 'add-post': {
							$this->render_post_selector( $content_blog_id, 'post' );
							break;
						}
						case 'add-cpt': {
							$this->render_post_selector( $content_blog_id, 'cpt' );
							break;
						}
						case 'activate-plugin': {
							$this->render_plugin_selector();
							break;
						}
						case 'add-user': {
							$this->render_user_selector( $content_blog_id );
							break;
						}

					}

					$this->next_step_button( '3' );
				?>
			</form>
		<?php
	}

	private function next_step_button( $step ) {
		?>

				<input type="submit" name="submit_step_<?php echo $step; ?>" class="button button-primary button-hero alignleft" value="<?php _e( 'Next Step »', MULTISTE_CC_LANG_DOMAIN ); ?>">

		<?php
	}

	private function render_post_selector( $blog_id, $type ) {

		if ( 'cpt' == $type )
			$cpt = $this->wizard->get_value( 'cpt' );
		else
			$cpt = $type;

		$current_selected_settings = $this->wizard->get_value( 'settings' );
		if ( ! is_array( $current_selected_settings ) )
			$current_selected_settings = array();

		$current_posts_ids = $this->wizard->get_value( 'posts_ids' );
		$posts_list = '';
		if ( ! is_array( $current_posts_ids ) ) {
			$current_posts_ids = array();
			?>

			<?php
		}
		else {
			$posts_ids_list = array();
			foreach ( $current_posts_ids as $post_id ) {
				$post = get_blog_post( $this->wizard->get_value( 'content_blog_id' ), $post_id );
				if ( $post->post_type == $cpt && ! in_array( $post->ID, $posts_ids_list ) ) {
					$posts_list .= $this->get_row_list( 'post', $post->ID, $post->post_title );
					$posts_ids_list[] = $post_id;
				}
			}
			?>

			<?php
		}

		require_once( MULTISTE_CC_ADMIN_DIR . 'tables/network-posts-list.php' );
		$args = array(
			'blog_id' => $this->wizard->get_value( 'content_blog_id' ),
			'post_type' => $cpt,
			'selected' => is_array( $current_posts_ids ) ? $current_posts_ids : array()
		);
		$posts_table = new MCC_Posts_List_Table( $args );
		$posts_table->prepare_items();

		?>

<?php _e( 'Select the items that you would like to copy.', MULTISTE_CC_LANG_DOMAIN ); ?>

				<?php _e( 'Check the items in the list that you would like to copy and click on Add itmes to list. Selected items appear below this message.', MULTISTE_CC_LANG_DOMAIN ); ?>

            	<?php echo $posts_list; ?>

<?php _e( 'Additional Options', MULTISTE_CC_LANG_DOMAIN ); ?>

	            <?php $options = mcc_get_additional_settings( $type ); ?>

					<?php foreach( $options as $option_slug => $label ): ?>

<input type="checkbox" name="settings[<?php echo $option_slug; ?>]" <?php checked( array_key_exists( $option_slug, $current_selected_settings ) ); ?>> <?php echo $label; ?>

					<?php endforeach; ?>

				<input type="hidden" id="src_blog_id" name="src_blog_id" value="<?php echo $blog_id; ?>">
				<?php $posts_table->search_box( __( 'Search', MULTISTE_CC_LANG_DOMAIN ), 'search' ); ?>

				<?php $posts_table->display(); ?>

		<?php
	}

	private function render_plugin_selector() {
		$current_selected_plugins = $this->wizard->get_value( 'plugins' );

		require_once( MULTISTE_CC_ADMIN_DIR . 'tables/network-plugins-list.php' );
		$table = new MCC_Plugins_List_Table();
		$table->prepare_items( $current_selected_plugins );

		if ( ! is_array( $current_selected_plugins ) )
			$current_selected_plugins = array();

		?>

<?php _e( 'Select the plugins you want to activate', MULTISTE_CC_LANG_DOMAIN ); ?>

<?php _e( 'Network only or already network activated plugins are not displayed in the list', MULTISTE_CC_LANG_DOMAIN ); ?>

		<?php $table->display();
	}

	private function render_user_selector( $blog_id ) {
		$current_selected_settings = $this->wizard->get_value( 'settings' );
		if ( ! is_array( $current_selected_settings ) )
			$current_selected_settings = array();

		$current_users_ids = $this->wizard->get_value( 'posts_ids', array() );
		$users_list = '';
		if ( empty( $current_users_ids ) ) {
			$current_users_ids = array();
			?>

			<?php
		}
		else {
			$users_ids_list = array();
			foreach ( $current_users_ids as $user_id ) {
				$user = get_userdata( $user_id );

				if ( ! empty( $user ) ) {
					$users_list .= $this->get_row_list( 'user', $user->data->ID, $user->data->user_login );
					$users_ids_list[] = $user->data->ID;
				}

			}
			?>

			<?php
		}

		$user_selection = $this->wizard->get_value( 'users_selection' );
		if ( empty( $user_selection ) )
			$user_selection = 'ids';

		require_once( MULTISTE_CC_ADMIN_DIR . 'tables/network-users-list.php' );
		$args = array(
			'blog_id' => $this->wizard->get_value( 'content_blog_id' ),
			'selected' => is_array( $current_users_ids ) ? $current_users_ids : array(),
			'enabled' => ( $user_selection == 'ids' )
		);
		$users_table = new MCC_Users_List_Table( $args );
		$users_table->prepare_items();

		?>

            	<?php echo $users_list; ?>

<?php _e( 'Select users to copy', MULTISTE_CC_LANG_DOMAIN ); ?>

				<?php _e( 'If you are not copying all users, then check the users in the list that you would like to copy, select Add To List and click on Apply. Selected users appear below this message.', MULTISTE_CC_LANG_DOMAIN ); ?>

<?php _e( 'Add Users', MULTISTE_CC_LANG_DOMAIN ); ?>

					<input type="radio" name="users_selection" <?php checked( $user_selection == 'all' ); ?> value="all" /> <?php _e( 'All users', MULTISTE_CC_LANG_DOMAIN ); ?>

					<input type="radio" name="users_selection" <?php checked( $user_selection == 'ids' ); ?> value="ids"> <?php _e( 'Selected users', MULTISTE_CC_LANG_DOMAIN ); ?>

				<input type="hidden" id="src_blog_id" name="src_blog_id" value="<?php echo $blog_id; ?>">
				<?php $users_table->search_box( __( 'Search', MULTISTE_CC_LANG_DOMAIN ), 'search' ); ?>

				<?php $users_table->display(); ?>

		<?php
	}

	private function render_step_4() {
		?>
			<form action="" method="post">

<?php _e( 'Select the destination sites', MULTISTE_CC_LANG_DOMAIN ); ?>

				<?php wp_nonce_field( 'step_4' ); ?>

				<?php if ( $this->wizard->get_value( 'mcc_action' ) !== 'activate-plugin' ): ?>

							<input type="radio" name="dest_blog_type" id="dest_blog_type_all" value="all" <?php checked( $this->wizard->get_value( 'dest_blog_type' ), 'all' ); ?>>
							<?php _e( 'All Sites', MULTISTE_CC_LANG_DOMAIN ); ?>

				<?php endif; ?>

						<input type="radio" name="dest_blog_type" id="dest_blog_type_list" value="list" <?php checked( $this->wizard->get_value( 'dest_blog_type' ), 'list' ); ?>>
						<?php _e( 'Individual Site(s)', MULTISTE_CC_LANG_DOMAIN ); ?>

					<input name="blog_id" type="text" id="blog_id" size="6" style="float: left; margin-right: 10px;" placeholder="<?php _e( 'Site ID', MULTISTE_CC_LANG_DOMAIN ); ?>"/>

		                 <?php _e( 'Or search by site URL', MULTISTE_CC_LANG_DOMAIN ); ?>
							<input type="text" id="autocomplete" data-type="sites" class="medium-text">
							 <input type="button" class="button-secondary" name="add-blog" id="add-blog" value="<?php _e( 'Add Site', MULTISTE_CC_LANG_DOMAIN ); ?>"></input>

		            	<?php
		            		$blogs_ids = $this->wizard->get_value( 'dest_blogs_ids' );
		            		if ( ! empty( $blogs_ids ) && is_array( $blogs_ids ) ) {
		            			foreach ( $blogs_ids as $blog_id ) {
		            				$blog_details = get_blog_details( $blog_id );
		            				if ( ! empty( $blog_details ) )
		            					echo $this->get_row_list( 'blog', $blog_id, $blog_details->blogname );
		            			}
		            		}
		            	?>

						<input type="radio" name="dest_blog_type" id="dest_blog_type_group" value="group" <?php checked( $this->wizard->get_value( 'dest_blog_type' ), 'group' ); ?>>
						<?php _e( 'Site Group', MULTISTE_CC_LANG_DOMAIN ); ?>

				<select name="group" id="dest_blog_type_group_selector">
					<?php mcc_get_groups_dropdown(); ?>
				</select>

				<?php $settings = mcc_get_settings(); ?>
				<?php if ( $settings['blog_templates_integration'] ): ?>

							<input type="radio" name="dest_blog_type" id="dest_blog_type_nbt_group" value="nbt_group" <?php checked( $this->wizard->get_value( 'dest_blog_type' ), 'nbt_group' ); ?>>
							<?php _e( 'Select by Blog Templates groups', MULTISTE_CC_LANG_DOMAIN ); ?>

					<select name="nbt_group" id="dest_blog_type_nbt_group_selector">
						<?php mcc_get_nbt_groups_dropdown(); ?>
					</select>
				<?php endif; ?>

				<?php $this->next_step_button( '4' ); ?>
			</form>
		<?php

	}

	/**
	 * Gets a row to show an item in a list of posts/users selected
	 *
	 * @param String $slug Slug of the item
	 * @param Integer $id Item ID
	 * @param String $title Label
	 * @return HTML result
	 */
	public function get_row_list( $slug, $id, $title ) {
		ob_start();
		?>
			<li id="<?php echo $slug; ?>-<?php echo $id; ?>">
				<a class="mcc-remove-<?php echo $slug; ?>" href="" data-<?php echo $slug; ?>-id="<?php echo $id; ?>">Remove
				<?php echo $id; ?> <?php echo $title; ?>
				<input type="hidden" name="<?php echo $slug; ?>s_ids[]" value="<?php echo $id; ?>"></input>

		<?php
		return ob_get_clean();
	}

	/**
	 * Displays a radio button for Custom Post Type selection
	 *
	 * @param String $id Normally, the CPT slug
	 * @param String $title Label for the radio
	 * @param Boolean $selected if selected or not
	 * @return HTML result
	 */
	public function get_row_cpt_selector_list( $id, $title, $selected = false, $custom = false ) {
		ob_start();
		?>
			<li id="cpt-<?php echo $id; ?>">
				<?php if ( ! $custom ): ?>
					<input type="radio" name="mcc_cpt" value="<?php echo $id; ?>" <?php checked( $selected ); ?>> <?php echo $title; ?>
				<?php else: ?>

						<input type="radio" id="mcc_cpt_custom" name="mcc_cpt" value="custom" <?php checked( $selected ); ?>>
						<input type="text" name="mcc_cpt_slug" id="mcc_cpt_slug" value="">
						<?php echo $title; ?>

						<?php _e( 'Or insert the slug of your Custom Post Type here if you don\'t see it in the list', MULTISTE_CC_LANG_DOMAIN ); ?>

				<?php endif; ?>

		<?php
		return ob_get_clean();
	}

	/**
	 * Sets all the copy parameters and save it in the queue
	 * Choose the class depending on what the user has been selected
	 * through the wizard
	 */
	public function render_step_5() {

		// Source blog ID and destination blogs IDs
		$src_blog_id = $this->wizard->get_value( 'content_blog_id' );
		$dest_blogs_ids = $this->wizard->get_value( 'dest_blogs_ids' );
		$dest_blog_type = $this->wizard->get_value( 'dest_blog_type' ); // Could be 'all' when trying to copy to all blogs in the network

		// Settings (Additional options)
		$settings = $this->wizard->get_value( 'settings' );

		if ( empty( $settings ) )
			$settings = array();

		$save_settings = array( 'args' => $settings );

		// Action
		$action = $this->wizard->get_value( 'mcc_action' );

		// Setting the class and items IDs/slugs
		if ( 'add-page' == $action ) {
			$posts_ids = $this->wizard->get_value( 'posts_ids' );
			$save_settings['type'] = 'page';
			$save_settings['items_ids'] = $posts_ids;
		}
		if ( 'add-post' == $action ) {
			$posts_ids = $this->wizard->get_value( 'posts_ids' );
			$save_settings['type'] = 'post';
			$save_settings['items_ids'] = $posts_ids;
		}
		if ( 'add-cpt' == $action ) {
			$posts_ids = $this->wizard->get_value( 'posts_ids' );
			$save_settings['type'] = 'post';
			$save_settings['items_ids'] = $posts_ids;
		}
		if ( 'activate-plugin' == $action ) {
			$plugins_ids = $this->wizard->get_value( 'plugins' );
			$save_settings['type'] = 'plugin';
			$save_settings['items_ids'] = $plugins_ids;
			$src_blog_id = 0;
		}
		if ( 'add-user' == $action ) {
			$users_ids = $this->wizard->get_value( 'posts_ids' );
			$save_settings['type'] = 'user';
			$save_settings['items_ids'] = $users_ids;
		}

		if ( 'all' != $dest_blog_type ) {

			// Copyinhg to a few blogs (group, NBT group or list)
			$model = mcc_get_model();
			foreach ( $dest_blogs_ids as $dest_blog_id ) {
				// Inserting a queue item for each blog
				if ( $dest_blog_id != $src_blog_id && ! is_main_site( $dest_blog_id ) ) {
					$model->insert_queue_item( $src_blog_id, $dest_blog_id, $save_settings );
				}
			}

			?>

				<?php _e( 'Your selected items have been copied.', MULTISTE_CC_LANG_DOMAIN ); ?>

			<?php

			$this->show_redirect_notice();

			// Cleaning the wizard
			$this->wizard->clean();
		}
		else {
			// We need first to update the blogs counts in the network
			wp_update_network_counts();
			$blogs_count = get_blog_count();
			?>

			<?php

			// Rendering the progressbar
			$this->render_progressbar_js( $blogs_count , $save_settings );

			?>

				<?php _e( 'Enqueueing all blogs, please do not close or refresh this window', MULTISTE_CC_LANG_DOMAIN ); ?>

			<?php
		}

	}

	public function render_step_6() {

		?>

			<?php _e( 'Your selected items have been copied.', MULTISTE_CC_LANG_DOMAIN ); ?>

		<?php
		$this->show_redirect_notice();

		$this->wizard->clean();

	}

	/**
	 * Redirection notice displayed when the user tries to copy content
	 * from the post meta box
	 */
	private function show_redirect_notice() {
		$redirect_url = false;
		if ( $this->wizard->get_value( 'redirect_to' ) )
			$redirect_url = $this->wizard->get_value( 'redirect_to' );

		if ( ! empty( $redirect_url ) ) {
			?>

				<?php printf( __( 'Click here to return to your previous page.', MULTISTE_CC_LANG_DOMAIN ), esc_url( $redirect_url ) ); ?>

			<?php
		}
	}

	/**
	 * Needed Javascript to render the progressbar
	 *
	 * @param Integer $items_count No of blogs that are going to be queued
	 */
	private function render_progressbar_js( $items_count, $settings ) {

		?>

		<?php
	}

	public function validate_form() {
		if ( isset( $_GET['page'] ) && $this->get_menu_slug() == $_GET['page'] ) {

 			$step = $this->wizard->get_current_step();

 			//STEP 1: Action selection
 			if ( '1' == $step && isset( $_POST['submit_step_1'] ) ) {

 				if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'step_1' ) )
 					return false;

 				if ( ! isset( $_POST['mcc_action'] ) )
 					mcc_add_error( 'wrong-action', __( 'Please select an option', MULTISTE_CC_LANG_DOMAIN ) );

 				if ( ! mcc_is_error() ) {
 					// Let's see if we've gone back to the first step and change the action.
 					// In that case we'll remove the posts IDs values
 					$current_action = $this->wizard->get_value( 'mcc_action' );
 					if ( $current_action != $_POST['mcc_action'] )
 						$this->wizard->set_value( 'posts_ids', array() );

 					// Save action selected
 					$this->wizard->set_value( 'mcc_action', $_POST['mcc_action'] );

 					// If we are trying to activate plugins, step 2 is not for us
 					if ( 'activate-plugin' == $_POST['mcc_action'] )
 						$this->wizard->go_to_step( '3' );
 					else
 						$this->wizard->go_to_step( '2' );

 					return;
 				}
 			}

 			// Step 2: Source blog/CPTs
 			if ( '2' == $step && isset( $_POST['submit_step_2'] ) ) {

 				if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'step_2' ) )
 					return false;

 				if ( ! isset( $_POST['blog_id'] ) || ! $blog_details = get_blog_details( absint( $_POST['blog_id'] ) ) )
 					mcc_add_error( 'blog-id', __( 'The Blog ID does not exist', MULTISTE_CC_LANG_DOMAIN ) );

 				$action = $this->wizard->get_value( 'mcc_action' );
 				if ( 'add-cpt' == $action && empty( $_POST['mcc_cpt'] ) ) {
 					// We need a CPT slug if we are copying a CPT!
 					mcc_add_error( 'blog-id', __( 'You must select a post type', MULTISTE_CC_LANG_DOMAIN ) );
 				}
 				elseif ( 'add-cpt' == $action && 'custom' == $_POST['mcc_cpt'] ) {
 					if ( empty( $_POST['mcc_cpt_slug'] ) )
 						mcc_add_error( 'mcc-cpt', __( 'You must select a post type', MULTISTE_CC_LANG_DOMAIN ) );
 					else
 						$mcc_cpt_slug = $_POST['mcc_cpt_slug'];
 				}

 				if ( ! mcc_is_error() ) {
 					// Setting the CPT slug
 					if ( 'add-cpt' == $action && ! empty( $mcc_cpt_slug ) )
 						$this->wizard->set_value( 'cpt', $mcc_cpt_slug );
 					elseif ( 'add-cpt' == $action )
 						$this->wizard->set_value( 'cpt', $_POST['mcc_cpt'] );

 					// And the source Blog ID
 					$this->wizard->set_value( 'content_blog_id', $_POST['blog_id'] );
 					$this->wizard->go_to_step( '3' );
 				}
 			}

 			// STEP 3: Source items
 			if ( '3' == $step && isset( $_POST['submit_step_3'] ) ) {

 				if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'step_3' ) )
 					return false;

 				$action = $this->wizard->get_value( 'mcc_action' );
 				$post_actions = array( 'add-post', 'add-page', 'add-cpt' );
 				if ( in_array( $action, $post_actions ) && empty( $_POST['posts_ids'] ) )
 					mcc_add_error( 'select-post', __( 'You must add at least one item to the list', MULTISTE_CC_LANG_DOMAIN ) );

 				if ( 'activate-plugin' == $action && empty( $_POST['plugins'] ) )
 					mcc_add_error( 'select-plugin', __( 'You must select at least one plugin', MULTISTE_CC_LANG_DOMAIN ) );

 				if ( 'add-user' == $action ) {
 					if ( empty( $_POST['users_selection'] ) ) {
 						mcc_add_error( 'select-user', __( 'You must select one option', MULTISTE_CC_LANG_DOMAIN ) );
 					}
 					else {
 						$this->wizard->set_value( 'users_selection', $_POST['users_selection'] );
 						if ( 'ids' == $_POST['users_selection'] && empty( $_POST['users_ids'] ) )
 							mcc_add_error( 'select-user', __( 'You add at least one user to the list', MULTISTE_CC_LANG_DOMAIN ) );
 					}

 				}

 				// Additional options
 				if ( isset( $_POST['settings'] ) && is_array( $_POST['settings'] ) ) {
 					$settings = array();
 					foreach ( $_POST['settings'] as $setting => $value ) {
 						$settings[ $setting ] = true;
 					}
 					$this->wizard->set_value( 'settings', $settings );
 				}

 				if ( ! mcc_is_error() ) {
 					// Setting the sources posts/users/plugins
 					if ( in_array( $action, $post_actions ) ) {
	 					$posts_ids = array();
	 					foreach ( $_POST['posts_ids'] as $post_id ) {
	 						$posts_ids[] = absint( $post_id );
	 					}
	 					$this->wizard->set_value( 'posts_ids', $posts_ids );
	 				}

	 				if ( 'activate-plugin' == $this->wizard->get_value( 'mcc_action' ) ) {
	 					$plugins = $_POST['plugins'];
	 					$this->wizard->set_value( 'plugins', $plugins );
	 				}

	 				if ( 'add-user' == $this->wizard->get_value( 'mcc_action' ) ) {
	 					if ( 'all' == $_POST['users_selection'] )
	 						$users = 'all';
	 					else
	 						$users = $_POST['users_ids'];

	 					$this->wizard->set_value( 'posts_ids', $users );
	 				}

 					$this->wizard->go_to_step( '4' );
 				}
 			}

 			// STEP 4: Destination blogs
 			if ( '4' == $step && isset( $_POST['submit_step_4'] ) ) {
 				if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'step_4' ) )
 					return false;

 				$type = '';
 				if ( ! isset( $_POST['dest_blog_type'] ) || ! in_array( $_POST['dest_blog_type'], array( 'all', 'list', 'group', 'nbt_group' ) ) ) {
 					mcc_add_error( 'blog-type', __( 'Please, select an option', MULTISTE_CC_LANG_DOMAIN ) );
 				}
 				else {
 					$type = $_POST['dest_blog_type'];
 				}

 				$this->wizard->set_value( 'dest_blog_type', $type );

 				// saving just in case the error deletes all the data
 				if ( isset( $_POST['blogs_ids'] ) && is_array( $_POST['blogs_ids'] ) ) {
 					$blogs_ids = array();
 					$src_blog_id = $this->wizard->get_value( 'content_blog_id' );
 					foreach ( $_POST['blogs_ids'] as $blog_id ) {
 						if ( ! in_array( $blog_id, $blogs_ids ) && $src_blog_id != $blog_id )
 							$blogs_ids[] = $blog_id;
 					}
 					$this->wizard->set_value( 'dest_blogs_ids', $blogs_ids );
 				}

 				// List selected by the user
 				if ( 'list' == $type ) {
 					if ( ! isset( $_POST['blogs_ids'] ) || ! is_array( $_POST['blogs_ids'] ) ) {
 						mcc_add_error( 'blog-id', __( 'You have not selected any blog', MULTISTE_CC_LANG_DOMAIN ) );
 						return;
 					}
 					$this->wizard->set_value( 'dest_blogs_ids', $_POST['blogs_ids'] );
 				}

 				// Group of blogs
 				if ( 'group' == $type ) {
 					if ( empty( $_POST['group'] ) ) {
 						mcc_add_error( 'blog-group', __( 'You have not selected any group', MULTISTE_CC_LANG_DOMAIN ) );
 						return;
 					}

 					$group = absint ( $_POST['group'] );

 					$model = mcc_get_model();
 					if ( ! $model->is_group( $group ) )
 						mcc_add_error( 'wrong-group', __( 'You have selected a wrong group', MULTISTE_CC_LANG_DOMAIN ) );

 					$blogs = $model->get_blogs_from_group( $group );

 					if ( empty( $blogs ) ) {
 						mcc_add_error( 'wrong-group', __( 'There are no blogs attached to that group.', MULTISTE_CC_LANG_DOMAIN ) );
 					}
 					else {
 						// Saving the blogs IDs in the wizard
 						$ids = array();
 						foreach ( $blogs as $blog ) {
 							$ids[] = $blog->blog_id;
 						}
 						$this->wizard->set_value( 'dest_blogs_ids', $ids );
 					}

 				}

 				// New Blog Templates Groups
 				if ( 'nbt_group' == $type ) {

 					if ( ! function_exists( 'nbt_get_model' ) ) {
 						mcc_add_error( 'nbt-error', __( 'There was an error while trying to get the template information', MULTISTE_CC_LANG_DOMAIN ) );
 						return;
 					}

 					if ( empty( $_POST['nbt_group'] ) ) {
 						mcc_add_error( 'nbt-group', __( 'You have not selected any template', MULTISTE_CC_LANG_DOMAIN ) );
 						return;
 					}

 					$group = absint ( $_POST['nbt_group'] );

 					$model = nbt_get_model();
 					$template = $model->get_template( $group );
 					if ( empty( $template ) )
 						mcc_add_error( 'wrong-nbt-group', __( 'You have selected a wrong template', MULTISTE_CC_LANG_DOMAIN ) );

 					$nbt_model = mcc_get_nbt_model();
 					$blogs_relationships = $nbt_model->get_template_blogs( $group );

 					if ( empty( $blogs_relationships ) ) {
 						mcc_add_error( 'wrong-nbt-group', __( 'There are no blogs attached to that template.', MULTISTE_CC_LANG_DOMAIN ) );
 					}
 					else {
 						// Saving the blogs IDs in the wizard
 						$this->wizard->set_value( 'dest_blogs_ids', $blogs_relationships );
 					}

 				}

 				if ( ! mcc_is_error() ) {
					$this->wizard->go_to_step( '5' );
		 		}
 			}

 		}

	}

}

redpajama_set_name: RedPajamaGithub